前兩天,想搶購一個小米MIX,結果,一開始搶就沒有了。於是想,作為程序猿,總得有點特殊手段吧,比如說一個小腳本。最近在學習python,百度了一下,發現了Splinter這個強大的東東!用了不到兩小時的時間,就可以實現許多令人點贊的功能,真讓人很興奮吶!
首先,官網(https://splinter.readthedocs.io/en/latest/index.html)介紹,一句話,一個開源工具用來通過python自動化測試web,讓電腦自動操作網頁:
Splinter is an open source tool for testing web applications using Python. It lets you automate browser actions, such as visiting URLs and interacting with their items.
既然可以自動操作網頁,當然不局限於自動化測試嘍!
第一步,下載Splinter模塊和Chrome或FireFox的驅動(就是強大的開源web自動化測試框架selenium的驅動)。
Splinter模塊是python egg,下載當然很簡單:pip install splinter
由於基於selenium,所以,FireFox和Chrome的驅動,都依賴於pip install selenium,不過好像執行pip install splinter之后默認就已經安裝了,沒有的話再安裝一下。
我這個用Chrome的驅動chromedriver,注意版本要對應,不然基本上會有unknown error,打不開瀏覽器!
官網下載地址:https://sites.google.com/a/chromium.org/chromedriver/downloads 當然這里需要可以連接上google!
selenium 3.x開始,webdriver/firefox/webdriver.py的__init__中,executable_path="geckodriver",所以火狐瀏覽器需要這個驅動!
下載地址:https://github.com/mozilla/geckodriver/releases/
上述驅動也可以在selenium官網中查找並下載:http://docs.seleniumhq.org/download/


這樣,Splinter就可以自動打開瀏覽器,並進行操作了!
WebDriverException: Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line

#coding:utf-8 from splinter import Browser import time, threading def qq_mail_login(url=None, username=None, password=None): with Browser(driver_name="chrome") as browser: browser.visit(url) browser.find_by_id(u"userNameIpt").first.fill(username) browser.find_by_id(u"pwdInput").first.fill(password) browser.find_by_id("btnSubmit").first.click() for k, v in browser.cookies.all().items(): print (k, ":", v) quit_browser(browser) def quit_browser(browser=None): flag = input("Input q when you want to quit: ") if 'q' == str(flag): quit(browser) if __name__=='__main__': url="http://email.163.com/" username="你的郵箱地址" password="你的郵箱密碼" #t1 = threading.Thread(target=qq_mail_login,args=(url,username,password)) #t1.start() #t1.join() qq_mail_login(url,username,password)
運行效果就是,你什么都不用管,可以自動用指定瀏覽器打開你的郵箱:

#coding:utf-8 from splinter import Browser import time, threading def qq_mail_login(url=None, username=None, password=None): with Browser(driver_name="chrome") as browser: browser.visit(url[0]) #進入登錄界面 browser.click_link_by_href("//order.mi.com/site/login?redirectUrl=http://www.mi.com/") #輸入用戶名密碼,完成登錄 browser.find_by_id(u"username").first.fill(username) browser.find_by_id(u"pwd").first.fill(password) browser.find_by_id("login-button").first.click() time.sleep(1) #進入購買界面 browser.visit(url[1]) #點擊購買“下一步” count = 1 while not browser.is_element_not_present_by_id('J_chooseResultInit'): print ("第",count,"次: ",browser.is_element_not_present_by_id('J_chooseResultInit')) time.sleep(10) count += 1 browser.find_by_id("J_chooseResultInit").first.click() quit_browser(browser) def quit_browser(browser=None): flag = input("Input q when you want to quit: ") if 'q' == str(flag): quit(browser) if __name__=='__main__': url=["http://www.mi.com/","http://item.mi.com/buyphone/mix/"] username="你的用戶名" password="你的密碼" #t1 = threading.Thread(target=qq_mail_login,args=(url,username,password)) #t1.start() #t1.join() qq_mail_login(url,username,password)