每個標簽都有不同的屬性,其中有一個屬性為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'))