8種元素定位方法
定位方法 | python中對應的方法 |
---|---|
id | find_element_by_id() |
name | find_element_by_name() |
tag | find_element_by_tag_name() |
class | find_element_by_class_name() |
link_text | find_element_by_link_text() |
partrial link | find_element_by_partrial_link_text() |
XPath | find_element_by_xpath() |
CSS_selector | find_element_by_css_selector() |
以百度為例
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
id定位
- id在html中唯一
- id定位方法是通過元素的id來定位元素
find_element_by_id("kw")
name定位
- name在html中用來指定元素的名稱
- name定位是通過元素的name來定位元素
find_element_by_name("wd")
tag定位
- html中,通過tag來定義不同頁面的元素,如input用來定義輸入框
- tag定位是通過元素的標簽名來定位元素
find_element_by_tag_name("input")
class定位
- class在html中用來指定元素的類名
- class定位是通過元素的class來定位元素
find_element_by_class("s_ipt")
link_text定位
- link_text定位是專門用來定位文本鏈接
- link_text定位是通過元素標簽對之間的文字信息來定位元素
<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">新聞</a>
find_element_by_link_text("新聞")
partrial link定位
- partrial link是對link定位的補充,有些文件鏈接比較長,可以取文字鏈接的部分文字進行定位,只要這個部分文字可以唯一表示這個鏈接
- partrial link定位是通過元素標簽對之間的部分文字信息來定位元素
<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">一個很長的文本鏈接</a>
find_element_by_partrial_link_text("文本鏈接")
XPath定位
絕對路徑定位
- 用標簽名的層級關系來定位元素的絕對路徑。F12可復制
find_element_by_xpath("/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input")
元素屬性定位
- 用元素的屬性來定位。F12可復制
find_element_by_xpath(//*[@id="kw"])
CSS_selector定位
以百度為例
<span class="soutu-btn">
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
</span>
通過class定位
find_element_by_css_selector(".s_ipt")
"."表示通過通過class定位元素
通過id定位
find_element_by_css_selector("#kw")
"#"表示通過通過id定位元素
通過標簽名定位
find_element_by_css_selector("input")
用標簽名定位時需要任何符號標識,直接使用標簽名
通過標簽層級關系定位
find_element_by_css_selector("span > input")
查找span中所有標簽為input的子元素
通過屬性定位
find_element_by_css_selector("[name='wd']")
使用元素的屬性定位,如name,只要這個屬性能唯一標識這個元素
組合定位
find_element_by_css_selector("span > input#wd")
查找span中所有標簽為input的子元素,並且元素的name屬性為wd
注:
- 理想情況下,元素都有唯一的id和name,通過他們來定位即可。但大多數情況下沒有id、name,或屬性重復,這種情況下需要XPath、CSS定位。
- Xpath和CSS比較,CSS語法更加簡潔,但是理解和使用難度大,但定位速度比XPath快。這兩種方法掌握一種即可解決大部分定位問題。
find_element和find_elements區別
-
只查找一個元素的時候:可以使用find_element(),find_elements()
find_element()會返回一個WebElement節點對象,但是沒找到會報錯,而find_elements()不會,會返回一個空列表 -
查找多個元素的時候:只能用find_elements(),返回一個列表,列表里的元素全是WebElement節點對象
-
如果想要獲取元素的相關內容(只對find_element()有效,列表對象沒有這個屬性) 使用 .text;
-
如果想要獲取元素相關屬性的值(如href對應的鏈接等,只對find_element()有效,列表對象沒有這個屬性):使用 .get_attribute("href")