美文网首页
爬虫 之 打码平台

爬虫 之 打码平台

作者: 煎炼 | 来源:发表于2018-12-19 23:09 被阅读0次

    爬虫验证码中还是有很多的特别难破解的,比如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

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

    相关文章

      网友评论

          本文标题:爬虫 之 打码平台

          本文链接:https://www.haomeiwen.com/subject/nrajkqtx.html