php验证码后的小勾,Selenium中遇到验证码问题的处理

我们使用selenium自动化测试工具中难免会遇到验证码,那么我们应该如何处理?

使用抓包工具获取cookie,然后在python+selenium中进行免登录,也算是跳过验证码

给大家弄一个简单的抓取百度登录cookie

1、安装charles,打开charles,并安装相关的https证书,并且将我们想要获取cookie的网址进行拦截(只显示该网址)

d45c7e7c6a12368bd73793f0f0030a49.png

2、打开百度,输入账号密码,记得勾选【下次自动登录】

04cf72f3e90078ee98365c9f360b9e23.png

3、此时的charles已经记录了cookie信息,让我们来找一找【BAIDUID】与【BDUSS】

94409579c2092f3213f1b210b0f48e8c.png

我们将【BAIDUID】与【BDUSS】值复制拿出来,运用到代码中

4、打开pycharm,将我们拿到的cookie运用起来

import time

from selenium import webdriver

driver = webdriver.Chrome()

driver.implicitly_wait(15)

driver.get('http://www.baidu.com/')

driver.maximize_window()

driver.add_cookie({"name":"BAIDUID","value":"你抓取到的BAIDUID值"})

driver.add_cookie({"name":"BDUSS","value":"你抓取到的BDUSS值"})

time.sleep(2)

driver.refresh()

5、运行查看结果

5947340199c98469a7fa5c196f9c0c96.png

使用模拟用户登录的方式来跳过验证码

就是将输入用户名和密码的地方换成input的方式,并加强制时间等待输入信息

这里也是拿百度示例

#跳过验证码方式二:

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://www.baidu.com/")

driver.implicitly_wait(20)

driver.find_element_by_link_text('登录').click()

driver.find_element_by_class_name('tang-pass-footerBarULogin').click()

inputs = driver.find_elements_by_tag_name('input')

while True:

for i in inputs:

if i.get_attribute('placeholder') =="手机/邮箱/用户名":

a = input("请输入手机号")

i.send_keys(a)

elif i.get_attribute('placeholder') =='密码':

a = input("请输入密码")

i.send_keys(a)

break

break

driver.find_element_by_id('TANGRAM__PSP_10__submit').click()

使用pytesseract(图片识别库)+PIL(图片处理库)的方式处理验证码

PIL是Python平台事实上的图像处理标准库,支持多种格式,并提供强大的图形与图像处理功能。目前PIL的官方最新版本为1.1.7,支持的版本为python 2.5, 2.6, 2.7,并不支持python3,因此我们用pillow代替,进入DOS命令行窗口,敲入以下代码:

pip install pillow

注意: 如果你开着fiddler或者其他抓包工具,关闭后在装库,切记。

接下来通过处理后,进行验证码的读取,读取使用pytesseract,打开cmd,输入:

pip install pytesseract

完事安装tesseract-ocr软件:

安装地址及配置该环境教程

配置好环境变量以后,我们修改一下pysseract.py的配置:

5a83d7d0e05a616013070e5972a79064.png

把tesseract_cmd 后面值修改为安装目录下的tesseract.exe执行文件绝对路径

使用方法

from selenium import webdriver

import time

from PIL import Image

import pytesseract

driver = webdriver.Chrome()

driver.get('http://www.qunar.com/')

loginbtn = driver.find_element_by_id('__headerInfo_login__')

ActionChains(driver).click(loginbtn).perform()

time.sleep(1)

#1、浏览器全屏(放大):

driver.maximize_window()

time.sleep(2)

mybtn = driver.find_element_by_class_name('port-toggler')

ActionChains(driver).click(mybtn).perform()

time.sleep(1)

path = r'D:\PycharmProjects\pybai\2020420.png'

# 截图:

driver.get_screenshot_as_file(path)

#2、定位验证码的位置

vcodeImg = driver.find_element_by_id('vcodeImg')

#3、取验证码的矩形区域

point = vcodeImg.location #字典形式 水平位置和垂直位置,x和y值

size = vcodeImg.size #字典形式,宽和高

x = int(point['x'])

y = int(point['y'])

width = int(x+size['width'])

height = int(y+size['height'])

#处理图片Image:

myimg = Image.open(path)

#参数是元祖,如果截图不清晰,1.5为分辨率,从1.0开始不会超过2.0

#littleimg = myimg.crop((1.5*x,1.5*y,1.5*width,1.5*height)) #截图

littleimg = myimg.crop((x,y,width,height)) #截图

littleimg.save('little.png') #截图名字

#5、图片识别:pytesserct

time.sleep(5)

result = pytesseract.image_to_string(Image.open('little.png'))

time.sleep(5)

print('图片结果是:%s'%result)

另外,还可以使用云打码的方式来处理验证码

留存博客,以后验证码的问题轻松解决~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值