元素定位
当我们想让 Selenium 自动地操作浏览器时,就必须告诉 Selenium 如何去定位某个元素或一组元素,每个元素都有着不同的标签名和属性值,Selenium 提供了以下 8 种定位元素的方式,每种方式对应了 2 个方法:find_element_by_(),是用来定位单个元素的,find_elements_by_(),是用来定位多个元素的。
通过 id 定位
通过 name 定位
通过 class 定位
通过 tag 定位
通过 link 定位
通过 partial link 定位
通过 xpath 定位
通过 css 选择器定位
下面以百度首页为例进行举例说明:
(一)通过 id 定位
find_element_by_id(id)find_elements_by_id(id)
# _*_ coding:utf-8 _*_
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(“https://www.baidu.com/”)
# 定位 id 为“kw”的元素
input_text = driver.find_element_by_id(“kw”)
input_text.send_keys(“selenium”)
driver.quit()
(二)通过通过 name 定位
find_element_by_name(name)find_elements_by_name(name)
# _*_ coding:utf-8 _*_
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(“https://www.baidu.com/”)
# 定位 name 为“wd”的元素
input_text = driver.find_element_by_name(“wd”)
input_text.send_keys(“selenium”)
driver.quit()
(三)通过 class 定位
find_element_by_class_name(name)find_elements_by_class_name(name)
# _*_ coding:utf-8 _*_
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(“https://www.baidu.com/”)
# 定位 class 名称为“s_ipt”的元素
input_text = driver.find_element_by_class_name(“s_ipt”)
input_text.send_keys(“selenium”)
driver.quit()
(四)通过 tag 定位
find_element_by_tag_name(name)find_elements_by_tag_name(name)
# _*_ coding:utf-8 _*_
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(“https://www.baidu.com/”)
# 定位标签为 <input> 的元素
input_text = driver.find_elements_by_tag_name(“input”)
print(len(input_text))
driver.quit()
(五)通过 link 定位
find_element_by_link_text(link_text)find_elements_by_link_text(link_text)
# _*_ coding:utf-8 _*_
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(“https://www.baidu.com/”)
# 定位链接文本完全匹配“我新闻”的元素
news = driver.find_element_by_link_text(“ 新闻 ”)
news.click()
driver.quit()
(六)通过 partial link 定位
find_element_by_partial_link_text(link_text)find_elements_by_partial_link_text(link_text)
# _*_ coding:utf-8 _*_
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(“https://www.baidu.com/”)
# 定位链接文本部分匹配“新”的元素
news = driver.find_element_by_partial_link_text(“ 新 ”)
news.click()
driver.quit()
(七)通过 xpath 定位
find_element_by_xpath(xpath)find_elements_by_xpath(xpath)
# _*_ coding:utf-8 _*_
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(“https://www.baidu.com/”)
# xpath 定位,相对路径与属性结合定位搜索框
news = driver.find_element_by_xpath(“//input[@id=’kw’]”)
news.click()
driver.quit()
(八)通过 css 选择器定位
find_element_by_css_selector(css_selector)find_elements_by_css_selector(css_selector)
# _*_ coding:utf-8 _*_
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(“https://www.baidu.com/”)
# css 选择器,id 定位密码输入框
news = driver.find_element_by_css_selector(‘#kw’)
news.click()
driver.quit()
这里只是简单介绍了 8 种元素定位方式的使用,比较简单易用的是通过 id、name、class 定位,我个人比较喜欢的是用 xpath 定位,当然,最灵活也是最强大的定位方式就是 css,它也是比较难掌握的一种方式。关于 xpath 和 css 定位方式的详细介绍,可以参考 selenium 元素定位。