selenium自動爬取網易易盾的驗證碼

二餅二餅發表於2020-07-20

我們在爬蟲過程中難免會遇到一些攔路虎,比如各種各樣的驗證碼,時不時蹦出來,這時候我們需要去識別它來繼續我們的工作,接下來我將爬取網一些滑動驗證碼,然後通過百度的EasyDL平臺進行資料標註,建立模型,訓練模型,測試模型,看看是否能返回目標框的相應座標,然後我們再使用selenium進行滑動到相應位置,這樣就破解了驗證碼。後面我將用幾個系列來闡述一下我們的內容。

首先,我們先看下爬取的效果,詳情點選公眾號地址,有視訊。

selenium自動爬取網易易盾的驗證碼

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()

selenium自動爬取網易易盾的驗證碼

後面我們就打包資料集上傳到EasyDL平臺,進行資料標註,訓練。

相關文章