爬虫 之 打码平台

爬虫验证码中还是有很多的特别难破解的,比如BT的12306

1-1

哈哈~,是不是被难倒了,没关系,这次说的是打码平台,可以有效解决这类问题。

这次主要说说超级鹰:http://www.chaojiying.com/,进去之后呢,首先要找到开发文档


1-2

下载即可,里面的内容还是很简洁和容易理解的,这里就不详细说明了,下载完后之后把超级鹰开发文档和你的代码放在同级目录下,然后就开始进入正题吧。

以这个url为例:https://kyfw.12306.cn/otn/login/init

1-3

打开大概就是这个样子,我们要先获取到验证码图片

browser = webdriver.Chrome()

browser.get(url)

time.sleep(15)

img = browser.find_element_by_class_name('touclick-image')

延时稍微长了一点,为了防止验证码图片加载不出来,然后我们需要这个验证码图片的左上角和右下角的坐标。

left = img.location['x']#验证码图片左上角横坐标

top    = img.location['y']#验证码图片左上角纵坐标

right  = left + img.size['width']#验证码图片右下角横坐标

bottom = top + img.size['height']#验证码图片右下角纵坐标

将验证码图片保存成二进制文件,因为超级鹰那边验证需要传入验证码图片的二进制数据。

#页面快照

screenshot = browser.get_screenshot_as_png()

#打开快照文件

screenshot = Image.open(BytesIO(screenshot))

#截取验证码图片

captcha = screenshot.crop((left, top, right, bottom))

captcha.save("./name.png")

bytes_array = BytesIO()

#图片二进制

captcha.save(bytes_array,format='PNG')

这一步有点看不懂的可以看我的另一片文章 爬虫 之 验证码(一),里面比较详细一点。

然后超级鹰要登场了

chaojiying = Chaojiying(账号, 密码, id)      #id 请参考图片1-4

result = chaojiying.post_pic(bytes_array.getvalue(), 验证码类型编号)    #二进制数据和类型编号,类型编号请参考图片1-5


1-4
1-5

最后就是处理一下超级鹰返回的结果,模拟点击即可

#验证码结果进行解析

groups = result.get('pic_str').split('|')

#遍历验证结果,再用逗号切分变量后的验证结果,转换成整数

locations = [[int(number)for numberin group.split(',')]for groupin groups]

for locationin locations:

    print(location)

    # 当前页面点击,move_to_element_with_offset:把鼠标移动到某个偏移量   的   位   置,     相对于图片左上角的位置,perform()连续执行

    ActionChains(browser).move_to_element_with_offset(img, location[0],location[1]).click().perform()

    time.sleep(1)

最后附上源码和运行结果

import time

from seleniumimport webdriver

from PILimport Image

from ioimport BytesIO

from selenium.webdriverimport ActionChains

from chaojiyingimport Chaojiying

EMAIL ='账号'

PASSWORD ='密码'

CHAOJIYING_SOFT_ID ="id"

CHAOJIYING_KIND =9004

#账号、密码、解码类型编号

chaojiying = Chaojiying(EMAIL, PASSWORD, CHAOJIYING_SOFT_ID)

url ='https://kyfw.12306.cn/otn/login/init'

browser = webdriver.Chrome()

browser.get(url)

time.sleep(15)

img = browser.find_element_by_class_name('touclick-image')

left  = img.location['x']#验证码图片左上角横坐标

top    = img.location['y']#验证码图片左上角纵坐标

right  = left + img.size['width']#验证码图片右下角横坐标

bottom = top + img.size['height']#验证码图片右下角纵坐标

print(left, top, right, bottom)

#页面快照

screenshot = browser.get_screenshot_as_png()

#打开快照文件

screenshot = Image.open(BytesIO(screenshot))

#截取验证码图片

captcha = screenshot.crop((left, top, right, bottom))

captcha.save("./name.png")

bytes_array = BytesIO()

#图片二进制

captcha.save(bytes_array,format='PNG')

result = chaojiying.post_pic(bytes_array.getvalue(), CHAOJIYING_KIND)

#验证码结果进行解析

groups = result.get('pic_str').split('|')

#遍历验证结果,再用逗号切分变量后的验证结果,转换成整数

locations = [[int(number)for numberin group.split(',')]for groupin groups]

for locationin locations:

    print(location)

    # 当前页面点击,move_to_element_with_offset:把鼠标移动到某个偏移量的位置,相对       于图片左上角的位置,perform()连续执行

    ActionChains(browser).move_to_element_with_offset(img, location[0],location[1]).click().perform()

    time.sleep(1)


1-5

成功率还是蛮高的,本篇文章到此结束,希望看到这篇文章的人有所收获。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 验证码的是反爬虫策略之一,要如何解决验证码问题? 简单的验证码可以通过二值化的办法 我们以http://my.cn...
    煎炼阅读 1,074评论 0 0
  • 一. 实现场景 1. 要想对一个网站内容进行浏览或操作,一般都需要进行登录操作,只有登录成功后才能进行后续流程,所...
    落地逃阅读 14,082评论 3 18
  • 我们可以借助插件来做 打开插件,找到自己需要的验证码 筛选有用的路径 把对应的视图函数也拿过来,注意还需要一个ge...
    程序员之路阅读 1,421评论 0 1
  • 12.2 今天如期到达山东淄博。首先感受到的是德平、冬青与张铭的热情和付出。其次是见到TA76同学、助教以及...
    TA76广新阅读 232评论 0 2
  • 有难同当,有福同享,面对灾难,面对困难我们和七13班的姜少柯,与校领导一起,努力的过程是值得回忆的 与孩子谈理想,...
    感恩遇见丁阅读 325评论 0 0

友情链接更多精彩内容