51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 664|回复: 0
打印 上一主题 下一主题

验证码如何用python+selenium自动识别并登录成功!

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-24 16:08:03 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 草帽路飞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.存在的问题

此网站的验证码较为简单,当遇到更加复杂的验证码时,需要写循环代码重新识别,重新登录,直到验证码正确、登陆成功为止。后续补充












分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-20 19:57 , Processed in 0.062969 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表