本文基于百度首页,进行实验。
from selenium import webdriver
driver = webdriver.Chrome() # 实例化谷歌浏览器
driver.get("https://www.baidu.com/")
# id 定位(对应html元素的id属性)
# driver.find_element_by_id("kw").send_keys("123") # 百度首页输入框id定位,输入123
# class定位(对应html元素的class属性)
# driver.find_element_by_class_name("s_ipt").send_keys("123") # 百度首页输入框class定位,输入123
# driver.find_element_by_class_name("bg s_btn").click() # 百度首页搜索按钮。 # 注意不支持多个class属性。
# 超链接完整文本定位(仅限对html元素的a标签定位)
# driver.find_element_by_link_text("新闻").click()
# 超链接不完整文本定位(仅限对html元素的a标签定位)
# driver.find_element_by_partial_link_text("闻").click()
# name定位(对应html元素的name属性)
# driver.find_element_by_name("wd").send_keys("123") # 百度首页输入框name定位,输入123
# tag定位(html元素标签定位) 一般不使用。
# driver.find_element_by_tag_name("button").click()
# css定位
# 1.针对id
# driver.find_element_by_css_selector("#kw").send_keys("123") # 百度首页输入框id定位,输入123
# 2.针对class
# driver.find_element_by_css_selector(".s_ipt").send_keys("123") # 单个class定位
# driver.find_element_by_css_selector(".s_ipt").send_keys("123")
# # driver.find_element_by_css_selector(".bg .s_btn").click() # 多个class定位,每个class都用点表示
# 3.tagName与id或class组合
# driver.find_element_by_css_selector("input#kw").send_keys("123") # tagName和id组合
# driver.find_element_by_css_selector("input.s_ipt").send_keys("123") # tagName和class组合
# 4.与标签属性结合
# driver.find_element_by_css_selector("input[name='wd']").send_keys("123") # 单属性
# driver.find_element_by_css_selector("input[name='wd'][class='s_ipt']").send_keys("123") # 多属性
# xpath定位(建议使用相对定位)
# * 表示通配符,匹配任意元素标签
# @ 表示选择元素属性名
# driver.find_element_by_xpath("//*[@name='wd']").send_keys("123") # 单个元素属性
# driver.find_element_by_xpath("//*[@name='wd' and @class='s_ipt']").send_keys("123") # 多个元素属性 这里是and 也可以是其他,比如or等。
# 下面3种比较常用。
# driver.find_element_by_xpath("//a[text()='新闻']").click() # 根据text()方法 ,它是根据元素内容全文本
# driver.find_element_by_xpath("//a[contains(text(),'闻')]").click() # 结合text方法,根据元素内容部分文本
# driver.find_element_by_xpath("//a[contains(@target,'_blan')]").click() # 结合是否包含元素属性值定位
# xpath的轴定位,也就是根据元素与元素之间的关系定位
# 轴定位的语法是 轴名称::节点名称[@属性=值]
# 节点名称就是元素标签名
# 轴名称有很多,比如ancestor、parent、preceding、preceding-sibling,following,following-sibling等
# driver.find_element_by_xpath("//a[text()='新闻']//ancestor::div") # ancestor表示当前定位元素的所有祖先节点(包括父节点)
# 就好比定位你的所有爸爸、爷爷、祖爷,直到第一个。 这里定位表达式的div默认是第一个,如果想定位你的爸爸,直接写div[1]
# parent就是定位你的直接爸爸,就好比//a[text()='新闻']//ancestor::div[1] === //a[text()='新闻']//parent::div
# preceding 就是定位当前元素之前的所有元素,preceding-sibling 就是定位当前元素之前的所有兄弟元素。
# following 就是定位当前元素之后的所有元素。
元素定位方式根据各种情况选择合适的定位方式,建议多练习。