最近遇到一個問題就是,如何模擬真實瀏覽器行為然后截取顯示的網頁。
方案
- 模擬登陸網站或者直接使用cookie登陸。
- 對指定頁面按鈕進行點擊刷新頁面,截取網頁。
我們使用selenium庫來操作瀏覽器驅動,即執行瀏覽器相應的驅動命令,實現相應的瀏覽器操作。
准備工作
- selenium庫
瀏覽器自動化測試框架,其作用是通過操作瀏覽器驅動來控制瀏覽器行為,達到模擬真實用戶操作瀏覽器的效果。原理為自動化測試python腳本-->瀏覽器driver -->瀏覽器。官網 python中文文檔 python官方文檔
python安裝
pip install -U selenium 安裝並更新
-
瀏覽器驅動
selenium需要下載對應的瀏覽器驅動才能操作計算機中已經安裝好的瀏覽器。下載對應驅動版本exe文件后,將其放入python安裝路徑的scripts目錄即可,注意驅動版本要和瀏覽器版本匹配。
chrome驅動: 下載地址 備用地址 -
Phantomjs瀏覽器
它是基於webkit瀏覽器的無頭瀏覽器,下載安裝完成並設置系統環境變量。selenium支持直接調用。官方下載地址。截圖的圖片為長圖(網頁全部展開)。
使用方法
以chrome瀏覽器為例
- 簡單用例
from selenium import webdriver #導入驅動模塊
driver =webdriver.Chrome() #創建相應瀏覽器驅動對象
driver.get("http://www.baidu.com") #使用驅動對象打開網站
- 操作cookie
cookie = {‘name': foo', 'value': 'bar’}
driver.add_cookie(cookie)
driver.get_cookies()
- 獲取元素
已知元素定義
<input type="text" name="passwd" id="passwd-id" />
可以通過以下方法獲取元素
element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element.find_elements_by_tag_name("option")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")
- 輸入內容
element.send_keys("some text")
element.send_keys(" and some", Keys.ARROW_DOWN) 使用Keys類來模擬輸入方向鍵
element.clear() 清除文本內容
element.click() 點擊
-
等待頁面加載完成
-
處理對話框
alert = drvier.switch_to_alert()
- 關閉瀏覽器
driver.quit() #關閉這個瀏覽器
driver.close() #關閉當前界面
- 截取網頁圖片
driver.save_screenshot('1.png')