元素定位方式
Selenium提供了八种定位元素方式
1. id
2. class_name
3. tag_name
4. name
5. link_text
6. partial_link_text
7. XPath
8. CSS
id定位
driver.find_element(By.ID,"")
说明:
id
定位就是通过元素的
id
属性来定位元素,
HTML
规定
id
属性在整个
HTML
文档中必须是唯一的;
前提:元素有
id
属性
# 1. 导入selenium包
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
# 2. 实例化浏览器驱动对象
driver = webdriver.Chrome()
#窗口最大化
driver.maximize_window()
# 3.输入url
driver.get('http://www.baidu.com')
element = driver.find_element(By.ID,"kw")
element.send_keys("selenium")
# 4.浏览器暂停3秒
sleep(3)
driver.quit()
Class_Name定位
driver.find_element(By.CLASS_NAME,"")
通过元素的class_name属性来定位元素。
所要定位的元素必须有class类名属性。
如果标签有多个class值,使⽤任何⼀个都可以
driver.find_elements(By.CLASS_NAME,"")[下标]
#1.导包
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
#2.实例化浏览器驱动对象
driver = webdriver.Chrome()
#3.输入url
driver.get("https://www.bilibili.com/")
#4.根据calss_name定位并输入2024新年快乐
driver.find_element(By.CLASS_NAME,"nav-search-input").send_keys("2024新年快乐")
#5.定位搜索按钮并点击
driver.find_element(By.CLASS_NAME,"nav-search-btn").click()
sleep(5)
driver.quit()
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.bilibili.com/")
# for ele in driver.find_elements(By.CLASS_NAME,"channel-link"):
# print(ele.text)
driver.find_elements(By.CLASS_NAME,'channel-link')[4].click()
sleep(5)
driver.quit()
Tag_name 定位
driver.find_element_by_tag_name(标签名)
通过元素的标签名来定位元素。
如果⻚⾯存在多个相同标签,默认返回第⼀个。
特点:重复性高,不建议使用
#1.导包
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
#2.实例化浏览器驱动对象
driver = webdriver.Chrome()
#3.输入url
driver.get("https://www.bilibili.com/")
#4.根据Tag_name定位并输入2024新年快乐
driver.find_element(By.TAG_NAME,"input").send_keys("学习python")
sleep(3)
driver.quit()
Name定位
driver.find_element_by_name(name属性值)
通过元素的name属性来定位元素。所要定位的元素必须有name属性
当前页面可以重复
由于name属性值可以重复,所以使⽤时需要查看是否为唯⼀
#1.导包
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
#2.实例化浏览器驱动对象
driver = webdriver.Chrome()
#3.输入url
driver.get("https://www.baidu.com/")
#4.根据name定位并输入2024新年快乐
driver.find_elements(By.NAME,"wd")[0].send_keys("2024新年快乐")
sleep(5)
driver.quit()
link_text 定位
driver.find_element(By.LINK_TEXT,"")
专门用来定位超链接元素(<a></a>标签)
driver.find_element_by_link_text(超链接的全部文本内容)
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
driver.get("https://www.baidu.com/")
driver.find_element(By.LINK_TEXT,"新闻").click()
sleep(3)
partial_link_text 定位
driver.find_element(By.PARTIAL_LINK_TEXT,"")
使用局部文本来定位元素,从字符串任意位置开始,一截连续字符集。
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
driver.get("https://www.baidu.com/")
driver.find_element(By.PARTIAL_LINK_TEXT,"新").click()
sleep(3)
CSS定位
#根据ID定位 driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("ww") # driver.find_element(By.CSS_SELECTOR,"#su").click() #根据class属性值定位 # driver.find_element(By.CSS_SELECTOR,".nav-search-input").send_keys("新年快乐") # driver.find_element(By.CSS_SELECTOR,".nav-search-btn").click() #根据name属性定位 # driver.find_element(By.CSS_SELECTOR,"[name='wd']").send_keys("新年快乐") # driver.find_element(By.CSS_SELECTOR,".nav-search-btn").click() #根据标签属性定位 # driver.find_element(By.CSS_SELECTOR,"a[href='https://pan.baidu.com?from=1026962h']").click() #模糊匹配 # driver.find_element(By.CSS_SELECTOR,"a[href*='an.baidu.com?from=1026962h']").click() #匹配开头 # driver.find_element(By.CSS_SELECTOR,"a[href*='https://pan.baidu.com?from=1']").click() #匹配结尾 # driver.find_element(By.CSS_SELECTOR,"a[href$='https://pan.baidu.com?from=1026962h']").click() #组合定位 # driver.find_element(By.CSS_SELECTOR,"input.s_ipt").send_keys("selenimu")
XPATH定位
driver.find_element(By.XPATH,'')
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
driver.find_element(By.XPATH,'/html/body/div/div/div[3]/a[3]').click()
sleep(3)
driver.quit()
#绝对路径 # driver.find_element(By.XPATH,'/html/body/div/div/div[3]/a[3]').click() #根据ID定位 # driver.find_element(By.XPATH,'//input[@id="kw"]').send_keys("selenium") #根据CLASS定位 # driver.find_element(By.XPATH,"//input[@class='s_ipt']").send_keys("selenium") #根据name定位 # driver.find_element(By.XPATH,"//input[@name='wd']") #多个属性组合定位 # driver.find_element(By.XPATH,"//input[@name='wd' and @class='s_ipt']").send_keys("selenium") #根据多组数据使用下标定位 # driver.find_element(By.XPATH,"//div[@id='s-top-left']/a[4]").click() #根据SPAN文本内容定位 # driver.find_element(By.XPATH,"//span[contains(text(),'一图')]").click() #根据同级弟弟定位 # driver.find_element(By.XPATH,"//a[contains(text(),'贴吧')and @class = 'mnav c-font-normal c-color-t']/following-sibling::a").click()