Python使用selenium模块模拟登录12306
selenium模塊概述
selenium模塊是基于瀏覽器自動化的一個模塊。換句話說使用selenium可以讓瀏覽器根據(jù)自己寫的代碼自動運行。
相應的語法
·編寫基于瀏覽器自動化的操作代碼
·?發(fā)起請求:get(url)
·?標簽定位:find系列的方法
·?標簽交互:send_ keys( 'xxx')
·?執(zhí)行js程序:excute _script( 'jsCode ')一前進,后退:back() ,forward()
·?關閉瀏覽器:quit()
這里就不贅述selenium模塊的安裝了。
登錄的具體流程
總體思路:
·?使用selenium向12306網(wǎng)站發(fā)起請求,打開登陸頁面
·?根據(jù)標簽的id值定位到用戶賬號框、用戶密碼框以及登錄按鈕
·?填入賬號密碼后,點擊登錄按鈕
·?進行滑塊驗證
·?登陸成功
# 根據(jù)id獲取用戶賬號輸入框、密碼輸入框
username_tag = driver.find_element_by_id('J-userName')
password_tag = driver.find_element_by_id('J-password')
# 填入自己的賬號和密碼
username_tag.send_keys('xxxxxxx')
time.sleep(1)
password_tag.send_keys('xxxxxxxx')
# 根據(jù)id獲取登錄按鈕
login_btn = driver.find_element_by_id('J-login')
# 點擊登錄按鈕
login_btn.click()
再點擊登錄按鈕后,12306服務器會彈出滑塊驗證的窗口,需要我們使用代碼模擬瀏覽器點擊滑動完成驗證。這里我們使用動作鏈來完成一系列操作:點擊并長按,向指定方向拖拽一定的距離。
動作鏈使用
這里我們在介紹下動作鏈的使用,使用動作鏈非常簡單。
1、導入相應的模塊from selenium.webdriver import ActionChains
2、用構造方法獲取動作鏈對象
# 定義動作鏈,點擊并拖拽
aco = ActionChains(driver)# 點擊并長按aco.click_and_hold(span)# 位移指定的距離aco.move_by_offset(25,0).perform()注意:想讓動作鏈執(zhí)行相應的操作必須調用.perform()方法。
完成驗證碼滑塊的拖動
# 定義動作鏈,點擊并拖拽
aco = ActionChains(driver)# 點擊并長按aco.click_and_hold(span)#perform()立即執(zhí)行動作鏈操作for i in range(5):aco.move_by_offset(25,0).perform()time.sleep(0.3)# 釋放動作鏈aco.release()規(guī)避檢測
由于12306會識別使用selenium模塊的瀏覽器操作,為了規(guī)避相應的檢測,我們還必須添加相應的代碼。
完整代碼
from selenium import webdriverimport requestsfrom lxml import etreefrom selenium.webdriver import Chromefrom selenium.webdriver import ChromeOptionsfrom selenium.webdriver import ActionChainsimport time# 實現(xiàn)無可視化界面from selenium.webdriver.chrome.options import Optionschrome_options = Options()chrome_options.add_argument("--disable-blink-features=AutomationControlled")# 這里填入你自己的chromedriver的安裝路徑driver = webdriver.Chrome(executable_path='C:/Users/Declan/AppData/Local/Google/Chrome/Application/chromedriver',chrome_options=chrome_options)driver.get('https://kyfw.12306.cn/otn/resources/login.html')# 根據(jù)id獲取用戶賬號輸入框、密碼輸入框username_tag = driver.find_element_by_id('J-userName')password_tag = driver.find_element_by_id('J-password')# 填入自己的賬號和密碼username_tag.send_keys('xxxxxxxx')time.sleep(1)password_tag.send_keys('xxxxxx')# 根據(jù)id獲取登錄按鈕login_btn = driver.find_element_by_id('J-login')# 點擊登錄按鈕login_btn.click()# 這里必須得休眠,不然運行速度太夸,代碼難以定位到滑塊time.sleep(2)span = driver.find_element_by_css_selector('.btn_slide')# 定義動作鏈,點擊并拖拽aco = ActionChains(driver)# 點擊并長按aco.click_and_hold(span)#perform()立即執(zhí)行動作鏈操作for i in range(5):aco.move_by_offset(25,0).perform()time.sleep(0.3)# 釋放動作鏈aco.release()time.sleep(2)ok_btn = driver.find_element_by_css_selector('.ok')ok_btn.click()time.sleep(5)driver.quit()總結
以上是生活随笔為你收集整理的Python使用selenium模块模拟登录12306的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PDF图片格式转换器官方下载
- 下一篇: 腾讯云数据库团队:MySQL AHI