python+selenium行為鏈登錄12306(滑動驗證碼滑塊)

使用python網絡爬蟲登錄12306,網站界面如下。因為網站的反爬是不斷升級的,以下代碼雖然當前可用,但早晚必將會不再能滿足登錄需求。但是知識的價值,是不容置疑的。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
from selenium.webdriver import ChromeOptions

# 去除瀏覽器識別
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option("detach", True)


driver = webdriver.Chrome(options=option)

driver.get('https://kyfw.12306.cn/otn/resources/login.html')

# 解決特征識別
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
driver.execute_script(script)

# 輸入賬號
driver.find_element_by_id('J-userName').send_keys('[email protected]')

# 輸入密碼
driver.find_element_by_id('J-password').send_keys('xxxxxxx')

# 點擊登陸
driver.find_element_by_id('J-login').click()

# 等待2秒鐘,不要點的太快,以免被識別或者以免網頁加載跟不上。
time.sleep(2)

# 滑動
# 定位 滑塊標簽
span = driver.find_element_by_id('nc_1_n1z')
actions = ActionChains(driver) # 行為鏈實例化
time.sleep(2) # 等待2秒鐘

# 經截圖測量,滑塊需要滑過的距離為300像素
actions.click_and_hold(span).move_by_offset(300, 0).perform() # 滑動

解決瀏覽器識別:

其中的以下這幾行代碼,可用去除瀏覽器對selenium的識別,如圖可以使瀏覽器頁面不再顯示圖中“Chrome正受到自動測試軟件的控制”字樣。

from selenium.webdriver import ChromeOptions

option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=option)

解決特征識別的代碼:

script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
driver.execute_script(script)

如果不采取去除特征識別,即以下兩行代碼。則頁面的滑塊驗證碼在滑動後,會顯示如下圖的出錯,從而阻止登錄進行。因為服務器識別到的selenium的特征。使用該兩行代碼更改瞭特征,即可以順利通過識別。

到此這篇關於python+selenium行為鏈登錄12306(滑動驗證碼滑塊)的文章就介紹到這瞭,更多相關python+selenium行為鏈登錄12306內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: