爬虫学习之处理极验的滑动验证码

爬虫学习

首先分析爬取的页面,地址栏可以直接 GET 提交拿到想要的内容,免去了还要操作下拉框。(完整代码在文章最下面)

  1. 根据id直接使用 driver.find_element_by_id() 方法获取输入框

    print('输入内容')
    username_input = driver.find_element_by_id('inputvalue') # 获取输入框对象
    username_input.send_keys('xxxxxxxxx') # 设置值
    

    在这里插入图片描述

  2. 根据id直接使用 driver.find_element_by_id() 方法获取按钮

    commit_btn = driver.find_element_by_id('submit_buy') # 获取提交按钮
    commit_btn.click() # 点击
    

    在这里插入图片描述

  3. 处理验证码,验证码加载可能会有点慢,需要等待一下。
    在这里插入图片描述

    	time.sleep(4) # 等一会,等待加载完毕
    	
    	print('验证码点击')
    	code_btn = driver.find_element_by_xpath('//div[@class="geetest_radar_tip"][1]') # 
    	ActionChains(driver).move_to_element(code_btn).click().perform() # 验证码点击
    	time.sleep(1)
    

    在这里插入图片描述

  4. 滑动验证码出现,由于现在无法通过canvas直接截图获取,所以我打算改变css样式的display属性来截取整个页面,最后用截图下来的两张图来进行对比。
    在这里插入图片描述

    # 设置display 先全部隐藏掉
    # 完整图 geetest_canvas_fullbg geetest_fade geetest_absolute
    js_wan = 'document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].style.display="none"' 
    driver.execute_script(js_wan)
    
    # 残缺 geetest_canvas_bg geetest_absolute
    js_wan = 'document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].style.display="none"' 
    driver.execute_script(js_wan)
    
    # 小块 geetest_canvas_slice geetest_absolute
    js_wan = 'document.getElementsByClassName("geetest_canvas_slice geetest_absolute")[0].style.display="none"' 
    driver.execute_script(js_wan)
    
    
    # 单独显示截图
    # 完整图 geetest_canvas_fullbg geetest_fade geetest_absolute
    js_wan = 'document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].style.display="inline"' 
    driver.execute_script(js_wan)
    
    driver.save_screenshot("wan.png") # 得到完整的图
    
    js_wan = 'document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].style.display="none"' 
    driver.execute_script(js_wan) # 隐藏
    time.sleep(1)
    
    # 残缺 geetest_canvas_bg geetest_absolute
    js_can = 'document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].style.display="inline"' 
    driver.execute_script(js_can)
    
    driver.save_screenshot("can.png") # 得到残缺的图
    
    js_can = 'document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].style.display="none"' 
    driver.execute_script(js_can)
    
    # 小块图 残缺图 出现 方便观看是否到点
    js_wan = 'document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].style.display="inline"' 
    driver.execute_script(js_wan)
    
    js_wan = 'document.getElementsByClassName("geetest_canvas_slice geetest_absolute")[0].style.display="inline"' 
    driver.execute_script(js_wan)
    
    

    得到如下两张图,分别是完整图和缺口图。

  • 完整图如下完整图
  • 残缺图如下 在这里插入图片描述
  1. 将两张图进行对比,输出有差异的坐标

    # 判断位置
    def matchAB(fileA, fileB):
        # 读取图像数据
        imgA = cv2.imread(fileA)
        imgB 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值