Python3爬蟲(十三) 爬取動態頁之Selenium


 Infi-chu:

http://www.cnblogs.com/Infi-chu/

Python提供了很多模擬瀏覽器運行的庫,比如:Selenium、Splash等

1.常用的引用

from selenium import webdriver
from selenium.webdriver.commom.by import By
from selenium.webdriver.commom.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

2.常用聲明瀏覽器對象

browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()

3.訪問頁面
使用get()方法

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('http://www.baidu.com')
print(browser.page_source)
browser.close()

4.查找節點
單個節點

find_element_by_name()	# 根據name值獲取
find_element_by_id()	# 根據id值獲取
find_element_by_xpath()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_tag_name()
find_element_by_class_name()
find_element_by_css_selector()	# 根據css選擇

# 另外一種寫法
find_element(By.ID,id)等價於find_element_by_id(id)

多個節點
使用find_elements()方法

find_elements_by_name()	# 根據name值獲取
find_elements_by_id()	# 根據id值獲取
find_elements_by_xpath()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_tag_name()
find_elements_by_class_name()
find_elements_by_css_selector()	# 根據css選擇

5.節點交互
所謂節點交互,可以理解成為你讓瀏覽器去執行一些動作,比如在輸入框輸入文字、點擊提交按鈕等。
輸入文字時使用send_keys()方法
清空文字時使用clear()方法
點擊按鈕時使用click()方法

6.動作鏈
動作鏈是擴展版本的節點交互,節點交互是一瞬間的動作,而動作鏈是持續性的動作,比如:拖動某個圖片等

# 鼠標拖拽
from selenium import webdriver
from selenium.webdriver import ActionChains

browser = webdriver.Chrome()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult')
source = brower.find_element_by_css_selector('#draggable')
target = brower.find_element_by_css_selector('#draggable')
actions = ActionChains(brower)
actions.drag_and_drop(source,target)	# drag_and_drop()方法指定區間
actions.perform()    # perform()方法讓動作執行

7.執行JavaScript
使用execute_script()方法,參數是JavaScript語法

8.獲取節點信息
獲取屬性
使用get_attribute()方法獲得屬性,前提需選中該節點

獲取文本值
通過text屬性獲得,前提需要選中該節點

獲取id、位置、標簽和大小
使用id屬性可以獲得id
使用location屬性可以獲得location
使用tag_name屬性可以獲得tag_name
使用size屬性可以獲得size

9.延時等待
隱式等待
當查找節點時,節點並沒有立即出現,則等待一段時間再查找DOM,默認時間時0

顯式等待
指定要查找的節點,並指定最長等待時間,如果在此時間段內加載出來該節點,則返回查找結果;否則拋出異常

等待條件及含義

等待條件                                        含義
title_js	                          	標題是某一內容
title_contains	                         	標題包含某內容
presence_of_element_located	                  	節點加載出來,傳入定位元組,如(By.ID,'p')
visibility_of_element_located	                	節點可見,傳入定位元祖
visibility_of	                        	可見,傳入節點對象
presence_of_all_element_located	              	所有節點加載完成
text_to_be_present_in_element	                	某個節點文本包含某文字
text_to_be_present_in_element_value	                某個節點值包含文字
frame_to_be_available_and_switch_to_it	           	加載並切換
invisibility_of_element_located	                      節點不可見
element_to_be_clickable	                     	節點可點擊
staleness_of	                         	判斷一個節點是否仍在DOM,可判斷頁面是否已經刷新
element_to_be_selected	                             節點可選擇,傳節點對象
element_located_to_be_selected	                 	節點可選擇,傳入元組對象
element_selection_state_to_be	               	傳入節點對象以及狀態,相等返回True,否則False
element_located_selection_state_to_be	           	傳入定位元組及狀態,相等返回True,否則False
alert_is_present	                           是否出現警告

10.前進、后退
back()方法為后退
forward()方法為前進

11.cookies操作
get_cookies()方法獲得cookies信息
add_cookies()方法添加cookies信息
delete.all_cookies()方法刪除所有cookies信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM