
爬蟲的一大難點就是破解驗證碼。驗證碼大致上分為文字識別、滑動、文字點擊、圖像識別等,本文講的是其中的滑動驗證碼。滑動驗證碼,需要我們將滑塊移至圖片缺口位置。實際上我們可以通過對比完整圖片和缺口圖片各個像素點的RGB值,得出缺口位置左上角的坐標,然后構造軌跡算法使用selenium模擬移動滑塊即可。
滑動驗證碼破解大致流程為:
1 - 獲取缺口圖片與原圖片
2 - 圖像對比,得出缺口左上角坐標
3 - 構造軌跡算法
4 - 使用selenium模擬移動滑塊
本篇主要針對模擬移動進行探討。
使用工具:python,selenium,chromedriver,chrom瀏覽器
操作步驟講解環(huán)節(jié)
下面就是喜聞樂見的操作步驟講解環(huán)節(jié)了(′???)
代碼部分:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 導本地包的模塊
import os
import sys
path = os.path.dirname(os.path.dirname(__file__))
sys.path.append(path)
import test
# 108這個值就是前面圖像對比后得出的缺口左上角的橫坐標
# 這里導入橫坐標,然后獲取先勻加速后勻減速的軌跡列表
track = test.get_track(108)
print(track)
driver = webdriver.Chrome()
url = 'http://www.geetest.com/Register'
wait = WebDriverWait(driver, 10, 0.5)
driver.get(url)
# 獲取到指定的元素
Phone_Number = driver.find_element_by_xpath('/html/body/div[1]/div/div[8]/div/div[2]/div[1]/div[2]/div/div[2]/div[1]/input')
Verification_Code = driver.find_element_by_xpath('/html/body/div[1]/div/div[8]/div/div[2]/div[1]/div[2]/div/div[2]/div[2]/input')
Code_Button = driver.find_element_by_xpath('/html/body/div[1]/div/div[8]/div/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[1]/div')
Phone_Number.send_keys('12345678910')
Code_Button.click()
# 等待className為geetest_slider_button的元素在元素表中出現
slider = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_slider_button')))
# 點擊和按住
ActionChains(driver).click_and_hold(slider).perform()
# 拖動
for x in track:
ActionChains(driver).move_by_offset(xoffset=x, yoffset=0).perform()
time.sleep(2)
# 松開鼠標
ActionChains(driver).release().perform()
time.sleep(2)
driver.quit()
要點總結:
1 - 需要用到前面兩篇文章的參數,圖像對比得出缺口左上角的橫坐標,然后使用軌跡移動算法,獲取軌跡列表
2 - 使用selenium的鼠標操作方法完成滑塊拖動

那么本次的分享就到這里了,喜歡的話麻煩點贊關注一下;不喜歡的話可以去看下小編的其他文章,肯定有喜歡的;都不喜歡的話可以點個關注,萬一以后有喜歡的呢(??????)??
有疑問的小伙伴也可以在評論區(qū)留言哦,我會第一時間解答的。

你點了嗎? ???