Selenium Webdriver查找頁面元素及元素操作


1. Selenium WebDriver查找頁面元素及元素操作

1.1. 元素常用定位方法

 Id  name  classname  xpath

  1. 通過id定位元素:find_element_by_id("id_vaule")
  2. 通過name定位元素:find_element_by_name("name_vaule")
  3. 通過tag_name定位元素:find_element_by_tag_name("tag_name_vaule")
  4. 通過class_name定位元素:find_element_by_class_name("class_name")
  5. 通過css定位元素:find_element_by_css_selector();css定位是比較靈活的
  6. 通過xpath定位元素:find_element_by_xpath("xpath")
  7. 通過link_text定位driver.find_element_by_link_text("新聞").click()
  8. 通過partial link_text 定位:driver.find_element_by_partial_link_text("").click()

 

1.1. 定位分類總結

 

  1. Idnameclass name:為元素屬性定位
  2. tag_name:為元素標簽
  3. link text partial link text:為超鏈接定位(a標簽)
  4. Xpath:為元素路徑
  5. Css :為css元素選擇器定位

1.1. 定位元素

 

 

 

下面是百度輸入框的html代碼,可以通過firebug或者谷歌的審查元素得:

<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">

 

 

1.1.1. 通過id定位

 

則百度的輸入框即可表示為:find_element_by_id(kw1)

 

1.1.2. 通過name定位:

 

則可以表示為:find_element_by_name(wd)

 

1.1.3. 通過class_name定位元素:

 

driver.find_element_by_class_name("s_ipt")

 

 

1.1.1. 通過tag_name定位:

 

input其實就是tag_name(標簽名),

 

同樣也可以表示成:find_element_by_tag_name("input")

 

返回:符合條件的第一個標簽

 

可見僅僅通過標簽名去定位時,一般一種標簽在一個頁面里面會出現不止一次甚至大量出現,這種定位方式的作用不是很大,所以用的也就比較少

 

1.1.2. 通過css定位元素:

 

Id>類選擇器>標簽選擇器

 

cssSelector這種元素定位方式跟xpath比較類似,但執行速度較快,而且各種瀏覽器對它的支持都相當到位

 

一般class是用.標記,id是用#標記,標簽名直接寫具體標簽名就好

 

find_element_by_css_selector("#su")

 

find_element_by_css_selector(".s_ipt")

 

find_element_by_css_selector("[name=wd]"

 

 

1.1.1. 通過xpath定位元素:

 

XPath是一種在XML文檔中定位元素的語言。因為HTML可以看做XML的一種實現,所以selenium用戶可是使用這種強大語言在web應用中定位元素。

 

XPATH的值可以通過firebug或者谷歌的審查元素中:

 

右鍵功能:復制XPATH即可獲得。

 

例子:

 

driver.find_element_by_xpath(".//input[@id='kw']")

 

driver.find_element_by_xpath(".//*[@id='kw']")

 

其中的標簽名input也可以用*來代替,而且只要是在該標簽內,任意屬性都可以

 

 

1.1.1. 通過link_textpartial_link_text定位:

 

這兩種定位方式是專門用於定位超鏈接的,也就是對應html頁面中的<a>標簽,括號里傳的值就是a標簽中的超鏈接文字,兩者的區別在於一個是完整的超鏈接文字,一個是可以只寫部分超鏈接文字。

 

 

比如點擊百度首頁中右上角的新聞超鏈接,可以這樣去定位:

 

driver.find_element_by_link_text("新聞").click()

 

driver.find_element_by_partial_link_text("").click()

 

 

 

鼠標事件和鍵盤事件

 

https://www.cnblogs.com/mashuqi/p/10442150.html

 

1.1. 簡單元素操作

clear()清除文本

send_keys(*value) 模擬按鍵輸入

click()單擊元素

size  返回元素的尺寸

text 獲取元素的文本

get_attribute(name)獲取屬性值

 

is_displayed()設置該元素是否可見 判斷元素是否可見 是否可用 is_enable()

selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of <a class="mnav" href="http://news.baidu.com" name="tj_trnews"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed

1. 鍵盤事件---(了解)

 

 send_keys()模擬鍵盤輸入

from selenium.webdriver.common.keys import Keys

 

 send_keys(Keys.BACK_SPACE) 刪除鍵

  * send_keys(Keys.SPACE) 空格鍵(Space)

  * send_keys(Keys.TAB) 制表鍵(Tab)

  * send_keys(Keys.ESCAPE) 回退鍵(Esc

  * send_keys(Keys.ENTER) 回車鍵(Enter

  * send_keys(Keys.CONTROL,'a') 全選(Ctrl+A

  * send_keys(Keys.CONTROL,'c') 復制(Ctrl+C

  * send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X

  * send_keys(Keys.CONTROL,'v') 粘貼(Ctrl+V

  * send_keys(Keys.F1) 鍵盤 F1

  ……

  * send_keys(Keys.F12) 鍵盤 F12

1. 設置元素等待

Selenium顯示等待和隱式等待的區別
1、selenium的顯示等待
原理:顯示等待,就是明確的要等到某個元素的出現或者是某個元素的可點擊等條件,等不到,就一直等,除非在規定的時間之內都沒找到,那么久跳出Exception
(簡而言之,就是直到元素出現才去操作,如果超時則報異常)

2、selenium的隱式等待
原理:隱式等待,就是在創建driver時,為瀏覽器對象創建一個等待時間,這個方法是得不到某個元素就等待一段時間,直到拿到某個元素為止。

注意:在使用隱式等待的時候,實際上瀏覽器會在你自己設定的時間內部不斷的刷新頁面去尋找我們需要的元素

3、笨方法等待(死等)
使當前線程進入等待,time.sleep();這種等待屬於死等,很容易讓線程掛掉,使程序拋異常,所以要慎用此方法

1.1. 顯式等待

element=WebDriverWait(driver,timeout, poll_frequency=0.5,ignored_exceptions=None).until(

        EC.presence_of_element_located((By.ID, "kw"))

)

driver  瀏覽器驅動

timeout  最長超時時間  默認以秒為單位

 poll_frequency=0.5  步長

ignored_exceptions 超時后的異常信息  默認拋noSuchElementException

EC.presence_of_element_located((By.ID, "kw")) 判斷元素是否被加載在dom樹中,不代表他一定可見。

 

1.1. 隱式等待

含義:通過一定時長等待,如果超出設置的時長元素還沒有被加載,拋出NosuchException.

# 設置隱式等待為 10

driver.implicitly_wait(10)

1.1. sleep休眠方法

Time.sleep(1)

1. 瀏覽器的基本操作

選擇瀏覽器: driver = webdriver.Firefox()

打開url: driver.get(self.base_url + " www.baidu.com")

前進/后退: driver.forward()/driver.back()

刷新: driver.refresh()

最大化:browser.maximize_window()

返回當前頁面標題:print(driver.title)

返回當前頁面urlprint(driver.current_url)

返回當前瀏覽器的所有窗口:driver.window_handles

返回當前瀏覽器的窗口句柄:driver.current_window_handle

選擇窗口: driver.switch_to_window(window_name)

對話框操作: driver.switch_to_alert() #選擇窗口對象

#瀏覽器最大化

driver.maximize_window()

#設置瀏覽區寬高

driver.set_window_size(480, 800)

截取當前頁面: driver.get_screenshot_as_file("C:/Users/Administrator/Desktop/selenium/baidu.png")

關閉瀏覽器: driver.quit()/driver.close()

 


免責聲明!

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



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