Python + Selenium(三)網頁元素定位(二)id 定位


了解了開發者工具HTML 結構 后,接下來,就來看看在 Python + Selenium 中如何查找元素了。

查找元素,是 WebDriver 中的核心部分之一。WebDriver提供了八種定位方法,方法如下:

定位方式 方法 說明
id find_element_by_id() 使用 id 屬性定位
name find_element_by_name() 使用 name 屬性定位
class_name find_element_by_class_name() 使用 class 屬性定位
tag_name find_element_by_tag_name() 使用標簽名定位
link_text find_element_by_link_text() 使用鏈接文本定位,只針對 a 標簽
partial_link_text find_element_by_partial_link_text() 使用部分鏈接文本定位
css_selector find_element_by_css_selector() 使用 css 選擇器語法定位
xpath find_element_by_xpath() 使用 xpath 語法定位

id、name、class name、tag name 使用的是元素的本身的一些特殊屬性標簽名;而link_text、partial_link_text使用的是文本定位,並且僅針對於鏈接地址。這六種定位方式,都是相對簡便的定位方式。

但是由於頁面操作的多樣性,很多時候想操作的元素並非都能找到這么合適的定位方式。所以,需要能夠在更加復雜的環境下的定位方式,在 WebDriver 中提供了兩種更加高級(復雜)的定位方式css selector、xpath

通過 css selector、xpath 可以使用更加復雜的定位方式,包括使用頁面元素層級定位和使用其他任意的屬性值等方式來定位。通過這兩種方式,可以定位到頁面上的任意位置。

id

HTML 規定id 屬性在 HTML 文檔中必須唯一,id 屬性可用於在 JavaScript
或CSS中針對給定 id 來改變 HTML 元素。id是一個類似身份證的概念,唯一性很強。

但是很多時候,id 並不是特別靠譜的存在:

  • HTML 對 id 的唯一性要求沒有從語法上限制,這就導致 id 不唯一也不會出問題,導致開發人員會忽略這種唯一性的要求,導致了 id 並不唯一;
  • 對於單選框radio button和復選框check box,一般由 id 相同的一組input的元素組成;
  • 由於前段框架的進化迭代,id 有了很多新的含義,比如根據規則或者隨機生成一些數字,導致每次打開同一個頁面時 id 都會變化。

以上三種情況,在使用 id 的時候需要注意辨別。

以百度為例:
在這里插入圖片描述
找到 百度一下 前面的輸入框的元素,其屬性 id="kw",這就是我們使用 id 定位需要的啦。

為了能看到效果,我們先加上一些簡單的操作方法send_keys()、click(),對於這些操作方法,后面會詳細講解

為了操作方便,建議大家在學習過程中,使用 IDLE 練習:
在這里插入圖片描述
這樣可以邊輸入邊查看,並且錯了也可以重新輸入,也可以在瀏覽器中直接操作,略過一些步驟。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://baidu.com")
driver.find_element_by_id("kw").send_keys("小滿測試")


免責聲明!

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



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