亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python+selenium實現12306模擬登錄的步驟

 更新時間:2021年01月21日 16:44:16   作者:mushroom27  
這篇文章主要介紹了python+selenium實現12306模擬登錄的步驟,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

簡介:

這里是利用了selenium+圖片識別驗證,來實現12306的模擬登錄,中間也參考了好幾個項目,實現了這個小demo,中間也遇到了很多的坑,主要難點在于圖片識別和滑動驗證這兩個方面,圖片識別是利用超級鷹的服務進行驗證識別的,其次一個難點就是在賬戶密碼和圖片識別都過了以后的滑動驗證,因為12306網站做了反爬,利用selenium滑動時,會報錯,提示你一直刷新,這里也是更改了滑動框。

技術棧:

python、selenium、圖片驗證、滑動驗證

思路:

12306網站的并發(fā)真的牛。

在模擬登錄的時候,第一個難點就是圖片驗證,這里不會底層的算法,只能通過圖片識別平臺的api接口服務進行解密,返回驗證坐標以后,通過selenium的點擊動能,進行點擊,在這里提前說明一下,網上有很多項目在實例化瀏覽器時,需要調整桌面分辨率,然后最大化窗口,這樣截屏才不會出現截不全的情況,我這邊是比較省事的,直接用xpath定位到驗證碼的png文件。直接寫入到本地,然后傳到圖片識別平臺進行識別。

里面涉及了一些selenium的方法,我基本上都是現查現用,比如按住鼠標不放、按左鍵什么的。

具體的代碼和注解貼在下面,

from?selenium?import?webdriver
from?hashlib?import?md5
import?requests
import?time
from?selenium.webdriver?import?ActionChains
?
#??這個類是超級鷹平臺寫的調用服務的接口代碼,也是比較容易看懂的
class?Chaojiying_Client(object):
?
????def?__init__(self,?username,?password,?soft_id):
????????self.username?=?username
????????password?=??password.encode('utf8')
????????self.password?=?md5(password).hexdigest()
????????self.soft_id?=?soft_id
????????self.base_params?=?{
????????????'user':?self.username,
????????????'pass2':?self.password,
????????????'softid':?self.soft_id,
????????}
????????self.headers?=?{
????????????'Connection':?'Keep-Alive',
????????????'User-Agent':?'Mozilla/4.0?(compatible;?MSIE?8.0;?Windows?NT?5.1;?Trident/4.0)',
????????}
?
????def?PostPic(self,?im,?codetype):
????????"""
????????im:?圖片字節(jié)
????????codetype:?題目類型?參考?http://www.chaojiying.com/price.html
????????"""
????????params?=?{
????????????'codetype':?codetype,
????????}
????????params.update(self.base_params)
????????files?=?{'userfile':?('ccc.jpg',?im)}
????????r?=?requests.post('http://upload.chaojiying.net/Upload/Processing.php',?data=params,?files=files,?headers=self.headers)
????????return?r.json()
?
????def?ReportError(self,?im_id):
????????"""
????????im_id:報錯題目的圖片ID
????????"""
????????params?=?{
????????????'id':?im_id,
????????}
????????params.update(self.base_params)
????????r?=?requests.post('http://upload.chaojiying.net/Upload/ReportError.php',?data=params,?headers=self.headers)
????????return?r.json()
?
#???這里進入模擬登錄的主程序
?
#?實例化瀏覽器,并且最大化。然后請求12306主網站,我這里是從首頁請求的,大家可以直接從登陸頁面請求
browser?=?webdriver.Chrome()
browser.maximize_window()
browser.get('http://12306.cn/')
time.sleep(5)
#?因為是從首頁請求的,所以下面有兩個點擊的動作,都是為了點進登陸頁面
browser.find_element_by_xpath('//*[@id="J-header-login"]/a[1]').click()
time.sleep(0.3)
#?這里比較重要了,這里就是利用這個代碼,來更改selenium中的滑動功能,讓網站不報錯
script?=?'Object.defineProperty(navigator,"webdriver",{get:()=>undefined,});'
browser.execute_script(script)
time.sleep(1)
#?這里進入帳號登錄
browser.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a').click()
time.sleep(0.3)
#??這里直接定位驗證碼的png文件,然后保存
img?=?browser.find_element_by_xpath('//*[@id="J-loginImg"]')
img.screenshot('cde.png')
#?調用超級鷹的參數
chaojiying?=?Chaojiying_Client('用戶名',?'密碼',?'ID')#??這個在超級鷹的實例代碼中有解釋
im?=?open('../12306/cde.png',?'rb').read()
#?注意,這里返回的是一個字典格式,所以直接取要用的key,來返回坐標
result?=?chaojiying.PostPic(im,?9004)['pic_str']
print(result)
#?這里就是處理超級鷹返回坐標的方法了
all_list?=?[]
#?通過判斷超級鷹返回坐標的格式進行坐標處理,
#?返回的坐標有兩種形式,一種是以|隔開的,一種是用,隔開的,對應下面兩種處理方式
#?處理好的坐標存入list
if?'|'?in?result:
????list?=?result.split('|')
????for?i?in?range(len(list)):
????????x_y?=?[]
????????x?=?int(list[i].split(',')[0])
????????y?=?int(list[i].split(',')[1])
????????x_y.append(x)
????????x_y.append(y)
????????all_list.append(x_y)
else:
????x_y?=?[]
????x?=?int(result.split(',')[0])
????y?=?int(result.split(',')[1])
????x_y.append(x)
????x_y.append(y)
????all_list.append(x_y)
print(all_list)
?
#?處理好的坐標進行循環(huán),并帶入selenium進行點擊點擊
for?l?in?all_list:
????x?=?l[0]
????y?=?l[1]
????ActionChains(browser).move_to_element_with_offset(
????????img,?x,?y).click().perform()
????time.sleep(0.5)
#?圖片點擊好以后,向表單內發(fā)送賬戶密碼
browser.find_element_by_xpath('//*[@id="J-userName"]').send_keys('賬號')
browser.find_element_by_xpath('//*[@id="J-password"]').send_keys('密碼')
#?進行點擊登錄按鈕
browser.find_element_by_xpath('//*[@id="J-login"]').click()
time.sleep(2)
#?下面就是滑動模塊了
#?上面已經更改過selenium的滑動模塊,所以這里就可以直接定位到按鈕的位置,進行點擊滑動
span?=?browser.find_element_by_xpath('//*[@id="nc_1_n1z"]')
action?=?ActionChains(browser)
#?這里是selenium的方法,按住點擊不放
action.click_and_hold(span)
#?下面就是滑動了
action.drag_and_drop_by_offset(span,400,0).perform()
#?這里加了個循環(huán),就是滑動不行,一直刷新繼續(xù)滑動,直到成功
#?其實這里也只是為了保險起見,因為上面改了滑動框,基本上都會成功
while?True:
????try:
????????info=browser.find_element_by_xpath('//*[@id="J-slide-passcode"]/div/span').text
????????print(info)
????????if?info=='哎呀,出錯了,點擊刷新再來一次':
????????????#點擊刷新
????????????browser.find_element_by_xpath('//*[@id="J-slide-passcode"]/div/span/a').click()
????????????time.sleep(0.2)
????????????#重新移動滑塊
????????????span?=?browser.find_element_by_xpath('//*[@id="nc_1_n1z"]')
????????????action?=?ActionChains(browser)
????????????#?點擊長按指定的標簽
????????????action.click_and_hold(span).perform()
????????????action.drag_and_drop_by_offset(span,?400,?0).perform()
????????????time.sleep(5)
????except:
????????print('ok!')
????????break
#?完成后,松開鼠標
action.release()
?
time.sleep(5)
#?退出
browser.quit()

最后想說的是

實現搶票的事,這個我還暫時沒想好怎么去做

平時工作比較忙

所以以后實現這個功能吧

拜拜~

以上就是python+selenium實現12306模擬登錄的步驟的詳細內容,更多關于python 12306模擬登錄的資料請關注腳本之家其它相關文章!

相關文章

  • Django之importlib模塊的具體使用

    Django之importlib模塊的具體使用

    本文主要介紹了Django之importlib模塊的具體使用,importlib模塊是Python中用于動態(tài)加載和導入模塊的內置模塊,有需要了解jquery event事件用法的朋友可參考
    2023-11-11
  • Python3.5面向對象編程圖文與實例詳解

    Python3.5面向對象編程圖文與實例詳解

    這篇文章主要介紹了Python3.5面向對象編程,結合圖文與實例形式詳細分析了Python面向對象編程相關的概念、類定義、實例化、實例變量、類變量、析構函數等相關原理及使用技巧,需要的朋友可以參考下
    2019-04-04
  • Python 實現定積分與二重定積分的操作

    Python 實現定積分與二重定積分的操作

    這篇文章主要介紹了Python 實現定積分與二重定積分的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python3 shutil(高級文件操作模塊)實例用法總結

    Python3 shutil(高級文件操作模塊)實例用法總結

    在本篇文章里小編給大家整理的是一篇關于Python3 shutil實例用法內容,有興趣的朋友們可以學習下。
    2020-02-02
  • Python實現讀取Excel文件并復制指定的數據行

    Python實現讀取Excel文件并復制指定的數據行

    這篇文章主要介紹了如何基于Python語言,讀取Excel表格文件數據,并基于其中某一列數據的值,將這一數據處于指定范圍的那一行加以復制,感興趣的可以了解一下
    2023-07-07
  • python 子類調用父類的構造函數實例

    python 子類調用父類的構造函數實例

    這篇文章主要介紹了python 子類調用父類的構造函數實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python如何存儲和讀取ASCII碼形式的byte數據

    Python如何存儲和讀取ASCII碼形式的byte數據

    這篇文章主要介紹了Python如何存儲和讀取ASCII碼形式的byte數據,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python實現mysql數據庫中的SQL文件生成和導入

    Python實現mysql數據庫中的SQL文件生成和導入

    這篇文章主要介紹了Python實現mysql數據庫中的SQL文件生成和導入,首先通過將mysql數據導出到SQL文件中展開詳細內容需要的小伙伴可以參考一下
    2022-06-06
  • Python單元和文檔測試實例詳解

    Python單元和文檔測試實例詳解

    這篇文章主要介紹了Python單元和文檔測試,結合實例形式分析了Python單元測試模塊unittest及文檔測試模塊doctest相關使用技巧,需要的朋友可以參考下
    2019-04-04
  • python 處理pdf加密文件的操作代碼

    python 處理pdf加密文件的操作代碼

    這篇文章主要介紹了python 處理pdf加密文件的操作代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01

最新評論