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