Selenium+PhantomJS自動續(xù)借圖書館書籍(上)

Python 2.7
IDE Pycharm 5.0.3

具體環(huán)境只洒,Selenium及PhantomJS使用等看我前一篇博客
Python+Selenium+PIL+Tesseract真正自動識別驗證碼進行一鍵登錄


吐槽

自從我欠圖書館6塊錢的過期書后宪拥,立馬要寫一個自動續(xù)約的小工具壓壓驚

目的

自動實現(xiàn)圖書館借書籍的書單截圖卦羡,并一鍵續(xù)約全部書籍沛贪,我登錄校圖書館的目的無非就這兩個咯镜会,我才不去預約沒有的書呢--反正沒有一次預約成功過0.0


實現(xiàn)方法

Selenium+PhantonJS自動化腳本執(zhí)行


實現(xiàn)方案

1.采用Firefox瀏覽器進行模擬登錄度宦,這個比較酷炫把宪潮,可以看著瀏覽器自己在那邊跑,歡快的停不下來盖淡。年柠。。
2.調用PhantomJS.exe褪迟,不展現(xiàn)瀏覽器的運作冗恨,直接在cmd窗口跑(用pyinstaller打包成exe后有cmd窗)


方案實現(xiàn)過程

1.采用Selenium+Firefox方式:
先來個最后成品動圖:


實現(xiàn)動圖

(自從剪成動圖之后,根本停不下來味赃。更加生動形象有木有O颇ā)


然后來程序代碼--主模塊(被調用模塊,也可單獨執(zhí)行)

# -*- coding: utf-8 -*-
#Author:哈士奇說喵

from selenium import webdriver
import time

#shift-tab多行縮進(左)
print 'please wait...system loading...'
#reload(sys)

PostUrl = "http://lib.hrbeu.edu.cn/#"

driver=webdriver.Firefox()#用瀏覽器實現(xiàn)訪問
#driver = webdriver.PhantomJS(executable_path="phantomjs.exe")#沒用瀏覽器
driver.get(PostUrl)

elem_user = driver.find_element_by_name('number')
elem_psw = driver.find_element_by_name('passwd')


#選擇我的圖書館心俗,點擊后才能看到輸入賬號密碼
click_first = driver.find_element_by_xpath("http://ul[@id='imgmenu']/li[4]")
click_first.click()
elem_user.send_keys('S315080092')
elem_psw.send_keys('xxxxxxxxx')

#點擊登錄
click_second = driver.find_element_by_name('submit')
click_second.click()
print 'log in...'
time.sleep(1)

#定位新頁面元素傲武,將handle重定位即可

driver.switch_to_window(driver.window_handles[1])#定位彈出的第一個頁面,也就是當前頁面
#sreach_window = driver.current_window_handle  #此行代碼用來定位當前頁面#不可行
driver.find_element_by_xpath("/html/body/div[4]/div/div/ul/li[3]/a").click()
driver.save_screenshot('image_booklist_firefox.jpg')
print 'turning to the mylib...'
time.sleep(1)#搜索結果頁面停留片刻

#driver.switch_to_window(driver.window_handles[1])
#沒有跳出新窗口就是在同一頁面的城榛!
for i in range(2,30):#這里限定是29本書揪利,一般我們都不會借那么多書的
    try:
        #driver.find_element_by_xpath("/html/body/div[4]/div/div[2]/table/tbody/%s/td[8]/div/input"%('tr[%s]'%i)).click()#下面的比較好理解
        driver.find_element_by_xpath("/html/body/div[4]/div/div[2]/table/tbody/tr[%s]/td[8]/div/input"%i).click()
        print 'renewing...the %d\'th book renewed '%(i-1)
    except:
        print '%d books have been renewed !'%(i-2)
        a=i-2
        time.sleep(4)
        driver.save_screenshot('image_done_firefox.jpg')
        print 'the picture is saving...'
        print 'done!'
        break

time.sleep(1)

driver.close()
driver.quit()

調用上述模塊的主執(zhí)行函數(shù)(其實就是為了封裝上述模塊而已,封裝成gui界面吠谢,為后續(xù)的打包做準備土童,如何打包請見博文將自己的python程序打包成exe(秀同學一臉吶)
):

# -*- coding: utf-8 -*-
#Author:哈士奇說喵

from Tkinter import *
import tkMessageBox#執(zhí)行gui窗
import time

def check_renew():
    print 'checking and renewing...'
    tkMessageBox.showinfo('提示','即將開啟裝逼模式,請確認已安裝Firefox瀏覽器')
    #time.sleep(4)
    import Selenium_PhantomJS_lib_firefox
    tkMessageBox.showinfo('提示','已執(zhí)行成功!\n(截圖已保存于程序目錄)')



#主框架部分
root = Tk()
root.title('圖書館查詢續(xù)約(哈爾濱工程大學專版)--by 哈士奇說喵')
label=Label(root,text='   圖書館一鍵查詢與續(xù)約Firefox版本 (?ω?)  ')
button_check=Button(root,text='查詢書單并續(xù)期━Σ(?Д?|||)━開啟Firefox有形裝逼模式 ',background='green',command=check_renew)

label.pack()
button_check.pack()
root.mainloop()

實現(xiàn)效果如圖所示:


實現(xiàn)效果

程序中的注釋相信可以把程序解釋的差不多了把工坊。献汗。。王污。


遇到問題和解決方案

1.selenium對新頁面元素無法定位拋出

NoSuchElementException: Message: Unable to locate element

錯誤罢吃,導致無法進行對新的界面進行點擊操作。
1.解決方案:專門寫了一篇博客昭齐,請見
解決Selenium彈出新頁面無法定位元素問題(Unable to locate element)


2.對打包后的版本無法運行尿招,拋出如圖錯誤Errno 10054


錯誤形式

2.解決方案:暫未找到解決方案,exe文件不可用,程序執(zhí)行可用


3.對未知書籍數(shù)目重復點擊操作就谜,代碼冗余
3.解決方案:因為點擊續(xù)借按鈕的元素每個都不一樣怪蔑,通過觀察可知其中的規(guī)律,之后就知道在那進行修改丧荐,但是缆瓣,光修改的話,十本書就有十個相似的代碼串虹统,很不pythontic弓坞,所以,采用格式化字符串的方式進行for循環(huán)帶入车荔,方便又漂亮渡冻!


4.使用了1中的解決方案還是不能定位元素
4.可能查找元素的方式出現(xiàn)錯誤,我現(xiàn)在的使用方法是采用xpath的方式來找忧便,比如說這樣

driver.find_element_by_xpath("/html/body/div[4]/div/div/ul/li[3]/a")

雖然看起來有點長族吻,但是元素相當好找,而且定位很準茬腿,如果采用類似這種driver.find_element_by_xpath("http://ul[@id='imgmenu']/li[4]")呼奢,我現(xiàn)在還不能很好地駕馭,出錯可能性有點大切平,下次要多進行嘗試。


下篇預告

實現(xiàn)方案二辐董,調用PhantomJS.exe悴品,不展現(xiàn)瀏覽器的運作,直接在cmd窗口跑(用pyinstaller打包成exe后有cmd窗)


PS

科三過了還的看科四简烘,話說老師十八號要帶我去采集數(shù)據(jù)苔严。。孤澎。届氢。「残瘢可能就沒有多少時間整我的愛好了退子。。型将。那么寂祥,應該會從數(shù)據(jù)采集,數(shù)據(jù)挖掘算法方面進行更新七兜,━Σ(?Д?|||)━仍重道遠啊喵
so 丸凭,see you tomorrow!good night!


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末惜犀,一起剝皮案震驚了整個濱河市铛碑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虽界,老刑警劉巖亚茬,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浓恳,居然都是意外死亡刹缝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門颈将,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梢夯,“玉大人,你說我怎么就攤上這事晴圾∷淘遥” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵死姚,是天一觀的道長人乓。 經(jīng)常有香客問我,道長都毒,這世上最難降的妖魔是什么色罚? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮账劲,結果婚禮上戳护,老公的妹妹穿的比我還像新娘。我一直安慰自己瀑焦,他們只是感情好腌且,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榛瓮,像睡著了一般铺董。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上禀晓,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天精续,我揣著相機與錄音,去河邊找鬼匆绣。 笑死驻右,一個胖子當著我的面吹牛,可吹牛的內容都是我干的崎淳。 我是一名探鬼主播堪夭,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了森爽?” 一聲冷哼從身側響起恨豁,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爬迟,沒想到半個月后橘蜜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡付呕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年计福,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徽职。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡象颖,死狀恐怖,靈堂內的尸體忽然破棺而出姆钉,到底是詐尸還是另有隱情说订,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布潮瓶,位于F島的核電站陶冷,受9級特大地震影響,放射性物質發(fā)生泄漏毯辅。R本人自食惡果不足惜埂伦,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悉罕。 院中可真熱鬧赤屋,春花似錦、人聲如沸壁袄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗜逻。三九已至,卻和暖如春缭召,著一層夾襖步出監(jiān)牢的瞬間栈顷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工嵌巷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萄凤,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓搪哪,卻偏偏與公主長得像靡努,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內容