国家企业信用信息公示系统验证码破解(四)

关键的一个步骤是判断弹出的验证码是滑动验证码还是点击验证码,或者是没弹出验证码,直接进入了查询结果页面。
2d00b561f1004c7ea17ea2faa9dceca2_image.png

比较暴力的一种操作方式是永远对固定位置截图并上传给打码平台,然后看返回结果,如果是空或者是其他的就说明直接进入了查询结果页面,如果返回一个坐标位置说明是滑动验证码,多个坐标位置则对应点击验证码。但这种方式稳定性太差,不予考虑。

另一种比较优秀的操作是判断页面元素,我们使用 chrome 自带的 F12 工具进行检查:
168c6c07ea7b4b1f98a7fe54dcdea213_image.png

当出现滑动验证码时滑动按钮的元素代码为<div class="geetest_slider geetest_ready">,同理,当出现点击验证码时我们也对其进行唯一性检查,发现出现的元素代码中含有<img class="geetest_item_img"字样。最后,如果直接进入了查询结果页面,我们也能找到相应的元素代码<span class="ads-sci-title">
f48251c915744652b34f2da13bb44095_image.png

下面给出判断验证码类型的完整函数:

def judge_yzm_type(source, browser):
    if re.findall(r'<span class="ads-sci-title">', source):  # 通过验证,进入查询页面
        print('进入查询结果页面')
        time.sleep(2)
        browser.back()
        print('返回首页')
    elif re.findall(r'<div class="geetest_slider geetest_ready">', source):  # 滑动验证码
        print('滑动验证码')
        huadong()
        time.sleep(5)
        source = browser.page_source
        judge_yzm_type(source, browser)
    elif re.findall(r'<img class="geetest_item_img"',source):  # 点击验证码
        print('点击验证码')
        dianji()
        time.sleep(5)
        source = browser.page_source
        judge_yzm_type(source, browser)
    else:  # 无反应
        browser.refresh()
        time.sleep(2)
        yzm(browser)

其中 source 为页面源代码,browser 为 webdriver.Chrome() 所对应的对象