Selenium和PhantomJS 終極最全使用總結
PhantomJS 和 Chromedriver操作方式以及功能一致
主要區別 PhantomJS 無介面模式 節省記憶體
Chromedriver 完全模仿瀏覽器 消耗記憶體
PhantomJS 擷取的是網頁的完整頁面,包括下拉進度條的內容
Chromedriver只擷取彈框瀏覽器的視覺化內容頁面
- 檢視請求資訊
driver.page_source # 檢視網頁原始碼
driver.get_cookies() # # 獲取當前瀏覽器的全部cookies
driver.current_url # 獲取當前頁面的url
- 退出
driver.close() #退出當前頁面, 但瀏覽器還在
driver.quit() #退出瀏覽器
-
定位和操作
模仿瀏覽器開啟百度並搜尋關鍵詞python
主要利用定位 填充關鍵詞 點選搜尋按鈕
001 先找到文字輸入框元素,輸入內容
002 找到搜尋按鈕 進行搜尋
獲取屬性值:element.get_attribute("href")
給輸入框賦值: element.send_keys()
操作點選事件: element.click()
find_element和find_elements的區別
帶s的返回的是列表
不帶s的是返回列表中的第一個元素
selenium處理cookie
新增Cookie
driver.add_cookie({'name':'xxxx','value':'xxxxxxxxxxx'})
重新整理頁面
driver.refresh()
頁面等待 :https://www.jianshu.com/p/835bd3e96f5b
01 強制等待
time.sleep(10) 強制要求在時間內出現,否則報錯,不能很好的控制時間,浪費資源
02 隱示等待
隱性等待對整個driver的週期都起作用,所以只要設定一次即可
隱形等待是設定了一個最長等待時間,如果在規定時間內網頁載入完成,則執行下一步,否則一直等到時間截止,然後執行下一步。
driver.implicitly_wait(30) # 隱性等待,最長等30秒
03 顯示等待
WebDriverWait(driver, 超時時長, 呼叫頻率, 忽略異常).until(可執行方法, 超時時返回的資訊)
這裡需要特別注意的是until或until_not中的可執行方法method引數,很多人傳入了WebElement物件,如下:
WebDriverWait(driver, 10).until(driver.find_element_by_id('kw')) # 錯誤
這是錯誤的用法,這裡的引數一定要是可以呼叫的,即這個物件一定有 call() 方法,否則會丟擲異常:
TypeError: 'xxx' object is not callable
selenium執行js程式碼
js = 'window.scrollTo(0,document.body.scrollHeight)' # js語句
driver.execute_script(js) # 執行js的方法
通過執行js來新開一個標籤頁
js = 'window.open("https://www.sogou.com");'
driver.execute_script(js)
time.sleep(1)
switch方法切換的操作
01視窗切換
# 1. 獲取當前所有的視窗
current_windows = driver.window_handles
# 2. 根據視窗索引進行切換
driver.switch_to.window(current_windows[1])
切換iframe
iframe是html中常用的一種技術,即一個頁面中巢狀了另一個網頁,selenium預設是訪問不了frame中的內容的,對應的解決思路是
driver.switch_to.frame()
思路:先定位並切換至iframe內,再進行你安排前元素操作 最後可通過切換至視窗,從iframe中切換出iframe 進入到頁面
login_frame = driver.find_element_by_id('login_frame') # 定位frame元素
driver.switch_to.frame(login_frame) # 轉向到該frame中
alert彈框處理
當你觸發了某個事件之後,頁面出現了彈窗提示,處理這個提示或者獲取提示資訊方法:driver.switch_to.alert() # 跟frame一樣的處理方式!
頁面前進和後退
driver.forward() # 前進
driver.back() # 後退
selenium 三大重要功能
無介面模式
更換UA
使用代理IP
三個可以同時使用
selenium的優缺點
• selenium能夠執行頁面上的js,對於js渲染的資料和模擬登陸處理起來非常容易
• selenium由於在獲取頁面的過程中會傳送很多請求,所以效率非常低,所以在很多時候需要酌情使用
相關文章
- selenium和PhantomJS概述JS
- Python網路爬蟲 - Phantomjs, selenium/Chromedirver使用Python爬蟲JSChrome
- 使用selenium和phantomJS瀏覽器獲取網頁內容的小演示JS瀏覽器網頁
- Python爬蟲教程-26-Selenium + PhantomJSPython爬蟲JS
- python利用selenium+phantomJS爬淘寶PythonJS
- Python Selenium+PhantomJs 爬煎蛋妹子圖PythonJS
- spark structured-streaming 最全的使用總結SparkStruct
- Python+Selenium+phantomjs實現網頁模擬登入和截圖PythonJS網頁
- 最全Drawable基礎總結
- 最全JavaScript基礎總結JavaScript
- 年終總結
- 全網最全python庫selenium自動化使用教程Python
- selenium之xpath語法總結
- Flutter 裁剪類元件 最全總結Flutter元件
- Linux終端回話記錄和回放工具 - asciinema使用總結LinuxASCII
- 如何使用Mechanize::PhantomJS庫JS
- 0、Java集合體繫結構—最全總結Java
- 2018 年終總結
- 2023年終總結
- 年終總結-2019
- 2019年終總結
- 2018年終總結
- 2021年終總結
- 2022 年終總結
- 2021 年終總結
- 2022年終總結
- 2020年終總結
- 年終總結 - 2020
- 2020 年終總結
- 【最全】Java 進階面試總結Java面試
- 最全總結 JavaScript Array 方法詳解JavaScript
- NodeJS使用PhantomJs抓取網頁NodeJS網頁
- 2016年終工作總結
- 我的年終總結
- 年終總結2020年
- C++ 序列操作函式最全總結C++函式
- PHP設計模式學習最全總結PHP設計模式
- Vue的使用總結和技巧Vue