運(yùn)用selenium和apscheduler庫(kù)完成一個(gè)小外掛
github源碼在此,記得點(diǎn)星:
https://github.com/brandonxiang/selenium_apscheduler_example
引言
機(jī)緣巧合,我看到一些python寫的游戲外掛的教程(主要是網(wǎng)頁(yè)游戲),也是,點(diǎn)擊屏幕位置。這也激發(fā)了我去實(shí)現(xiàn)類似的功能,主要用途是去定期點(diǎn)擊瀏覽器屏幕上的某個(gè)控件去實(shí)現(xiàn)一些功能。當(dāng)然這類似的工具還可以應(yīng)用到其他地方,讓人腦洞大開,例如火車搶票,定時(shí)打卡之類,內(nèi)容有點(diǎn)敏感,不再展開。
原理
這個(gè)小外掛基于python,運(yùn)用了兩個(gè)庫(kù)selenium和apscheduler。
其中,selenium是一個(gè)出色的瀏覽器操作庫(kù),英文叫做Web Driver,主要是用于控制(包括IE在內(nèi)的)瀏覽器,網(wǎng)頁(yè)測(cè)試。當(dāng)然他也可以用作爬蟲,參考我的爬蟲之路 (靜態(tài)+動(dòng)態(tài)JS加載) selenium + PhantomJS,雖然我覺(jué)得爬蟲用request+beautifulsoap會(huì)在效率上更好,因?yàn)樗唤?jīng)過(guò)瀏覽器端。同類型的Web Driver庫(kù)還有許多,不在這里展開。
然而,apscheduler是一個(gè)定時(shí)框架,支持python解釋器和cron格式。
用法
克隆源碼,安裝第三方庫(kù),運(yùn)行腳本即可。
git clone https://github.com/brandonxiang/selenium_apscheduler_example.git
pip install -r requirements.txt
源碼
selenium
引用webdriver獲取瀏覽器,webdriver提供了Firefox,PhantomJS等多款國(guó)外瀏覽器可選。browser.get()則是跳轉(zhuǎn)到某個(gè)網(wǎng)頁(yè)。
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://XX.XX.com/")
find_element_by_id和find_element_by_tag_name則是通過(guò)id或者tag_name去找到對(duì)應(yīng)的元素。send_keys()則是往控件內(nèi)部傳值。click()則是點(diǎn)擊事件。
WebDriverWait(browser,10).until(EC.title_contains("系統(tǒng)".decode('utf8')))
當(dāng)網(wǎng)頁(yè)發(fā)生跳轉(zhuǎn),需要利用WebDriverWait(browser,時(shí)間)等待,否則頁(yè)面加載不完整。然而,until(EC.title_contains("系統(tǒng)".decode('utf8')))則是等到直到title出現(xiàn)系統(tǒng)兩個(gè)字。詳細(xì)教程參考selenium官網(wǎng)
apscheduler
通過(guò)BackgroundScheduler()生成一個(gè)后臺(tái)定時(shí)框架,然后將其啟動(dòng)。
schedular = BackgroundScheduler()
schedular.start()
運(yùn)用解釋器去設(shè)置時(shí)間間隔,這里使用cron,day_of_week是一個(gè)星期中的某幾天或星期幾,hour和minute是時(shí)和分,當(dāng)然,也有秒的設(shè)定。你也可以不使用解釋器和cron來(lái)設(shè)置時(shí)間,那樣自由度更高。詳細(xì)教程參考apscheduler文檔
@schedular.scheduled_job('cron',day_of_week='mon-fri',hour=8,minute=58)
總結(jié)
這里將兩個(gè)框架結(jié)合了一下。總結(jié)一下,首先了解控件的對(duì)應(yīng)的id或者class等屬性,然后針對(duì)某個(gè)控件通過(guò)屬性進(jìn)行捕獲,后生成點(diǎn)擊,文本輸入,頁(yè)面跳轉(zhuǎn)等事件即可。