婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > 使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法

使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法

熱門(mén)標(biāo)簽:鄭州智能外呼系統(tǒng)中心 電銷機(jī)器人 金倫通信 汕頭電商外呼系統(tǒng)供應(yīng)商 南京crm外呼系統(tǒng)排名 云南地圖標(biāo)注 賓館能在百度地圖標(biāo)注嗎 北京外呼電銷機(jī)器人招商 crm電銷機(jī)器人 400電話 申請(qǐng) 條件

文章目錄 微信登錄問(wèn)題Python chrome driver操作導(dǎo)入庫(kù)并聲明瀏覽器:完整流程:用js來(lái)預(yù)約生成js代碼 主函數(shù)——程序出錯(cuò)時(shí)嘗試:檢測(cè)是否成功:logging: 生成每天的日志文件 Windows定時(shí)任務(wù)后記:
學(xué)校的圖書(shū)館需要網(wǎng)上預(yù)約。復(fù)習(xí)考研的人多、疫情座位少,約上一個(gè)好點(diǎn)的座位對(duì)于我這種經(jīng)常忘記事情的懶人來(lái)說(shuō)很難。

考慮到老師實(shí)驗(yàn)室有一臺(tái)供我們使用的Windows服務(wù)器是不會(huì)關(guān)機(jī)的,正好可以幫我在早上7:00預(yù)約系統(tǒng)開(kāi)啟的時(shí)候執(zhí)行程序去預(yù)約一個(gè)座位。所以產(chǎn)生了這個(gè)想法。

微信登錄問(wèn)題

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

當(dāng)我沒(méi)有找到頭緒的時(shí)候,我偶然間發(fā)現(xiàn)學(xué)校圖書(shū)館開(kāi)放了另一個(gè)入口可以在網(wǎng)頁(yè)上預(yù)約,而這個(gè)流程就清晰很多了:

  • 進(jìn)入網(wǎng)站
  • 輸入賬號(hào)和密碼,點(diǎn)擊登錄按鈕
  • 找到座位并選擇

Python chrome driver操作

有幾個(gè)注意的點(diǎn):

  • 每天早上系統(tǒng)開(kāi)放的時(shí)間有幾分鐘的差別,需要留時(shí)間嘗試。
  • 剛開(kāi)放的時(shí)候,系統(tǒng)會(huì)很卡,所以很可能會(huì)出現(xiàn)獲取元素失敗之類的情況。

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

導(dǎo)入庫(kù)并聲明瀏覽器:

from selenium import webdriver
option = webdriver.ChromeOptions()
url='網(wǎng)址'
local_dir = 'C:\\Users\\Administrator\\Desktop\\librarytest\\' #webdiriver 位置
browser = webdriver.Chrome(local_dir+"chromedriver.exe",options=option)

完整流程:

使用selenium操作非常簡(jiǎn)單,就是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") #找到登錄的按鈕,如果沒(méi)找到證明還沒(méi)到開(kāi)放時(shí)間/系統(tǒng)在崩潰
 except:
 return 1 #1說(shuō)明預(yù)約還沒(méi)到時(shí)候
 '''執(zhí)行到這里說(shuō)明打開(kāi)啦'''
 try:
 btn.click()
 username=browser.find_element_by_id("un")
 password=browser.find_element_by_id("pd")#找到賬號(hào)密碼
 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代碼來(lái)預(yù)約
 res=browser.execute_script(js)
 return 0
 except:
 return 2 #2說(shuō)明打開(kāi)了網(wǎng)頁(yè),但是遇到了其它問(wèn)題

用js來(lái)預(yù)約

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

生成js代碼

用F12去觀察發(fā)現(xiàn),圖書(shū)管的表單提交需要下面幾步:

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

因此這個(gè)函數(shù)用來(lái)生成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

主函數(shù)——程序出錯(cuò)時(shí)嘗試:

返回的狀態(tài)中,如果網(wǎng)頁(yè)沒(méi)打開(kāi),讓他休息10s再嘗試,如果是其它原因,那么休息0.5秒就繼續(xù)嘗試:

if __name__=='__main__':
 browser = webdriver.Chrome(local_dir+"chromedriver.exe",options=option)#聲明瀏覽器
 while True:
 state=wholeProcess(browser)
 if state==0: #沒(méi)出錯(cuò)
  break:
 elif state==1: 
  logger.info("打開(kāi)網(wǎng)頁(yè)失敗")
  time.sleep(10)
 elif state==2: 
  logger.info("其它錯(cuò)誤")
  time.sleep(0.5)

檢測(cè)是否成功:

除了上面提到的網(wǎng)頁(yè)崩潰導(dǎo)致WebDriver報(bào)錯(cuò),還有幾種可能導(dǎo)致失敗:

  • 座位被人搶了😟
  • 已經(jīng)有過(guò)預(yù)約了
  • 有人約了但不是全部時(shí)間段。

這幾種錯(cuò)誤都不會(huì)報(bào)錯(cuò),會(huì)在執(zhí)行代碼后以標(biāo)簽的形式告訴我們,可以用關(guān)鍵字定位這些標(biāo)簽,如果失敗可以選擇預(yù)約PlanB:
比如:

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

logging: 生成每天的日志文件

寫(xiě)好小程序以后,幾個(gè)兄弟聽(tīng)說(shuō)了也想嘗試,每天預(yù)約。
不想每天早上七點(diǎn)起來(lái)看,為了防止為止錯(cuò)誤發(fā)生后還不知道是哪步出錯(cuò),采取的辦法是寫(xiě)日志文件(事后追責(zé)),這里使用的是logging這個(gè)包。
logger的初始化代碼來(lái)源 : python的logging模塊

import logging
# 創(chuàng)建一個(gè)logger
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
# 創(chuàng)建一個(gè)handler,用于寫(xiě)入日志文件
fh = logging.FileHandler(local_dir+'logfile\\'+logname+'.log')
fh.setLevel(logging.DEBUG)
# 再創(chuàng)建一個(gè)handler,用于輸出到控制臺(tái)
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添加handler
logger.addHandler(fh)
logger.addHandler(ch)
# 記錄一條日志

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

Windows定時(shí)任務(wù)

  •  此電腦上右鍵管理
  • 右側(cè)有創(chuàng)建任務(wù)(下圖)

  • 觸發(fā)器選項(xiàng)卡中新建,并設(shè)定時(shí)間
  • 操作選項(xiàng)卡中新建,并選擇程序路徑(下圖)

這樣就程序就會(huì)每天早上執(zhí)行,只要有一臺(tái)不關(guān)機(jī)的電腦。

后記:

大家開(kāi)始使用我的代碼,但都是我放在學(xué)校的服務(wù)器上,為了方便他們修改自己想要的預(yù)約時(shí)間、位置等信息,我寫(xiě)了個(gè)微信小程序方便同學(xué)修改時(shí)間。

思路就是使用微信小程序修改自己的預(yù)約信息,同步到微信的數(shù)據(jù)庫(kù)。
早上預(yù)約時(shí),我的程序通過(guò)微信云開(kāi)發(fā)數(shù)據(jù)庫(kù)的API獲取到這些預(yù)約信息(時(shí)間、座位、學(xué)號(hào)、密碼),再去預(yù)約,免去了總要去服務(wù)器上修改程序/參數(shù)的麻煩事。
具體的小程序部分的內(nèi)容這里不展開(kāi),以后再寫(xiě)日記。

這就是上學(xué)期快期末的時(shí)候搞的一個(gè)小事情,雖然原理非常簡(jiǎn)單,但能幫自己和同學(xué)去預(yù)約圖書(shū)館還是很快樂(lè)的,尤其是每天早上醒來(lái)大家都收到企業(yè)微信的“預(yù)約成功”的提示的時(shí)候,然而過(guò)程中還有一些沒(méi)懂的知識(shí)和沒(méi)填的坑,所以在CSDN寫(xiě)個(gè)小記,怕以后忘了。

到此這篇關(guān)于使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法的文章就介紹到這了,更多相關(guān)Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 用python-webdriver實(shí)現(xiàn)自動(dòng)填表的示例代碼
  • python+webdriver自動(dòng)化環(huán)境搭建步驟詳解
  • selenium+python自動(dòng)化測(cè)試之使用webdriver操作瀏覽器的方法
  • python使用webdriver爬取微信公眾號(hào)
  • python實(shí)現(xiàn)圖書(shū)館搶座(自動(dòng)預(yù)約)功能的示例代碼
  • python實(shí)現(xiàn)圖書(shū)館研習(xí)室自動(dòng)預(yù)約功能
  • Python Requests模擬登錄實(shí)現(xiàn)圖書(shū)館座位自動(dòng)預(yù)約

標(biāo)簽:石家莊 梅州 錫林郭勒盟 文山 西寧 浙江 昆明 懷化

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法》,本文關(guān)鍵詞  使用,Python,webdriver,圖書(shū)館,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品一区在线观看你懂的| 国产午夜精品美女毛片视频| 日韩伦理电影网| 成人美女视频在线观看| 亚洲欧洲国产日本综合| 在线欧美小视频| 日韩电影在线免费观看| 风流少妇一区二区| 一区二区成人在线视频| 成人avav影音| 麻豆国产欧美一区二区三区| 日韩午夜电影av| 一本色道久久综合狠狠躁的推荐 | 香蕉加勒比综合久久 | 99精品国产热久久91蜜凸| 日韩激情一二三区| 中文字幕中文字幕在线一区| 欧美电影在线免费观看| 99久久精品国产导航| 看电影不卡的网站| 亚洲午夜av在线| 国产精品久久久久久久久晋中| 欧美色偷偷大香| av午夜精品一区二区三区| 久久疯狂做爰流白浆xx| 亚洲va国产天堂va久久en| 国产精品麻豆欧美日韩ww| 日韩欧美电影在线| 欧美少妇一区二区| 国产精品18久久久久久久网站| 中文字幕的久久| 日韩久久久久久| 欧美一区二区三区人| 欧洲精品视频在线观看| 99精品久久久久久| a在线播放不卡| 成人午夜私人影院| 国产91富婆露脸刺激对白| 另类小说图片综合网| 无吗不卡中文字幕| 午夜影院在线观看欧美| 亚洲精品一二三| 亚洲男女毛片无遮挡| 中文字幕一区二区三区av | 欧美sm美女调教| 久久久精品综合| 精品美女一区二区| 久久人人97超碰com| 精品国产一区二区亚洲人成毛片| 91污在线观看| 天天av天天翘天天综合网| 亚洲欧美日韩国产另类专区| 亚洲伦在线观看| 亚洲成av人**亚洲成av**| 偷拍与自拍一区| 久久精品国产99国产| 日韩一区有码在线| 2019国产精品| 中文字幕亚洲在| 亚洲日本护士毛茸茸| 中文字幕一区二区在线观看| 亚洲欧美激情视频在线观看一区二区三区| 精品第一国产综合精品aⅴ| 2023国产一二三区日本精品2022| 久久婷婷综合激情| 中文字幕第一页久久| 成人久久18免费网站麻豆| 成人国产精品免费观看动漫| www.亚洲在线| 在线播放91灌醉迷j高跟美女 | 中文字幕第一页久久| 国产高清精品网站| 午夜精品视频在线观看| 欧美精品丝袜久久久中文字幕| 成人黄动漫网站免费app| 91在线丨porny丨国产| 一区二区在线电影| 亚洲午夜久久久久久久久电影院| 中文字幕一区二区三区av| 青青草国产精品97视觉盛宴| av中文字幕一区| 亚洲综合无码一区二区| 91啪在线观看| 亚洲午夜一区二区三区| av在线综合网| 国产精品无遮挡| 色成人在线视频| 奇米色777欧美一区二区| 久久久国产午夜精品| 午夜精品视频在线观看| 91高清视频免费看| 亚洲婷婷在线视频| 国产精品18久久久久久vr| 精品免费日韩av| 亚洲国产成人高清精品| 成人app软件下载大全免费| 日韩欧美美女一区二区三区| 亚洲欧美日韩国产综合在线| www.久久久久久久久| 国产视频视频一区| 国产精品一区免费在线观看| 91精品国产综合久久蜜臀| 亚洲第一福利视频在线| 色综合天天狠狠| 久久久精品天堂| 国产精品538一区二区在线| 久久亚洲精精品中文字幕早川悠里 | 蜜臀久久久久久久| 91麻豆精品国产综合久久久久久| 丝袜a∨在线一区二区三区不卡| 91久久精品午夜一区二区| 亚洲精品视频在线看| av电影一区二区| 中文字幕色av一区二区三区| 国产精品69久久久久水密桃| 不卡av电影在线播放| 亚洲天堂a在线| 色哟哟日韩精品| 亚洲高清视频在线| **性色生活片久久毛片| 亚洲国产精品成人综合色在线婷婷| 国产高清不卡一区二区| 亚洲精品伦理在线| 这里是久久伊人| 久久超碰97中文字幕| 亚洲国产精品av| 欧美性猛交xxxx乱大交退制版 | 一本到三区不卡视频| 香蕉成人伊视频在线观看| 26uuu国产电影一区二区| 岛国一区二区三区| 亚洲午夜国产一区99re久久| 日韩欧美资源站| 成人精品免费看| 亚洲成人自拍偷拍| 中文一区在线播放| 欧美日韩国产小视频| 国产一区不卡在线| 中文字幕在线不卡| 精品乱人伦小说| a亚洲天堂av| 久久不见久久见免费视频1| 亚洲青青青在线视频| 日韩欧美的一区| 欧美婷婷六月丁香综合色| 国产一区二区精品久久99| 亚洲成av人片| 亚洲色欲色欲www| 日韩欧美亚洲一区二区| 在线影院国内精品| 国产成人av资源| 蜜臀久久99精品久久久久久9| 亚洲欧美在线视频| 久久伊人蜜桃av一区二区| 欧美日韩精品三区| av不卡免费电影| 国产在线日韩欧美| 日本视频一区二区三区| 亚洲免费视频中文字幕| 成人av小说网| 亚洲精品网站在线观看| 91丨九色丨国产丨porny| 国产成人免费视频一区| 久久av老司机精品网站导航| 亚洲曰韩产成在线| 亚洲日本青草视频在线怡红院 | 国产精品免费视频观看| 欧美videos大乳护士334| 欧美精选一区二区| 久久国产综合精品| 日韩av一二三| 婷婷中文字幕一区三区| 亚洲综合男人的天堂| 一区在线观看免费| 精品久久久久久久久久久久包黑料 | 欧美午夜寂寞影院| 91麻豆6部合集magnet| 波多野结衣中文字幕一区 | 中文字幕不卡在线观看| 91精品国产综合久久福利软件| 不卡的看片网站| 99麻豆久久久国产精品免费| 国产一区二区在线影院| 免费观看成人av| 全国精品久久少妇| 免费成人在线观看| 日韩精品每日更新| 麻豆精品一区二区综合av| 日本va欧美va欧美va精品| 免费高清在线一区| 国产一区二区在线影院| 国产成人午夜99999| 国产福利一区二区三区视频| 国产精品小仙女| 国产成人av电影在线观看| 成人性色生活片| 在线观看一区日韩| 欧美精品第1页| 精品999久久久| 亚洲欧美在线观看|