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信息
