Selenium 定位元素的方法


每個標簽都有不同的屬性,其中有一個屬性為id

 

 標簽中的ID就相當於元素的編號,是用來標記該元素的,根據規范,如果元素有

ID屬性,這個ID必須是當前html中唯一的。

所以個人元素有ID,根據ID選擇元素是最簡單高效的方式。

這里,百度搜索框元素的ID值為 kw

可以用代碼 實現自動化在瀏覽器中訪問百度,並且輸入框中搜索內容

from selenium import webdriver  # 導包
# 實例化瀏覽器 如果為空就是是用的項目根目錄的Chrome驅動
borwser = webdriver.Chrome()
# 請求網址
borwser.get('http://www.baidu.com')
# print(borwser.page_source) # 獲取網頁源碼
# 根據ID定位並 返回是該元素webelement對象***
ele = borwser.find_element_by_id('kw')
# 可以通過webelement對象 就要對元素操作了 例如輸入字符串
ele.send_keys('老祝頭')
borwser.find_element_by_id('su').click() # 點擊搜索

根據class屬性,tag名 選擇元素

web自動化的重點之一,就是如何選擇我們想要操作的web頁面元素。

除了根據元素id,我們還可以根據元素的class屬性選擇元素

實例網址:http://f.python3.vip/webauto/sample1.html

 

 所有植物元素都有class屬性 值為 plant  代表類別

 所有植物元素都有class屬性 值為 plant  代表類別

 如果要選擇所有動物或植物 就可以使用 find_elements_by_class_name()

 因為 定位class_name 一般為多個 所以element 是復數形式 加 s

注意:

find_elements_by_class_name() 方法返回的是找到符合條件的所有元素,放在一個列表中返回。

如果使用 find_element_by_class_name() 不加s方法,就只會返回第一個元素

實例代碼:

from selenium import webdriver  # 導包
# 實例化瀏覽器 如果為空就是是用的項目根目錄的Chrome驅動
borwser = webdriver.Chrome()
# 請求網址
borwser.get('http://f.python3.vip/webauto/sample1.html')
# 根據class name 選擇元素 返回的是列表***
ele = borwser.find_elements_by_class_name('plant')
# 取出列表中每個 webelement對象中的文本內容
for i in ele:
print(i.text)

element 和elements的區別

使用find_elements選擇的是符合條件的所有元素,如果沒有符合條件的元素返回的是空列表

使用find_element選擇的是符合條件的第一個元素,如果沒有符合條件的元素,拋出異常

 通過WebElement對象選擇元素

不僅 WebDriver對象有選擇元素的方法,WebElement 對象也有選擇元素的方法

WebElement對象 也可調用 find_elements_by_xxx, find_element_by_xxx之類的方法

WebDriver對象選擇元素的范圍是整個web頁面,而

WebElement對象選擇的范圍是該元素的內部。

代碼示例:

from selenium import webdriver  # 導包
# 實例化瀏覽器 如果為空就是是用的項目根目錄的Chrome驅動
borwser = webdriver.Chrome()
# 請求網址
borwser.get('http://f.python3.vip/webauto/sample1.html')
# 定位父節點id
ele = borwser.find_element_by_id('container')

# 取出父節點id為container下所有標簽名的元素 span標簽***
spans = ele.find_elements_by_tag_name('span')

# 取出列表中每個 webelement對象中的文本內容
for i in spans:
print(i.text)

 獲取元素屬性

有時候界面元素不會把我們想要的數據放在標簽內部,而是放在標簽的屬性上

可以通過WebElement對象的get_attribute 方法來獲取元素的屬性值

如獲取元素屬性class的值,就可以使用element.get_attribute('class')

實例代碼:

from selenium import webdriver  # 導包
# 實例化瀏覽器 如果為空就是是用的項目根目錄的Chrome驅動
borwser = webdriver.Chrome()
# 請求網址
borwser.get('https://www.baidu.com')
# 隱式等待 每隔半秒請求
borwser.implicitly_wait(10)

ele = borwser.find_element_by_id('kw')
ele.send_keys('老祝頭博客園')
cl = borwser.find_element_by_id('su').click()

eles = borwser.find_element_by_id('1')
# 打印第一個搜索結果的文本字符串
print(eles.text)

# 獲取規定標簽下的某一屬性的值***
print(eles.get_attribute('srcid'))

# 執行完成可以退出瀏覽器驅動
borwser.quit()

獲取整個標簽版本作用域下的所有html

要獲取整個元素對應的HTML文本內容,可以使用 element.get._attribute('outerHTML')

而 只獲取某個元素內部的HTML文本內容 用 element.get_attribute('innerHTML')

實例代碼:

eles = borwser.find_element_by_id('1')
# 打印第一個搜索結果的文本字符串
print(eles.text)

# 只獲取內部的html
print(eles.get_attribute('innerHTML'))


免責聲明!

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



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