国家企业信用信息公示系统验证码破解(四)
关键的一个步骤是判断弹出的验证码是滑动验证码还是点击验证码,或者是没弹出验证码,直接进入了查询结果页面。
比较暴力的一种操作方式是永远对固定位置截图并上传给打码平台,然后看返回结果,如果是空或者是其他的就说明直接进入了查询结果页面,如果返回一个坐标位置说明是滑动验证码,多个坐标位置则对应点击验证码。但这种方式稳定性太差,不予考虑。
另一种比较优秀的操作是判断页面元素,我们使用 chrome 自带的 F12 工具进行检查:
当出现滑动验证码时滑动按钮的元素代码为<div class="geetest_slider geetest_ready">
,同理,当出现点击验证码时我们也对其进行唯一性检查,发现出现的元素代码中含有<img class="geetest_item_img"
字样。最后,如果直接进入了查询结果页面,我们也能找到相应的元素代码<span class="ads-sci-title">
。
下面给出判断验证码类型的完整函数:
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() 所对应的对象
有没有空听我的,哈哈哈
没空哇,看帖子就行了
我准备邀请你来个直播,专题就是这个,哈哈