教你怎么用python批量登录带有验证码的网站

一、介绍

原理为使用selenium驱动chorme打开一个新的进程并打开数组中的网址,之后程序自动输入我们事先填入的账号密码,通过已实现的验证码识别模块填写验证码进行登录。登陆完成后自动切换页面,进行下一个页面的登录

二、准备

部署环境:win10

开发环境:python2.7

chrome版本89.0.4389.128

三、实践

3.1 下载驱动

设置查看chorme版本

下载对应版本的chromedriver

解压后,将chromedriver.exe分别放进chrome浏览器目录 和 Python根目录

chrome浏览器目录(如:C:\Program Files (x86)\Google\Chrome\Application)

Python根目录(如:D:\Python\Python37)

3.2 安装python依赖

pip install pillow

pip install selenium

3.3 编写程序

batchlogin.py

#coding=UTF-8
import time
import os
from selenium import webdriver
from selenium.common.exceptions import NoAlertPresentException
from pytesser import *
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageFilter
import traceback

threshold = 140
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
rep={'O':'0',
    'I':'1','L':'1',
    'Z':'2',
    'S':'8'
    };  

## 灰度化照片后得到验证码
def  getverify1(name):
    im = Image.open(name)
    # 转化到灰度图
    imgry = im.convert('L')
    # imgry.save('g'+name)
    # 二值化,采用阈值分割法,threshold为分割点
    out = imgry.point(table,'1')
    # out.save('b'+name)
    # 识别
    text = image_to_string(out)
    # 校正
    text = text.strip()
    text = text.upper();
    for r in rep:
        text = text.replace(r,rep[r])
    # out.save(text+'.jpg')
    print text
    return text  

# 获取浏览器当前的验证码图片并调用返回验证码
def getVCode(driver):
    # 保存浏览器当前页面
    driver.save_screenshot("page.png")
    # 从页面中截取验证码(XPATH定位)
    vcode = driver.find_element_by_xpath("//*[@id='randImage']")
    # 获取验证码上下左右边界坐标(手动加减像素以更精确)
    loc = vcode.location
    size = vcode.size
    left = loc['x']+5
    top = loc['y']
    right = (loc['x'] +size['width']-5)
    button = (loc['y']+size['height'])
    # 截取页面中的验证码(进行截图:参数时一个元组(left,top,right,button)并保存
    page_pic = Image.open('page.png')
    v_code_pic = page_pic.crop((left,top,right,button))
    v_code_pic.save('yzm.png')
    return getverify1('yzm.png')
    # return getverify1(v_code_pic)

#自动登录操作(参数为登路账号,密码,webdriver驱动对象)
def login(username,password,driver):
    v_code = getVCode(driver)
    driver.find_element_by_id('user_name').click() # 点击用户名输入框
    driver.find_element_by_id('user_name').clear() # 清空输入框
    driver.find_element_by_id('user_name').send_keys(username) # 自动敲入用户名

    driver.find_element_by_id('user_password').click() # 点击密码输入框
    driver.find_element_by_id('user_password').clear() # 清空输入框
    driver.find_element_by_id('user_password').send_keys(password) # 自动敲入密码

    driver.find_element_by_id('v_code').click() # 点击验证码输入框
    driver.find_element_by_id('v_code').clear() # 清空输入框
    driver.find_element_by_id('v_code').send_keys(v_code) # 自动敲入验证码

    driver.find_element_by_xpath('//*[@id="SubmitButton"]').click()

open.py

#coding=UTF-8
from selenium import webdriver
from batchlogin import *
driver = webdriver.Chrome()
urls=[
    'http://www.test.com:6086/QX_SPD_B2B/',
	'http://www.test.com:6086/QX_SPD_B2B/'
]

for i in range(0, len(urls)):
    url = urls[i]
    windows_open = "window.open('" + url + "')"
    driver.execute_script(windows_open)
    time.sleep(1)
    #获取当前页面句柄
    windows = driver.window_handles
    driver.switch_to_window(windows[i+1])
    login("USERNAME","PASSWORD",driver)

    #cookies=driver.get_cookies()
    #print(cookies)
    ##解决页面加载不正确的问题
    time.sleep(2)

time.sleep(100)
driver.close()

3.4 优化

在图片保存那块直接读取网站的图片并且不保存直接识别

到此这篇关于教你怎么用python批量登录带有验证码的网站的文章就介绍到这了,更多相关python登录有验证码的网站内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python 模拟网站登录——滑块验证码的识别

    普通滑动验证 以http://admin.emaotai.cn/login.aspx为例这类验证码只需要我们将滑块拖动指定位置,处理起来比较简单.拖动之前需要先将滚动条滚动到指定元素位置. import time from selenium import webdriver from selenium.webdriver import ActionChains # 新建selenium浏览器对象,后面是geckodriver.exe下载后本地路径 browser = webdriver.Fire

  • Python3+Appium安装及Appium模拟微信登录方法详解

    一.Appium安装 我们知道selenium是桌面浏览器自动化操作工具(Web Browser Automation) appium是继承selenium自动化思想旨在使手机app操作也能自动化的工具(Mobile App Automation Made Awesome). appium可以通过Desktop App和npm两种方式安装.Desktop App类似于selenium IDE提供一个图形界面式操作工具:npm类似于selenium就只能使用命令行. 如果对appium还不太熟悉,

  • python解决12306登录验证码的实现

    在家无聊,线代和高数看不懂,整点事情干,就准备预定回学校的高铁票,于是就有了这个文章 准备工作 1.pip安装chromediver,当然也可以手动解压(网上的教程好像没有提到pip,手动安装到C盘pycharm里面的Scripts就行了) chromedriver.storage.googleapis.com/index.html这是chromedriver文件官网,在chrome里面设置查看自己的版本,然后找对应的版本就完了 2.注册个超级鹰,http://www.chaojiying.co

  • 用python登录带弱图片验证码的网站

    上一篇介绍了使用python模拟登陆网站,但是登陆的网站都是直接输入账号及密码进行登陆,现在很多网站为了加强用户安全性和提高反爬虫机制都会有包括字符.图片.手机验证等等各式各样的验证码.图片验证码就是其中一种,而且识别难度越来越大,人为都比较难识别.本篇我们简单介绍一下使用python登陆带弱图片验证码的网站. 图片验证码 一般都通过加干扰线.粘连或扭曲等方式来增加强度. 登陆 我们选择一个政务网站(图片验证码的强度较低). 点击个人用户登录 访问网站首页以后我们发现需要先点击个人用户登陆,且元

  • python tkinter制作用户登录界面的简单实现

    本文只是几年前学习的tkinter的时候写的测试程序,十分之简陋,只是学习用,没什么其他用处. 学习一下莫烦Python的tkinter教程,根据教程制作了用户登录注册页.基本功能为检查登录.注册. 运行如下: ​​​​​​ 代码如下: # -*- coding: utf-8 -*- """ Created on Sun Aug 5 10:34:10 2018 @author: Administrator """ import tkinter a

  • Python爬虫模拟登录带验证码网站

    爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法.python提供了强大的url库,想做到这个并不难.这里以登录学校教务系统为例,做一个简单的例子. 首先得明白cookie的作用,cookie是某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据.因此我们需要用Cookielib模块来保持网站的cookie. 这个是要登陆的地址 http://202.115.80.153/ 和验证码地址 http://202.115.80.153/CheckCode.

  • python爬取企查查企业信息之selenium自动模拟登录企查查

    最近接了个小项目需要批量搜索企查查上的相关企业并把指定信息保存到Excel文件中,由于企查查需要登录后才能查看所有搜索到的信息所以第一步需要模拟登录企查查. python模拟登录企查查最重要的是自动拖拽验证插件 先介绍下项目中使用到的工具与库 Python的selenium库: Web应用程序测试的工具,Selenium可以模拟用户在浏览器中的操作,就像真实用户使用一样. 官方技术文档:https://www.selenium.dev/selenium/docs/api/py/index.htm

  • python中requests模拟登录的三种方式(携带cookie/session进行请求网站)

    一,cookie和session的区别 cookie在客户的浏览器上,session存在服务器上 cookie是不安全的,且有失效时间 session是在cookie的基础上,服务端设置session时会向浏览器发送设置一个设置cookie的请求,这个cookie包括session的id当访问服务端时带上这个session_id就可以获取到用户保存在服务端对应的session 二,爬虫处理cookie和session 带上cookie和session的好处: 能够请求到登录后的界面 带上cook

  • 教你怎么用python批量登录带有验证码的网站

    一.介绍 原理为使用selenium驱动chorme打开一个新的进程并打开数组中的网址,之后程序自动输入我们事先填入的账号密码,通过已实现的验证码识别模块填写验证码进行登录.登陆完成后自动切换页面,进行下一个页面的登录 二.准备 部署环境:win10 开发环境:python2.7 chrome版本89.0.4389.128 三.实践 3.1 下载驱动 设置查看chorme版本 下载对应版本的chromedriver 解压后,将chromedriver.exe分别放进chrome浏览器目录 和 P

  • PHP curl模拟登录带验证码的网站

    需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! <?php namespace Home\Controller; use Think\Controller; class LoginController extends Controller { protected $cookieName = array('cookie_verify', 'cookie_verify'); protected $

  • 教你如何利用Python批量翻译英文Word文档并保留格式

    一.需求描述 手上有大量外文文档(本案例以5份为例,分别命名为 test1.docx test2.docx 以此类推),其中一份如下: 基本需求:「批量将这些文档的内容全部翻译成中文,并转存到新的文件中」,效果如下: 高级需求:基本需求满足的同时,要求 「保留原文档的格式」,效果如下: 二.逻辑梳理 2.1 翻译 API 本需求的核心是翻译,策略是利用网络的翻译 API,这里推荐百度翻译开放平台,不考虑并发数的话可以用标准版,免费使用不限字符量! " 百度翻译开放平台:http://api.fa

  • PHP使用CURL实现对带有验证码的网站进行模拟登录的方法

    网上的很多模拟登录程序,大都是通过服务程序apache之类的运行,获取到验证码之后显示在网页上,然后填上再POST出去,这样虽然看起来很友好,但是既然模拟登录,登录后所干的事情就不一定是短时间完成的,所以这就要受到php最大执行时间的限制,而且有些操作还有可能权限不足. 本文提供了一个程序实例,思路就是获取到验证码之后把验证码存储为一个图片,然后程序休眠20秒,在20秒之后由用户手动查看图片,并把验证码填写到code.txt文件中,20秒休眠完成后,程序会读code.txt的验证码,这样再带着验

  • Python实现ssh批量登录并执行命令

    局域网内有一百多台电脑,全部都是linux操作系统,所有电脑配置相同,系统完全相同(包括用户名和密码),ip地址是自动分配的.现在有个任务是在这些电脑上执行某些命令,者说进行某些操作,比如安装某些软件,拷贝某些文件,批量关机等.如果一台一台得手工去操作,费时又费力,如果要进行多个操作就更麻烦啦. 或许你会想到网络同传,网络同传是什么?就是在一台电脑上把电脑装好,配置好,然后利用某些软件,如"联想网络同传"把系统原样拷贝过去,在装系统时很有用,只要在一台电脑上装好,同传以后所有的电脑都装

  • python实现QQ批量登录功能

    本文实例为大家分享了python实现QQ批量登录功能的具体代码,供大家参考,具体内容如下 小编收集整理的第一份代码:python3.6批量登陆QQ import os import time import win32gui import win32api import win32con from ctypes import * from pykeyboard import PyKeyboard from pymouse import PyMouse # 实例化PyKeyboard和PyMouse

  • 使用Python进行QQ批量登录的实例代码

    具体代码如下所示: #coding=utf-8 __author__ = 'Eagle' import os import time import win32gui import win32api import win32con import SendKeys from ctypes import * def QQ(qq,pwd): a = win32gui.FindWindow(None, "QQ") #运行QQ os.system('"C:\Program Files (

  • Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

    一.场景描述 这里有以四张发票为例(辰哥网上搜的),将发票图片放到pic文件夹下. 随便打开一张发票 提取目标:金额.名称.纳税人识别号.开票人. 最后将每一张发票的这四个内容保存到excel中: 二.准备环境 需要用到的库如下: from PIL import Image as PI import pyocr import pyocr.builders from cnocr import CnOcr 安装的命令如下: pip install pyocr pip install cnocr 发票

  • Python批量查询关键词微信指数实例方法

    教你用Python批量查询关键词微信指数. 前期准备安装好Python开发环境及Fiddler抓包工具.前期准备安装好Python开发环境及Fiddler抓包工具. 首先打开Fiddler软件,点击Tools,在下拉菜单选择Options,然后选中HTTPS,进行HTTPS设置,如下图所示: 再进行connections设置,如下图所示: 手机配置主要是使电脑和手机处于同一个局域网,打开手机WLAN设置,开启手动代理,然后设置代理服务器主机名和代理服务器端口.代理服务器主机名为电脑IPv4地址,

随机推荐