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

您的位置:首頁技術文章
文章詳情頁

使用Python webdriver圖書館搶座自動預約的正確方法

瀏覽:358日期:2022-06-26 13:46:27

文章目錄 微信登錄問題Python chrome driver操作導入庫并聲明瀏覽器:完整流程:用js來預約生成js代碼 主函數——程序出錯時嘗試:檢測是否成功:logging: 生成每天的日志文件 Windows定時任務后記:學校的圖書館需要網上預約。復習考研的人多、疫情座位少,約上一個好點的座位對于我這種經常忘記事情的懶人來說很難。

考慮到老師實驗室有一臺供我們使用的Windows服務器是不會關機的,正好可以幫我在早上7:00預約系統開啟的時候執行程序去預約一個座位。所以產生了這個想法。

微信登錄問題

想用chromedriver去操作,方便快捷,但我們圖書館的預約在微信上進行的,在微信公眾號上認證過帳號以后,會發送一個鏈接,點進去就是自己的登錄信息。經過和同學的驗證,他將他的鏈接發送給我,我就可以打開他的登錄信息。這讓我感到很神奇,本以為登錄信息僅僅攜帶在網址上,但如果在微信中用瀏覽器打開,再將網址復制到其它瀏覽器,會登陸失敗。查找一系列百度谷歌想弄清楚這個問題,應該與cookies之類的有關,這里希望以后可以填坑。

當我沒有找到頭緒的時候,我偶然間發現學校圖書館開放了另一個入口可以在網頁上預約,而這個流程就清晰很多了:

進入網站 輸入賬號和密碼,點擊登錄按鈕 找到座位并選擇Python chrome driver操作

使用Python webdriver圖書館搶座自動預約的正確方法

有幾個注意的點:

每天早上系統開放的時間有幾分鐘的差別,需要留時間嘗試。 剛開放的時候,系統會很卡,所以很可能會出現獲取元素失敗之類的情況。

這就要求我們的程序得有足夠的魯棒性(哈哈蛤) 容錯能力,不會一下崩了就沒用了。所以我選擇用try...except...的方法去進行,寫了好多個try, 希望能找到不寫這么多Try的更好的方法。

導入庫并聲明瀏覽器:

from selenium import webdriveroption = webdriver.ChromeOptions()url=’網址’local_dir = ’C:UsersAdministratorDesktoplibrarytest’ #webdiriver 位置browser = webdriver.Chrome(local_dir+'chromedriver.exe',options=option)完整流程:

使用selenium操作非常簡單,就是find_element_by_id()和find_element_by_xpath(),主要是看F12去找他們的xpath或者id。

def wholeProcess(browser): browser.get(url) try: btn=browser.find_element_by_xpath('/html/body/div[4]/div[2]/div[2]/dl/input') #找到登錄的按鈕,如果沒找到證明還沒到開放時間/系統在崩潰 except: return 1 #1說明預約還沒到時候 ’’’執行到這里說明打開啦’’’ try: btn.click() username=browser.find_element_by_id('un') password=browser.find_element_by_id('pd')#找到賬號密碼 username.send_keys(studentNumber) password.send_keys(loginPassword) btn=browser.find_element_by_xpath(’//*[@id='index_login_btn']/input’)#找到登錄按鍵 btn.click() js=generateJsCode(startTime,endTime)#使用js代碼來預約 res=browser.execute_script(js) return 0 except: return 2 #2說明打開了網頁,但是遇到了其它問題用js來預約

找到座位并選擇,如果用鼠標操作的話是很繁瑣的,包括先找到座位圖標,點擊,下拉選擇開始時間和結束時間,再點擊預約,這個過程麻煩不說,主要是容易出錯。而其實一個座位預定的本質其實是提交一個表單。瀏覽器的前端做了那么多人性化的操作,如可視化座位表、下拉框、溫馨提示等,就是為了人使用時好看而又方便,而我們作為計算機就可以饒過他,直接提交表單。這里用的是selenium的execute_script()函數,可以用來執行網頁上的js代碼。

生成js代碼

用F12去觀察發現,圖書管的表單提交需要下面幾步:

$('#date').val('2020-12-10'); $('#reserveForm#seat').val('13022'); //座位號$('#start').val('540'); //用分鐘表示的時間 : 540=9*60 即九點$('#end').val('1260');$('#reserveForm').submit();

因此這個函數用來生成js代碼:

def generateJsCode(startTime_ori,endTime_ori): seatnumber_str = seatId startTime_str = str(startTime_ori * 60) endTime_str = str(endTime_ori * 60) tomorrowTime = (datetime.datetime.now() + datetime.timedelta(days=1)).strftime(’%Y-%m-%d’) # 明天 js = ’$('#date').val('’ + tomorrowTime + ’');$('#reserveForm #seat').val('’ + seatnumber_str + ’');$('#start').val('’ + startTime_str + ’');$('#end').val('’ + endTime_str + ’');$('#reserveForm').submit();’ return js主函數——程序出錯時嘗試:

返回的狀態中,如果網頁沒打開,讓他休息10s再嘗試,如果是其它原因,那么休息0.5秒就繼續嘗試:

if __name__==’__main__’: browser = webdriver.Chrome(local_dir+'chromedriver.exe',options=option)#聲明瀏覽器 while True: state=wholeProcess(browser) if state==0: #沒出錯 break: elif state==1: logger.info('打開網頁失敗') time.sleep(10) elif state==2: logger.info('其它錯誤') time.sleep(0.5)

檢測是否成功:

除了上面提到的網頁崩潰導致WebDriver報錯,還有幾種可能導致失敗:

座位被人搶了😟 已經有過預約了 有人約了但不是全部時間段。

這幾種錯誤都不會報錯,會在執行代碼后以標簽的形式告訴我們,可以用關鍵字定位這些標簽,如果失敗可以選擇預約PlanB:比如:

try: a=browser.find_element_by_xpath('//*[contains(text(),’盡快’)]') #有人約了(非全部時間) error_reason=a.text isNoSeat=True

logging: 生成每天的日志文件

寫好小程序以后,幾個兄弟聽說了也想嘗試,每天預約。不想每天早上七點起來看,為了防止為止錯誤發生后還不知道是哪步出錯,采取的辦法是寫日志文件(事后追責),這里使用的是logging這個包。logger的初始化代碼來源 : python的logging模塊

import logging# 創建一個loggerlogger = logging.getLogger(’mylogger’)logger.setLevel(logging.DEBUG)# 創建一個handler,用于寫入日志文件fh = logging.FileHandler(local_dir+’logfile’+logname+’.log’)fh.setLevel(logging.DEBUG)# 再創建一個handler,用于輸出到控制臺ch = logging.StreamHandler()ch.setLevel(logging.DEBUG)# 定義handler的輸出格式formatter = logging.Formatter(’[%(asctime)s][%(thread)d][%(filename)s][line: %(lineno)d][%(levelname)s] ## %(message)s’)fh.setFormatter(formatter)ch.setFormatter(formatter)# 給logger添加handlerlogger.addHandler(fh)logger.addHandler(ch)# 記錄一條日志

記錄時只要使用 logger.info('xxxxx')就可以,非常方便,寫在了上面。

Windows定時任務 此電腦上右鍵管理 右側有創建任務(下圖)

使用Python webdriver圖書館搶座自動預約的正確方法

觸發器選項卡中新建,并設定時間 在操作選項卡中新建,并選擇程序路徑(下圖)

使用Python webdriver圖書館搶座自動預約的正確方法

這樣就程序就會每天早上執行,只要有一臺不關機的電腦。

后記:

大家開始使用我的代碼,但都是我放在學校的服務器上,為了方便他們修改自己想要的預約時間、位置等信息,我寫了個微信小程序方便同學修改時間。

思路就是使用微信小程序修改自己的預約信息,同步到微信的數據庫。早上預約時,我的程序通過微信云開發數據庫的API獲取到這些預約信息(時間、座位、學號、密碼),再去預約,免去了總要去服務器上修改程序/參數的麻煩事。具體的小程序部分的內容這里不展開,以后再寫日記。

這就是上學期快期末的時候搞的一個小事情,雖然原理非常簡單,但能幫自己和同學去預約圖書館還是很快樂的,尤其是每天早上醒來大家都收到企業微信的“預約成功”的提示的時候,然而過程中還有一些沒懂的知識和沒填的坑,所以在CSDN寫個小記,怕以后忘了。

到此這篇關于使用Python webdriver圖書館搶座自動預約的正確方法的文章就介紹到這了,更多相關Python webdriver圖書館搶座自動預約內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
韩国三级一区| 好吊日精品视频| 在线亚洲成人| 麻豆国产精品| 欧美日一区二区三区在线观看国产免| 亚洲最大av| 国产视频一区免费看| 色偷偷色偷偷色偷偷在线视频| 国产乱子精品一区二区在线观看| 激情欧美一区| 国产精品蜜芽在线观看| 国产一区精品福利| 国产精品毛片一区二区在线看| 福利欧美精品在线| 97国产精品| 免费成人网www| 亚洲一区欧美激情| 日本亚州欧洲精品不卡| 日韩精品国产精品| 国产精品亚洲人成在99www| 精品国产中文字幕第一页| 日本午夜大片a在线观看| 亚洲激精日韩激精欧美精品| 亚洲免费专区| 国产精品一区二区免费福利视频| 国产一区二区三区天码| 国产综合激情| 亚洲欧美在线综合| 久久亚洲精品中文字幕| 色一区二区三区| 中文亚洲免费| 国产欧美日韩精品一区二区三区| 成人免费一区| 少妇精品导航| 蜜臀精品一区二区三区在线观看| 欧美一区影院| 国产精品亚洲一区二区三区在线观看| 国产精品毛片| 国产麻豆一区二区三区 | 亚洲激情婷婷| 日韩精品高清不卡| 国产理论在线| 中文字幕av一区二区三区四区| 国产精久久一区二区| 亚洲网站视频| 欧美一区激情| 少妇精品导航| 日韩精品五月天| 精品国产免费人成网站| 中文一区一区三区免费在线观 | 国产一卡不卡| 99久久99久久精品国产片果冰| 天堂va在线高清一区| 成人黄色av| 中文字幕日韩高清在线| 精品网站999| 国产精品毛片在线看| 国产精品nxnn| 亚洲欧美网站| 国产一区二区三区精品在线观看 | 免费日韩av片| 免费在线亚洲欧美| 午夜久久av| 亚洲图片久久| 国产精品66| 日韩成人免费| 免费污视频在线一区| 亚洲女同中文字幕| 伊人影院久久| 国产精品自在| 99视频精品视频高清免费| 99精品综合| 亚洲综合日韩| 欧美午夜精品一区二区三区电影| 亚洲精品日本| 国产综合婷婷| 精品国产欧美| 日韩激情啪啪| 性色一区二区| 亚洲男女av一区二区| 精品一区二区三区免费看| 国产精选久久| 久久久成人网| 亚洲网站视频| 国产福利资源一区| 国产一区白浆| 天堂av在线| 中文一区一区三区免费在线观| bbw在线视频| 国产精品一区二区精品视频观看| 欧美日韩国产综合网| 奇米狠狠一区二区三区| 中文在线免费视频| 欧美亚洲激情| 亚洲一区二区毛片| 国产高清一区二区| 国产精品欧美三级在线观看| 日韩不卡免费高清视频| 日韩高清在线不卡| 美女网站一区| 日韩精品专区| 国产精品久久久久毛片大屁完整版| 国精品产品一区| 在线一区二区三区视频| 人人精品人人爱| 免费人成精品欧美精品 | 激情综合网五月| 蜜桃精品在线| 日韩成人亚洲| 亚洲精华国产欧美| 日韩欧美三区| 亚洲一区日韩| 涩涩av在线| 精品黄色一级片| 国产毛片精品| 国产亚洲精品美女久久| 国产毛片一区| 99在线精品视频在线观看| 免费国产自久久久久三四区久久| 亚洲天堂av影院| 日本免费一区二区三区四区| 欧美激情另类| 国产亚洲一区二区手机在线观看| 日韩中文字幕高清在线观看| 天堂av在线| 久久精品一区二区不卡| 国产精品成人3p一区二区三区| 精品三级久久久| 福利一区在线| 国产一区精品福利| 国产精品久一| 亚洲精品裸体| 日本亚洲最大的色成网站www| 伊人成人网在线看| 美女网站久久| 日本h片久久| 久久伊人国产| 久久久久蜜桃| 蜜臀av性久久久久蜜臀aⅴ流畅 | 99pao成人国产永久免费视频| 香蕉国产精品| 久久亚洲人体| 国产免费播放一区二区| 只有精品亚洲| 激情欧美丁香| 欧美日韩一区自拍| 国产亚洲欧洲| 美女性感视频久久| 日本不卡一二三区黄网| 999久久久免费精品国产| 亚洲国产不卡| 亚洲91网站| 国产亚洲欧美日韩在线观看一区二区 | 国产精品高清一区二区| 久草精品视频| 丰满少妇一区| 国产精品99免费看| 久久亚洲一区| 精品国产99| 在线看片国产福利你懂的| 日本免费久久| 狠狠操综合网| 高清一区二区| 国产模特精品视频久久久久| 麻豆国产精品| 日韩精品久久理论片| 在线精品视频在线观看高清| 精品久久久网| 日韩午夜视频在线| 黄色亚洲精品| 91p九色成人| 好看不卡的中文字幕| 免费在线观看成人| 久久国产精品亚洲77777| 蜜臀av在线播放一区二区三区| 99精品在线观看| 久久国产精品亚洲77777| 视频精品一区| 国产精品成人a在线观看| 成人一区不卡| 成人精品天堂一区二区三区| av最新在线| 秋霞影院一区二区三区| 国产亚洲精品美女久久| 高清一区二区三区| 久久精品国产68国产精品亚洲| 亚洲综合福利| 日本黄色精品| 免费一区二区视频| 日本一区二区免费高清| 首页亚洲欧美制服丝腿| 日本一区二区免费高清| 视频一区二区不卡| 精品视频一区二区三区四区五区| 女人天堂亚洲aⅴ在线观看| 国产精品超碰| 免费视频久久| 在线亚洲人成| 999久久久国产精品| 亚洲精品看片|