Python+selenium 识别图文验证码与操作cookies

1.操作cookies

获取登录前和登录后的cookies,找出差异的cookies(登录和未登录的区别,把重要的提取出来),通过webdriver提供的方法删除和添加cookies,刷新页面或get登录后的url,通过cookies绕过登录。

webdriver提供操作cookies的方法:

  • driver.get_cookies()                    获取所有cookie
  • driver.get_cookie(name)             获取key为name的cookie
  • driver.add_cookie(cookie_dict)   添加cookie到浏览器
  • driver.delete_cookie(name)        删除key为name的cookie
  • driver.delete_all_cookies()          删除所有cookies

2.验证码识别技术

获取图文验证码顶点坐标,获取屏幕截图,通过顶点坐标获取验证码截图,通过-tesseract-OCR工具识别图文验证码,正则表达式处理特殊字符。

tesseract获取链接:https://pan.baidu.com/s/1ToZMynsl1Ev8XH9mGOcTsw 提取码:5z5m 

tesseract安装流程:https://jingyan.baidu.com/article/219f4bf788addfde442d38fe.html

#!/usr/bin/python3
# coding=utf-8
from selenium import webdriver
from PIL import Image
import pytesseract
import re

# 获取元素顶点坐标
def get_location(css, multiple=1.25):
    location_element = driver.find_element_by_xpath(css).location                             # 获取元素顶点坐标
    size_element = driver.find_element_by_xpath(css).size                                     # 获取元素的宽和高
    location = (int(location_element['x'])*multiple, int(location_element['y'])*multiple,     # 获取元素像素坐标
                (int(location_element['x'])+size_element['width'])*multiple,
                (int(location_element['y'])+size_element['height'])*multiple)
    return location

# 截图并识别二维码
def discern_verification_code(location):
    screenshot_name = 'screenshot_windows.png'
    code_name = 'code.png'
    driver.save_screenshot(screenshot_name)                 # 获取屏幕截图
    img = Image.open(screenshot_name)
    img = img.crop(location)                                # 获取验证码截图
    img.save(code_name)
    img = Image.open(code_name)
    codes = pytesseract.image_to_string(img)                # 识别图文验证码
    code = ''
    for i in codes.strip():                                 # 正则表达式去除特殊字符
        pattern = re.compile(r'[a-zA-Z0-9]')
        m = pattern.search(i)
        if m != None:
            code += i
    return code

driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('')
driver.maximize_window()
code_str = discern_verification_code(get_location(css("")))
print(code_str)

 

参考:https://www.jb51.net/article/132204.htm

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SitVen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值