元素定位
webdriver提供了一系列的元素定位方法
元素 | webdriver中的方法 |
id | find_element_by_id() |
name | find_element_by_name() |
class name | find_element_by_class_name() |
tag name | find_element_by_tag_name() |
link text | find_element_by_link_text() |
partial link text | find_element_by_partial_link_text() |
xpath | find_element_by_xpath() |
css selector | find_element_by_css_selector() |
id元素定位(根据标签的id定位)
示例:百度搜索框
F12查找到页面元素为以下html代码,查找id="kw"的元素
#coding:utf-8
from selenium import webdriver
import time
# 百度搜索selenium
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_id("kw").send_keys("selenium") # id 定位输入框元素
driver.find_element_by_id("su").click() # id 定位"百度一下"元素
time.sleep(3)
driver.quit()
name元素定位(根据标签的name定位)
示例:百度搜索框
F12查找到页面元素,name="wd"
from selenium import webdriver
import time
# 百度搜索
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_name("wd").send_keys("selenium") # name 定位输入框元素
driver.find_element_by_id("su").click() # id 定位"百度一下"元素
time.sleep(3)
driver.quit()
xpath元素定位
示例:百度搜索框
一般的正常copy-xpath就可以了,但是copy不能保证百分百准确,我们也可以手写xpath,写好可以在下方搜索一下
from selenium import webdriver
import time
# 百度搜索
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_xpath("//form/span/input[@id='kw']").send_keys("selenium") # xpath 定位输入框元素
driver.find_element_by_xpath("//form/span/input[@id='su']").click() # xpath 定位"百度一下"元素
time.sleep(3)
driver.quit()
class name 定位
示例:百度搜索框(按class属性的值来定位用class_name)
一般class_name会定位到多个是要注意的点
from selenium import webdriver
import time
# 百度搜索
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_class_name("s_ipt").send_keys("selenium") # class name 定位输入框元素
driver.find_element_by_class_name("bg s_btn").click() # class name 定位"百度一下"元素
time.sleep(3)
driver.quit()
link text定位
link text用来定位文本链接,如通过在百度首页点击'新闻'、'地图'等都可以进入到对应的页面,因此可以用link进行定位:
示例:百度首页“新闻”链接
from selenium import webdriver
import time
# 点击百度首页“新闻”标签
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_link_text("新闻").click()
time.sleep(3)
driver.quit()
partial link text定位
partial link text定位方式为link text的一个补充,当文件链接过长时,部分匹配定位
如以下链接过长定位时只需要截取一部分即可
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">这是全世界全球最关注的新闻</a>
driver.find_element_by_partial_link_text("关注的新闻").click()
css selector定位(不太常用)
css Selector定位实际就是HTML的css选择器的标签定位
用css定位就不需要从最上面一层开始定位了,可以从当前层最近的容易定位的元素(class或者id)开始。
示例:百度搜索框(百度一下这个按钮)
id和class原理一样,#id和.class
#coding:utf-8
from selenium import webdriver
import time
# css Selecto选择器定位
# id选择器:#id;
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_css_selector("#kw").send_keys("selenium")
driver.find_element_by_css_selector("#su").click()
time.sleep(3)
driver.quit()
# class选择器:.class
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_css_selector(".s_ipt").send_keys("selenium")
driver.find_element_by_css_selector(".btn self-btn bg s_btn").click()
time.sleep(3)
driver.quit()
tag name定位(很不常用,不好定位)
当要定位一组元素相同元素时,可以考虑用tagName或name。
总结
当页面元素有id属性时,最好尽量用id来定位。
当要定位一组元素相同元素时,可以考虑用tagName或name。
当有链接需要定位时,可以考虑linkText或partialLinkText方式。
xpath定位用的较多,可以直接复制也可以自己写