1.python自动化登录12306
生活随笔
收集整理的這篇文章主要介紹了
1.python自动化登录12306
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
python selenium 自動化登錄12306
1.下載依賴包
pip install selenium # 自動化必須的包2.下載驅(qū)動
# 下載驅(qū)動 https://npm.taobao.org/mirrors/chromedriver小編這兒用的是chrome瀏覽器,下載對應(yīng)自己瀏覽器版本的驅(qū)動包
我是windows電腦(根據(jù)個人情況適當(dāng)下載)
把下載到的驅(qū)動放到python的安裝目錄
3.開始代碼編程
- 第一步 : 訪問12306首頁,獲取到登錄按鈕(copy xpath路徑)
- 第二步 : 到登錄頁面之后, 獲取賬號登錄按鈕并點擊
-
第三步 : 識別驗證碼,使用超級鷹注冊一個賬號,可以免費識別(有分?jǐn)?shù)限制);有不懂得小伙伴可以私聊或者查看超級鷹的api
# 圖片驗證碼 img_by_xpath = browser.find_element_by_xpath('//*[@id="J-loginImg"]') # 超級鷹識別驗證碼 # 注冊之后會有自己的軟件id 和 key # 軟件ID: 123456 # 軟件KEY: ****************** chaojiying = Chaojiying_Client('12312337866', '123456', '9197123') # 用戶中心>>軟件ID 生成一個替換 96001 # {'err_no': 0, 'err_str': 'OK', 'pic_id': '1147221486687400002', 'pic_str': '180,125|125,132', 'md5': 'e6060d7b4b8a01cb261074cb15c2401e'} coordinate_dic = chaojiying.PostPic(img_by_xpath.screenshot_as_png, 9004) print(coordinate_dic) # 點擊兩個相同的動物或物品,返回:x1,y1|x2,y2 dic_pic_str_ = coordinate_dic['pic_str'] str__split = dic_pic_str_.split("|") for rs in str__split:temp = rs.split(',')x = int(temp[0])y = int(temp[1])# 點擊選中圖片# 事件鏈# 點擊返回的坐標(biāo)即可# 這兒必須有perform()提交事件鏈操作哦,不要忘了ActionChains(browser).move_to_element_with_offset(img_by_xpath,x, y).click().perform() -
第四步 : 輸入用戶名和密碼 ,點擊登錄
-
第五步 : 滑塊校驗
-
各位小伙伴到這兒可能發(fā)現(xiàn)還是登錄不上,原因就是12306網(wǎng)站(中國最牛逼的網(wǎng)站,怎么可能那么容易哦)
登錄不上是因為網(wǎng)站已經(jīng)識別出來是自動化登錄的,所以我們需要關(guān)閉掉自動化標(biāo)識
chrome 88版本以后的瀏覽器
#chrome 版本88以后,用下面這種方法options = Options()options.add_argument('--disable-blink-features=AutomationControlled')# 打開瀏覽器browser = Chrome(options=options)chrome 88版本以前的瀏覽器
options = Options()options.add_experimental_option("excludeSwitches", ["enable-automation"])options.add_experimental_option('useAutomationExtension', False)browser = Chrome(options=options, executable_path='./chromedriver')browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})
到這兒就到此結(jié)束了,可以登錄上了.
4.完整代碼
附上完整代碼,親測可以運行的哦(需要修改為自己的用戶名密碼哦)
from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options from selenium.webdriver import ActionChains from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC import time from pyfile.chaojiying import Chaojiying_Clientif __name__ == '__main__':# 12306 登錄測試# 防止服務(wù)器識別出是自動化控制 window.navigator.webdriver# chrome 版本88以前用這種方法'''options = Options()options.add_experimental_option("excludeSwitches", ["enable-automation"])options.add_experimental_option('useAutomationExtension', False)browser = Chrome(options=options, executable_path='./chromedriver')browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})'''#chrome 版本88以后,用下面這種方法options = Options()options.add_argument('--disable-blink-features=AutomationControlled')# 打開瀏覽器browser = Chrome(options=options)# 設(shè)置瀏覽器窗口大小browser.set_window_size(1400, 1000)# 訪問12306首頁browser.get("https://www.12306.cn/index/")# 獲取[登錄]按鈕login_button = browser.find_element_by_xpath('//*[@id="J-header-login"]/a[1]')# 點擊登錄login_button.click()try:element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "login-hd-account")))print(element)time.sleep(2)# 賬號登錄按鈕account_button = browser.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a')account_button.click()time.sleep(3)# 圖片驗證碼img_by_xpath = browser.find_element_by_xpath('//*[@id="J-loginImg"]')# 超級鷹識別驗證碼# 軟件ID: 919703# 軟件KEY: ce58a05f244fa7eb31dc6309186d9b72chaojiying = Chaojiying_Client('18512345678', '12345678', '999999') # 用戶中心>>軟件ID 生成一個替換 96001# {'err_no': 0, 'err_str': 'OK', 'pic_id': '1147221486687400002', 'pic_str': '180,125|125,132', 'md5': 'e6060d7b4b8a01cb261074cb15c2401e'}coordinate_dic = chaojiying.PostPic(img_by_xpath.screenshot_as_png, 9004)print(coordinate_dic) # 點擊兩個相同的動物或物品,返回:x1,y1|x2,y2dic_pic_str_ = coordinate_dic['pic_str']str__split = dic_pic_str_.split("|")for rs in str__split:temp = rs.split(',')x = int(temp[0])y = int(temp[1])# 點擊選中圖片# 事件鏈ActionChains(browser).move_to_element_with_offset(img_by_xpath,x, y).click().perform()time.sleep(2)# 輸入用戶名 密碼 點擊登錄login_account = browser.find_element_by_xpath('//*[@id="J-userName"]')login_password = browser.find_element_by_xpath('//*[@id="J-password"]')login_account.send_keys('13612345678')login_password.send_keys('13612345678')time.sleep(2)submit_button = browser.find_element_by_xpath('//*[@id="J-login"]')submit_button.click()time.sleep(2)# 拖動滑塊校驗drag_button = browser.find_element_by_xpath('//*[@id="nc_1_n1z"]')ActionChains(browser).drag_and_drop_by_offset(drag_button, 300, 0).perform()except Exception as e:print(e)有想交流的小伙伴可以關(guān)注公眾號哦
總結(jié)
以上是生活随笔為你收集整理的1.python自动化登录12306的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux主机无线连接显示器,如何用Li
- 下一篇: websocket python爬虫_p