教你怎么⽤python批量登录带有验证码的⽹站
⽬录
⼀、介绍
⼆、准备
三、实践
3.1 下载驱动
3.2 安装python依赖
3.3 编写程序
3.4 优化
⼀、介绍
原理为使⽤selenium驱动chorme打开⼀个新的进程并打开数组中的⽹址,之后程序⾃动输⼊我们事先填
⼊的账号密码,通过已实现的验证码识别模块填写验证码进⾏登录。登陆完成后⾃动切换页⾯,进⾏下⼀个页⾯的登录
⼆、准备
部署环境:win10
开发环境:python2.7
chrome版本89.0.4389.128
三、实践
3.1 下载驱动
设置查看chorme版本
下载对应版本的chromedriver
解压后,将分别放进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
ptions import NoAlertPresentException
from pytesser import *
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageFilter
import traceback
threshold = 140selenium怎么使用
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 = place(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 = p((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=[
'st:6086/QX_SPD_B2B/',
'st:6086/QX_SPD_B2B/'
]
for i in range(0, len(urls)):
url = urls[i]
windows_open = "window.open('" + url + "')"
time.sleep(1)
#获取当前页⾯句柄
windows = driver.window_handles
driver.switch_to_window(windows[i+1])
login("USERNAME","PASSWORD",driver)
#_cookies()
#print(cookies)
##解决页⾯加载不正确的问题
time.sleep(2)
time.sleep(100)
driver.close()
3.4 优化
在图⽚保存那块直接读取⽹站的图⽚并且不保存直接识别
到此这篇关于教你怎么⽤python批量登录带有验证码的⽹站的⽂章就介绍到这了,更多相关python登录有验证码的⽹站内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。