日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

python+selenium實(shí)現(xiàn)12306模擬登錄的步驟

瀏覽:23日期:2022-06-29 13:42:46
簡介:

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

技術(shù)棧:

python、selenium、圖片驗(yàn)證、滑動驗(yàn)證

思路:

提前臥槽,12306網(wǎng)站的并發(fā)真的牛逼。

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

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

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

from selenium import webdriverfrom hashlib import md5import requestsimport timefrom selenium.webdriver import ActionChains # 這個類是超級鷹平臺寫的調(diào)用服務(wù)的接口代碼,也是比較容易看懂的class Chaojiying_Client(object): def __init__(self, username, password, soft_id):self.username = usernamepassword = password.encode(’utf8’)self.password = md5(password).hexdigest()self.soft_id = soft_idself.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:報(bào)錯題目的圖片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() # 這里進(jìn)入模擬登錄的主程序 # 實(shí)例化瀏覽器,并且最大化。然后請求12306主網(wǎng)站,我這里是從首頁請求的,大家可以直接從登陸頁面請求browser = webdriver.Chrome()browser.maximize_window()browser.get(’http://12306.cn/’)time.sleep(5)# 因?yàn)槭菑氖醉撜埱蟮模韵旅嬗袃蓚€點(diǎn)擊的動作,都是為了點(diǎn)進(jìn)登陸頁面browser.find_element_by_xpath(’//*[@id='J-header-login']/a[1]’).click()time.sleep(0.3)# 這里比較重要了,這里就是利用這個代碼,來更改selenium中的滑動功能,讓網(wǎng)站不報(bào)錯script = ’Object.defineProperty(navigator,'webdriver',{get:()=>undefined,});’browser.execute_script(script)time.sleep(1)# 這里進(jìn)入帳號登錄browser.find_element_by_xpath(’/html/body/div[2]/div[2]/ul/li[2]/a’).click()time.sleep(0.3)# 這里直接定位驗(yàn)證碼的png文件,然后保存img = browser.find_element_by_xpath(’//*[@id='J-loginImg']’)img.screenshot(’cde.png’)# 調(diào)用超級鷹的參數(shù)chaojiying = Chaojiying_Client(’用戶名’, ’密碼’, ’ID’)# 這個在超級鷹的實(shí)例代碼中有解釋im = open(’../12306/cde.png’, ’rb’).read()# 注意,這里返回的是一個字典格式,所以直接取要用的key,來返回坐標(biāo)result = chaojiying.PostPic(im, 9004)[’pic_str’]print(result)# 這里就是處理超級鷹返回坐標(biāo)的方法了all_list = []# 通過判斷超級鷹返回坐標(biāo)的格式進(jìn)行坐標(biāo)處理,# 返回的坐標(biāo)有兩種形式,一種是以|隔開的,一種是用,隔開的,對應(yīng)下面兩種處理方式# 處理好的坐標(biāo)存入listif ’|’ 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) # 處理好的坐標(biāo)進(jìn)行循環(huán),并帶入selenium進(jìn)行點(diǎn)擊點(diǎn)擊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)# 圖片點(diǎn)擊好以后,向表單內(nèi)發(fā)送賬戶密碼browser.find_element_by_xpath(’//*[@id='J-userName']’).send_keys(’賬號’)browser.find_element_by_xpath(’//*[@id='J-password']’).send_keys(’密碼’)# 進(jìn)行點(diǎn)擊登錄按鈕browser.find_element_by_xpath(’//*[@id='J-login']’).click()time.sleep(2)# 下面就是滑動模塊了# 上面已經(jīng)更改過selenium的滑動模塊,所以這里就可以直接定位到按鈕的位置,進(jìn)行點(diǎn)擊滑動span = browser.find_element_by_xpath(’//*[@id='nc_1_n1z']’)action = ActionChains(browser)# 這里是selenium的方法,按住點(diǎn)擊不放action.click_and_hold(span)# 下面就是滑動了action.drag_and_drop_by_offset(span,400,0).perform()# 這里加了個循環(huán),就是滑動不行,一直刷新繼續(xù)滑動,直到成功# 其實(shí)這里也只是為了保險(xiǎn)起見,因?yàn)樯厦娓牧嘶瑒涌颍旧隙紩晒hile True: try:info=browser.find_element_by_xpath(’//*[@id='J-slide-passcode']/div/span’).textprint(info)if info==’哎呀,出錯了,點(diǎn)擊刷新再來一次’: #點(diǎn)擊刷新 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) # 點(diǎn)擊長按指定的標(biāo)簽 action.click_and_hold(span).perform() action.drag_and_drop_by_offset(span, 400, 0).perform() time.sleep(5) except:print(’ok!’)break# 完成后,松開鼠標(biāo)action.release() time.sleep(5)# 退出browser.quit()

最后想說的是

實(shí)現(xiàn)搶票的事,這個我還暫時沒想好怎么去做

平時工作比較忙

所以以后實(shí)現(xiàn)這個功能吧

拜拜~

以上就是python+selenium實(shí)現(xiàn)12306模擬登錄的步驟的詳細(xì)內(nèi)容,更多關(guān)于python 12306模擬登錄的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: 12306 車票 Python
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜久久中文| 国模大尺度视频一区二区| 国产伦久视频在线观看| 免费在线观看视频一区| 噜噜噜久久亚洲精品国产品小说| 日本一区二区中文字幕| 蜜臀va亚洲va欧美va天堂| 免费成人在线观看| 亚洲国产一区二区三区在线播放| 激情久久五月| 日本亚洲视频| 91亚洲国产成人久久精品| 国产综合精品一区| 日韩av一级片| 999国产精品999久久久久久| 国产亚洲一卡2卡3卡4卡新区| 国产亚洲一区二区手机在线观看| 国产一区丝袜| 日韩精品水蜜桃| 91欧美在线| 国产麻豆精品| 日本亚洲欧美天堂免费| 成人高清一区| 欧美日韩一二三四| 91精品蜜臀一区二区三区在线| 免费看的黄色欧美网站| 首页国产欧美久久| 日韩1区2区3区| 国产精品午夜一区二区三区| 国产一区二区三区探花| 91精品精品| 亚洲伊人影院| 91精品国产调教在线观看 | 久久香蕉国产| 精品视频在线一区二区在线| 国产女优一区| 国产精品久久观看| 蜜臀va亚洲va欧美va天堂| 黑森林国产精品av| 日韩综合一区二区| 国产成人精品三级高清久久91 | 久久uomeier| 91精品日本| av资源亚洲| 国产成人77亚洲精品www| 国产福利一区二区三区在线播放| 日本不卡不码高清免费观看 | 日韩av在线播放中文字幕| 夜夜嗨一区二区| 亚洲播播91| 激情综合激情| 亚洲乱码一区| 精品黄色一级片| 欧美日韩国产一区二区三区不卡| 午夜性色一区二区三区免费视频| 国产aⅴ精品一区二区三区久久| 午夜久久美女| 久久精品国产亚洲夜色av网站| 国产福利一区二区精品秒拍 | 99视频一区| 久久亚洲国产| 免费av一区| 亚洲激情不卡| 麻豆成全视频免费观看在线看| 国产亚洲欧美日韩精品一区二区三区 | 久久国内精品视频| 视频一区日韩精品| 欧美日韩激情| 午夜亚洲一区| 免费在线视频一区| 欧美成人aaa| 欧美精品三级在线| 精品视频一区二区三区四区五区 | 美女视频黄久久| 欧美成人基地| 人人爽香蕉精品| 亚洲人www| 蜜桃精品视频| 国产免费成人| 久久精品国产在热久久| 国产一区清纯| 日韩激情网站| 久久国产毛片| 国产亚洲人成a在线v网站| 欧美日韩精品在线一区| 色狠狠一区二区三区| 国产精品手机在线播放| 欧美手机在线| 精品国产美女a久久9999| 亚洲人成网77777色在线播放| 亚洲免费福利| 欧美日韩网址| 最新亚洲国产| 亚洲女同中文字幕| 久久精品国产一区二区| 久久高清一区| 日韩理论视频| 一区福利视频| 久久伊人亚洲| 97精品国产99久久久久久免费| 97国产成人高清在线观看| 国产欧美日韩| 亚洲一级大片| 奶水喷射视频一区| 亚洲黄色在线| 精品久久久亚洲| 久久男人av| 人人爱人人干婷婷丁香亚洲| 国内精品99| 桃色av一区二区| 午夜日韩福利| 蜜桃国内精品久久久久软件9| 国产精品一区亚洲| 日本a级不卡| 国产毛片精品| 日本91福利区| 国产亚洲欧美日韩在线观看一区二区| 日韩精品五月天| 久久精品国产99| 四虎成人av| 日韩午夜在线| 青青青国产精品| 国产精品一区二区三区www| 精品久久中文| 国产在线|日韩| 在线一区视频观看| 日韩一区二区中文| 欧美日韩精品免费观看视完整| 天堂av在线一区| 中文字幕人成乱码在线观看 | 精品在线91| 国产美女久久| 日韩欧美国产精品综合嫩v| 日韩a一区二区| 福利欧美精品在线| 日产精品一区| 欧美精品自拍| 男女男精品网站| 日韩激情综合| 久久免费影院| 国产欧美啪啪| 亚洲专区在线| 国产精品夜夜夜| 国产高清不卡| 日韩欧美中文字幕在线视频| 久久精品国内一区二区三区| www在线观看黄色| 亚洲一区观看| 欧美亚洲人成在线| 久久精品不卡| 国产情侣久久| 亚洲香蕉网站| 国产精品亚洲二区| 久久亚洲不卡| 香蕉成人av| 欧美精品高清| 精品国产黄a∨片高清在线| 秋霞国产精品| 日本久久一区| 久久aⅴ国产紧身牛仔裤| 亚洲精品福利电影| 久久精品网址| 久久亚洲黄色| 欧美在线综合| 久久丁香四色| 色婷婷精品视频| 久久av影院| 国产精品一线天粉嫩av| 亚洲一区二区成人| 亚洲一级少妇| 亚洲三级精品| 精精国产xxxx视频在线播放| 久久国产电影| 一区二区电影在线观看| 久久婷婷激情| 97久久中文字幕| 日韩欧美精品一区| 亚洲人成在线影院| 特黄特色欧美大片| 91成人超碰| 国产亚洲精品美女久久久久久久久久| 亚洲欧美日韩一区在线观看| 欧美特黄一级| 少妇精品久久久一区二区| 你懂的国产精品永久在线| 久久久久99| 日本国产欧美| 国产成人精品一区二区免费看京| 在线精品视频在线观看高清| 欧美日本精品| 五月天综合网站| 久久一区精品| 日韩精品一区第一页| 国产成人精品一区二区三区在线| 免费精品视频最新在线| 久久久久久色| 婷婷成人在线| 国产精品久久| 羞羞答答国产精品www一本| 国产成人精品一区二区三区视频|