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!
推薦閱讀:
- Python+selenium實現趣頭條的視頻自動上傳與發佈
- Python+selenium 自動化快手短視頻發佈的實現過程
- Python趣味爬蟲之用Python實現智慧校園一鍵評教
- Python編程使用Selenium模擬淘寶登錄實現過程
- Python-Selenium自動化爬蟲