zoukankan      html  css  js  c++  java
  • selenium自动爬取网易易盾的验证码

           我们在爬虫过程中难免会遇到一些拦路虎,比如各种各样的验证码,时不时蹦出来,这时候我们需要去识别它来继续我们的工作,接下来我将爬取网一些滑动验证码,然后通过百度的EasyDL平台进行数据标注,创建模型,训练模型,测试模型,看看是否能返回目标框的相应坐标,然后我们再使用selenium进行滑动到相应位置,这样就破解了验证码。后面我将用几个系列来阐述一下我们的内容。

           首先,我们先看下爬取的效果,详情点击公众号地址,有视频。

            思路:一开始我去查看能不能直接调用接口获取图片,发现看看不是那么容易,找到了相应的接口,但是模拟接口却很困难,里面有token,jsonp之类的。后来直接截取图片好了,简单粗暴。

    步骤如下:

           前提是有python环境,先把python安装好。

          1.pip install selenium

          2.下载chrome_driver.exe,利用它来启动谷歌浏览器,以下是网址,我们需要下载电脑谷歌对应的版本,我下载的是chromedriver_win32.zip,版本号是84.0.4147.89,解压内有一个exe文件,放到谷歌的安装目录。https://sites.google.com/a/chromium.org/chromedriver/downloads

         3.添加环境变量,将谷歌的安装目录加入环境变量。

         4.测试

    1 from selenium import webdriver
    2 browser = webdriver.Chrome()
    3 browser.get('https://dun.163.com/trial/jigsaw')

         5.测试成功之后,我们就可以开始爬取滑动验证码图片,上代码

     1 driver = webdriver.Chrome()
     2 driver.implicitly_wait(3)
     3 driver.maximize_window()
     4 driver.get('https://dun.163.com/trial/jigsaw')
     5 # 鼠标移动到此元素
     6 yidun_tips = driver.find_element_by_class_name('yidun_tips')
     7 action = ActionChains(driver)
     8 for i in range(1000):
     9     action.move_to_element(yidun_tips).perform()
    10     driver.implicitly_wait(5)
    11     driver.save_screenshot('webpages/'+str(int(time.time()))+".png")
    12     driver.find_element_by_class_name("yidun_refresh").click()
    13     driver.implicitly_wait(5)
    14 
    15 sleep(2)
    16 driver.quit()
     

           这段代码会打开网页,找到相应元素,触发hover事件,自动点击refresh按钮,刷新图片,然后我们进行截取保存。

          6.截取验证码区域

     1 import cv2 as cv
     2 import  os
     3 
     4 # 获取文件名
     5 file_names = os.listdir("webpages/")
     6 print(file_names)
     7 # 文件名拼接路径
     8 file_list = [os.path.join("./webpages/",file) for file in file_names]
     9 
    10 #裁剪坐标为[y0:y1, x0:x1]
    11 for i in range(len(file_list)):
    12     src=cv.imread(file_list[i])
    13     dst=src[651:851,945:1345]
    14     cv.imwrite('dist/'+(str(i+1))+'.png',dst)
    15 cv.waitKey()

            后面我们就打包数据集上传到EasyDL平台,进行数据标注,训练。

  • 相关阅读:
    HyperV创建NAT网络
    Win10
    ConEmu
    ffmpeg的centos、msys2、msvc编译
    7z压缩gopath的src的批处理
    VS2015自带v120的Platform Toolset
    Putty配置
    第一章:HTML5的基础
    java的错题整理
    第十四章:类的带参方法
  • 原文地址:https://www.cnblogs.com/lichli/p/13347952.html
Copyright © 2011-2022 走看看