验证码如何用python+selenium自动识别并登录成功!
本帖最后由 草帽路飞UU 于 2022-8-26 16:47 编辑目录
一、所需要的库二、实现过程1.引入库2.打开网站3.查找元素4.识别验证码并输入5.点击登录按钮,完成登录三、总结1.完整代码2.存在的问题
一、所需要的库time 控制程序的运行时间
selenium 自动化测试工具
ddddocr 图片识别
当在安装ddddocr库时,可以通过镜像网站下载库
常用的镜像网站
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/.
pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple
二、实现过程以古诗文网为例
1.引入库import time
import ddddocr
from selenium.webdriver.common.by import By
from selenium import webdriver
2.打开网站
driver = webdriver.Chrome()
driver.get('https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx')
time.sleep(2)
3.查找元素 按F12打开开发者模式,选择元素,#email即为账号的位置(这里使用CSS选择元素)以此类推,将密码、验证码、验证码图片的位置找出来,将账号和密码输入进去。name = driver.find_element(By.CSS_SELECTOR, "#email")# 账号输入框位置name.send_keys("******")# 输入你的账号pwd = driver.find_element(By.CSS_SELECTOR, "#pwd")# 密码输入框位置pwd.send_keys("******")# 输入你的密码code = driver.find_element(By.CSS_SELECTOR, "#code")# 验证码输入框位置imgCode = driver.find_element(By.CSS_SELECTOR, "#imgCode")# 验证码图片位置
4.识别验证码并输入
imgCode.screenshot("code.png")# 将验证码截图,保存为code.png
time.sleep(1)
# 以下为识别验证码的代码
ocr = ddddocr.DdddOcr()
with open("code.png", "rb") as fp:
image = fp.read()
catch = ocr.classification(image)# 验证码返回给catch
code.send_keys(catch)# 将识别到的验证码输入到框内
time.sleep(1)
5.点击登录按钮,完成登录
login = driver.find_element(By.CSS_SELECTOR, "#denglu")# 找到登录的位置
login.click()# 点击登录按钮
time.sleep(1)
三、总结
1.完整代码
import time
import ddddocr
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx')
time.sleep(2)
name = driver.find_element(By.CSS_SELECTOR, "#email")# 账号输入框位置
name.send_keys("******")# 输入你的账号
pwd = driver.find_element(By.CSS_SELECTOR, "#pwd")# 密码输入框位置
pwd.send_keys("******")# 输入你的密码
code = driver.find_element(By.CSS_SELECTOR, "#code")# 验证码输入框位置
imgCode = driver.find_element(By.CSS_SELECTOR, "#imgCode")# 验证码图片位置
imgCode.screenshot("code.png")# 将验证码截图,保存为code.png
time.sleep(1)
# 以下为识别验证码的代码
ocr = ddddocr.DdddOcr()
with open("code.png", "rb") as fp:
image = fp.read()
catch = ocr.classification(image)# 验证码返回给catch
code.send_keys(catch)# 将识别到的验证码输入到框内
time.sleep(1)
login = driver.find_element(By.CSS_SELECTOR, "#denglu")# 找到登录的位置
login.click()# 点击登录按钮
time.sleep(1)
2.存在的问题此网站的验证码较为简单,当遇到更加复杂的验证码时,需要写循环代码重新识别,重新登录,直到验证码正确、登陆成功为止。后续补充
页:
[1]