前言
目前常見的驗證碼有很多種,比如數字驗證碼,滑動驗證碼,以及滑動補全圖像驗證碼等,關於驗證碼的操作屬於我們在UI自動化很大的一個障礙,今天安靜來介紹下如何通過python來實現我們滑動驗證碼
滑動驗證碼
安靜先來一張圖,認識下今天將要破解的滑動驗證碼長什么樣子。
思路
按照我們正常操作,首先通過按住滑動驗證碼,然后進行往右進行移動。這里的這個操作肯定很多人就會說,我們可以用selenium中的模擬鼠標操作,對的安靜今天就通過selenium中的鼠標操作來完成。當然前提肯定是先進行定位滑動框。這里還需要查看通過鼠標移動多少坐標點,因為手動操作時候,可以很清楚的看出來移動到哪里,但是代碼層次不清楚,你想要移動多遠。思路清楚了,那就直接上手進行做吧
實踐
通過F12進行查看。發現元素下面出現了偽元素(就是本身不存在的頁面元素,HTML代碼里並沒有這樣的元素,但在頁面顯示時,你卻能看到這些本來不存在的元素發揮着作用)那么這里通過CSS進行定位。

手動進行滑動,查看下我們要移動多少坐標點,當我們移動過程中會發現HTML有個屬性style一直在變化,當移動到底后發現值不會變化了,就是我們的移動的坐標點。這里通過F12查看到了想要的偏移量和移動的元素內容,接下來進行代碼方法實踐

編寫代碼,
這里安靜就直接上代碼了,代碼中有注釋,
from selenium import webdriver
# 導入selenium中鼠標庫
from selenium.webdriver import ActionChains
import time
driver = webdriver.Chrome()
driver.get("https://www.jq22.com/yanshi23642")
# 頁面最大化
driver.maximize_window()
# 跳轉到iframe中
driver.switch_to.frame('iframe')
# 在輸入框中輸入內容
driver.find_element_by_name('title').send_keys('123456')
# 通過CSS定位滑動點坐標
slider = driver.find_element_by_css_selector('div.slider-btn.layui-icon.layui-icon-next')
time.sleep(5)
action = ActionChains(driver)
# 長按鼠標
action.click_and_hold(slider)
# 偏移量(F12中查看)
action.move_by_offset(268, 0)
# 釋放鼠標
action.release()
# 執行以上操作
action.perform()
通過執行代碼后,就會發現已經實現了。

驗證是否成功
上面的代碼和思路都很清楚了,那么如果我們想對他進行斷言呢?這里會看到其實有提示“滑動驗證通過”,我們可以通過顯示等待的方法進行定位,如果出現字體正確,則說明滑動驗證碼已經通過。
定位文本彈出框
對於這種一而過的toast,當文本彈出來時候,可以通過F12中的sources點擊暫停,然后再去查看元素內容

元素內容:

直接在代碼中進行定位元素然后獲取其中的text屬性即可。
from selenium import webdriver
# 導入selenium中鼠標庫
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("https://www.jq22.com/yanshi23642")
# 頁面最大化
driver.maximize_window()
# 跳轉到iframe中
driver.switch_to.frame('iframe')
# 在輸入框中輸入內容
driver.find_element_by_name('title').send_keys('123456')
# 通過CSS定位滑動點坐標
slider = driver.find_element_by_css_selector('div.slider-btn.layui-icon.layui-icon-next')
time.sleep(5)
action = ActionChains(driver)
# 長按鼠標
action.click_and_hold(slider)
# 偏移量(F12中查看)
action.move_by_offset(268, 0)
# 釋放鼠標
action.release()
# 執行以上操作
action.perform()
time.sleep(1)
# 元素屬性
locator = (By.CLASS_NAME,'layui-layer-content')
# 通過顯示等待進行定位元素
WebDriverWait(driver, 20,0.5).until(EC.presence_of_element_located(locator))
# 獲取元素屬性值
text = driver.find_element_by_class_name('layui-layer-content').text
print(text)
assert text == '滑塊驗證通過'
通過執行后發現已經將我們的彈出的文本框定位到了。

總結
通過這一篇文章簡單的介紹了如何通過python+selenium中的鼠標操作來完成滑動框驗證碼的實現。讀完文章會發現,其實也很簡單。就是通過定位滑動框,通過滑動偏移量來實現。其中涉及到的知識點可能就是一個偽元素的定位,以及一閃而過的文本彈出框。好了,感謝您的閱讀,希望對您有所幫助。