Selenium Webdriver常用方法
阿新 • • 發佈:2022-05-04
目錄[-]
例項化方法
from selenium import webdriver
driver = webdriver.Chrome(executable_path='C:Program Files (x86)GoogleChromeApplicationchromedriver')
瀏覽器操作
- 瀏覽器最大化
driver.maximize_window()
- 設定瀏覽器寬高
driver.set_window_size(480, 800)
- 控制瀏覽器前進後退
driver.back()
driver.forward()
簡單物件定位
get_element_by_id() # id get_element_by_name() # name get_element_by_class_name() # class_name get_element_by_tag_name() # tag_name get_element_by_link_text() # link_text get_element_by_partial_link_text() # 部分link_text get_element_by_xpath() # xpath定位 get_element_by_link_text() # link_text find_element_by_css_selector() # css定位
操作Element物件
find_element_by_id("user_name").clear() # 清楚元素內容
find_element_by_id("user_name").send_keys("username") # 按鍵輸入
find_element_by_id("dl_an_submit").click() # 單機元素
find_element_by_id("dl_an_submit").submit() # 提交表單
- Element常用方法
driver.find_element_by_name('tj_trnews').size # 元素尺寸 driver.find_element_by_name('tj_trnews').text # 返回元素文字 driver.find_element_by_name('tj_trnews').get_attribute('class') # 獲取屬性值 driver.find_element_by_name('tj_trnews').is_displayed() # 是否使用者可見
滑鼠事件
from selenium.webdriver.common.action_chains import ActionChains el = driver.find_element_by_name('tj_trnews') # 目標元素 ActionChains(driver).context_click(el).perform() # 右擊目標元素 ActionChains(driver).double_click(el).perform() # 雙擊目標元素 source = driver.find_element_by_id('lg') # 目標元素原始位置 target = driver.find_element_by_id('kw') # 拖動的目標位置 ActionChains(driver).drag_and_drop(source, target).perform() # 拖動元素 ActionChains(driver).move_to_element(el).perform() # 滑鼠移動的目標元素上 ActionChains(driver).click_and_hold(el).perform() # 移動到目標元素按下滑鼠左鍵
鍵盤事件
from selenium.webdriver.common.keys import Keys
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("selenium") # 輸入框輸入內容
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) # 從後刪除一個字元(刪除鍵)
driver.find_element_by_id("kw").send_keys(Keys.SPACE) # 輸入空格
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') # ctrl + a 全選輸入框內容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x') # ctrl + x 剪下輸入框內容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v') # ctrl + v 貼上
driver.find_element_by_id("su").send_keys(Keys.ENTER) # 回車
設定等待時間
有時候網頁載入比較慢,如果程式沒有等待就可能出現定位不到的情況。
- 強制等待sleep() 強制等待比較暴力,呼叫time模組的sleep()方法強制讓程式等待。
- 隱性等待implicitly_wait() iimplicitly_wait()是設定了最大等待時間,如果在規定時間內載入完成,則繼續執行下面操作,否則一直等到時間截止再執行下一步。但是這種也有一個弊端,那就如果你需要的元素已經加載出來了,但是頁面整體還沒有載入完成,程式也會一直等待,也並不智慧。
- 顯性等待WebDriverWait() 它是需要傳入一個判斷條件的匿名函式,每隔一段時間去判斷條件函式,如果條件成立則繼續下一步,如果不成立則繼續等待。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
# 強制等待
time.sleep(5)
# 隱形等待
driver.implicitly_wait(30)
# 顯性等待
element=WebDriverWait(driver, 10).until(lambda driver:driver.find_element_by_id("kw")) # 當找到id為kw的元素時才執行下一步。超時時間為10秒,預設每0.5秒檢測一次。
定位frame中的物件
對於frame巢狀的網站,一般只能操作外層的元素,如果需要進入frame內層就需要呼叫switch_to.frame()方法。
driver.switch_to.frame()
frame方法接收三種引數:frame name、index 和webelement
driver.switch_to.frame('frame_name')
driver.switch_to.frame(1)
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
多視窗切換
要想在多個視窗之間切換,首先要獲得每一個視窗的唯一識別符號號(控制代碼)。通過獲得的控制代碼來區別分不同的視窗,從而切換不同窗。
driver.get("http://example.com") # 開啟一個視窗
now_handle = drvier.current_window_handle # 獲取當前視窗控制代碼
driver.find_element_by_name('example').click() # 點選某個元素開啟新的視窗(target="_black"的元素)
all_handle = drvier.window_handles # 獲取所有視窗控制代碼
drvier.switch_to.window(now_handle) # 切換為第一視窗
driver.close() # 關閉當前視窗
下拉框處理
webdriver處理下拉框首先定位到下拉框內容,然後click某個option即可
m=driver.find_element_by_id("ShippingMethod") # 首先定位到下拉框
m.find_element_by_xpath("//option[@value='10.69']").click() # 然後點選下拉框選項
執行JavaScrapt
driver.execute_script('Java Scrapt Code')
# 例如下拉瀏覽器滾動條
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
Cookie處理
webdriver可以對cookie進行讀取、增加、刪除
get_cookies() # 獲得所有 cookie 資訊
get_cookie(name) # 返回特定 name 有 cookie 資訊
add_cookie(cookie_dict) # 新增 cookie,必須有 name 和 value 值
delete_cookie(name) # 刪除特定(部分)的 cookie 資訊
delete_all_cookies() # 刪除所有 cookie 資訊