服务器之家

服务器之家 > 正文

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

时间:2021-10-16 10:15     来源/作者:第三枚小菜鸟

一、介绍

原理为使用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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#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登录有验证码的网站内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_41425956/article/details/115868097

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部