Python + Splinter 實現瀏覽器自動化操作入門指南
前言
Splinter 是用 Python 開發的一個開源web自動化測試的工具集。 它可以幫你自動化瀏覽器的行為,比如瀏覽 URLs 並和頁面進行交互。
快速上手
安裝
從終端運行:
pip install splintern
安裝相應的瀏覽器驅動
Chrome瀏覽器驅動:https://sites.google.com/a/chromium.org/chromedriver/downloads
Firefox瀏覽器驅動:https://github.com/mozilla/geckodriver/releases
根據相應的瀏覽器下載對應的驅動版本,並將驅動所在的路徑加入環境變數。創建一個 Browser 實例
from splinter import Browsernbrowser = Browser()n# 指定driver為chrome瀏覽器n# browser = Browser(driver_name=chrome)n
提示: 如果你不為 Browser 指定 driver, 那麼會默認使用 firefox。
訪問百度搜索頁面
使用 browser.visit 方法可訪問任意網站. 讓我們訪問一下百度搜索頁面:
browser.visit(http://baidu.com)n
輸入搜索關鍵詞
頁面載入完畢後,你能進行一系列的交互,比如點擊,輸入框填充欄位,選擇單選按鈕和複選框。讓我們在百度搜索框中填充 splinter - python acceptance testing for web applications。
browser.fill(wd, splinter - python acceptance testing for web applications)n
點擊搜索按鈕
告訴 Splinter 哪一個按鈕需要點擊。這個按鈕 - 或任意其他元素 - 可以通過它的css, xpath, id, tag 或 name來識別。
通過以下操作找到百度搜索按鈕:
button = browser.find_by_xpath(//input[@type="submit"])n
提示:這個 xpath 語法所在的按鈕 會在百度搜索頁面的源碼中被找到。
找到按鈕後,我們就可以進行點擊操作:
button.click()n
提示: 以上展示的兩步可以結合為一行代碼,如下所示:
browser.find_by_xpath(//input[@type="submit"]).click()n
查看 Splinter 官方網站是否在搜索結果中
點擊搜索按鈕後,你可以通過以下步驟檢測 Splinter 官方網站是否在搜索結果中。
if browser.is_text_present(splinter.readthedocs):n print "Yes, found it! :)"nelse:n print "No, didnt find it :("n
在這個小例子中, 我們只是列印出了結果. 當寫測試的時候,你需要使用斷言。
關閉瀏覽器
結束測試後,我們需要使用 browser.quit 關閉瀏覽器:
browser.quit()n
總結
最後完整的代碼如下所示:
from splinter import Browsernnbrowser = Browser()nbrowser.visit(http://baidu.com)nbrowser.fill(wd, splinter - python acceptance testing for web applications)nbutton = browser.find_by_xpath(//input[@type="submit"]).click()nnif browser.is_text_present(splinter.readthedocs):n print "Yes, the official website was found!"nelse:n print "No, it wasnt found... We need to improve our SEO techniques"nnbrowser.quit()n
翻譯計劃
上述的介紹是來自於我近期翻譯的 Splinter 中文文檔中快速上手部分,非常感謝 @一葉染秋 加入翻譯計劃。我們目前只是翻譯了一小部分,還有一些沒有翻譯,如果你想加入翻譯計劃可以給 Github 上的Splinter 中文文檔項目提交PR,翻譯前請先私信我你想翻譯的章節,避免大家重複翻譯。如果有翻譯不對或者不好的地方也歡迎大家多多提建議。
彩蛋
最早的時候大家都會使用 Phantomjs 來實現headless,但是多多少少會有一些不足的地方。現在 Chrome 和 Firefox 都已經提供了相應的 headless 模式,而且 Splinter 也已經集成。
from splinter import Browsernnbrowser = Browser(driver_name=chrome, headless=True)n# browser = Browser(driver_name=firefox, headless=True)n
通過一個簡單的參數即可啟用 headless 模式,趕快去試試吧!(Ps: 我為這個功能做了一點微小的工作)
參考
- Splinter 官方文檔
- Splinter 中文文檔
推薦閱讀:
※是否有智能爬蟲,即不需要會寫代碼,只要定義後就可以開始爬蟲了?
※啟信寶的查詢功能是如何實現的?
※怎樣利用數據爬取和分析工具寫出《黃燜雞米飯是怎麼火起來的》這樣的文章?
※為什麼學完慕課網上python的課程,感覺還是一無所知?
※一個爬蟲框架需要具備哪些功能?