Python破解网页登录图片验证码-ddddocr库

环境使用

python 3.8
pycharm

模块使用

  1. selenium
pip install selenium==3.141.0
  1. ddddocr
pip install ddddocr
  1. 谷歌浏览器 以及 谷歌驱动(版本和浏览器版本对应)

图片验证功能

  1. 导入ddddocr识别模块
import ddddocr
缺点:准确率不高
  1. 实例化对象
ocr = ddddocr.DddddOcr()
  1. 读取图片内容
f = open('填入文件地址', mode = 'rb')
img = f.read()

mode = 'rb' 以二进制方法读取内容

  1. 识别图片内容
result = ocr.classification(img)
print(result)
  1. 识别结果

image.png

image.png

实现登录功能

  1. 启动浏览器并访问指定页面
url = '需要访问的url'
driver = webdriver.Chrome()
driver.maximize_window()  # 将浏览器最大化
driver.get(url)

webdriver.Chrome()创建一个基于Google Chrome浏览器的WebDriver对象。也可以是webdriver.Edge()webdriver.Firefox(),基于Edge浏览器、火狐浏览器。

  1. 定位用户名、密码、验证码框并接收
user_input = driver.find_element(by.By.XPATH, value='//input[@type="text"]')
pw_input = driver.find_element(by.By.XPATH, value='//input[@type="password"]')
code_input = driver.find_element(by.By.XPATH, value='//input[@name="regImageCode"]')

a) 使用XPath定位元素: XPath是一种在XML和HTML文档中查找信息的语言,常用于在Selenium中精确地定位网页中的元素。这里的代码使用了XPath表达式来定位所需的输入框。

b) driver.find_element(by.By.XPATH, value=...):调用driver对象的find_element方法,指定定位策略为By.XPATH,即使用XPath表达式来查找元素。

c) '//input[@type="text"]':提供的XPath表达式表示查找文档中所有type属性值为"text"<input>元素。在登录页面场景下,通常这样的元素对应于用户名输入框。

  1. 验证码识别
ocr = ddddocr.DdddOcr()
wait = WebDriverWait(driver, 10)
imgCode = driver.find_element(by.By.XPATH, value='//img[@src="/api/captcha"]')
imgCode.screenshot('code.png')
time.sleep(0.5)
with open('code.png', 'rb') as fp:
    image = fp.read()
result = ocr.classification(image)

通过xpath定位到验证码图片并使用ddddocr识别验证码,识别结果result为字符串形式

  1. 用户名、密码、验证码填充
user_input.send_keys('输入的用户名')
pw_input.send_keys('输入的密码')
code_input.send_keys(result)
  1. 模拟点击登录
driver.find_element(by.By.XPATH, '//button[normalize-space()="登录"]').click()

通过xpath定位登录按钮,模拟人为点击。

完整代码

url = '需要访问的url'
driver = webdriver.Chrome()
driver.maximize_window()  # 将浏览器最大化
driver.get(url)

# 定位用户名、密码、验证码框并接收
user_input = driver.find_element(by.By.XPATH, value='//input[@type="text"]')
pw_input = driver.find_element(by.By.XPATH, value='//input[@type="password"]')
code_input = driver.find_element(by.By.XPATH, value='//input[@name="regImageCode"]')

# 验证码识别
ocr = ddddocr.DdddOcr()
wait = WebDriverWait(driver, 10)
imgCode = driver.find_element(by.By.XPATH, value='//img[@src="/api/captcha"]')
imgCode.screenshot('code.png')
time.sleep(0.5)
with open('code.png', 'rb') as fp:
    image = fp.read()
result = ocr.classification(image)

# 用户名、密码、验证码填充
user_input.send_keys('输入的用户名')
pw_input.send_keys('输入的密码')
code_input.send_keys(result)
time.sleep(1)

# 点击登录
driver.find_element(by.By.XPATH, '//button[normalize-space()="登录"]').click()

结语

本人资历尚浅,有问题还请大家指出。谢谢观看,欢迎留言交流。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值