地产网站建设,wordpress the7使用教程,免费发布推广信息的app,微网站开发的比较总结1.1 ID定位HTML Tag 的 id 属性值是唯一的#xff0c;故不存在根据 id 定位多个元素的情况。下面以在百度首页搜索框输入文本“python”为例。搜索框的 id 属性值为“kw”#xff0c;如图1.1所示#xff1a;代码如下#xff0c;“find_element_by_id”方法已废弃#xff0…1.1 ID定位HTML Tag 的 id 属性值是唯一的故不存在根据 id 定位多个元素的情况。下面以在百度首页搜索框输入文本“python”为例。搜索框的 id 属性值为“kw”如图1.1所示代码如下“find_element_by_id”方法已废弃使用find_element(By.ID, kw)from selenium import webdriver
from selenium.webdriver.common.by import Bydriver webdriver.Firefox()
# 需要将浏览器驱动添加到环境变量中
# 打开百度
driver.get(https://www.baidu.com/)
# 通过id在搜索输入框中输入文本“python”
driver.find_element(By.ID, kw).send_keys(python)
# 点击搜索
driver.find_element(By.ID, su).click()
# 关闭浏览器
driver.close()1.2 name 定位以上百度搜索框也可以用 name 来实现如图 1.1 所示其 name 属性值为“wd”方法“find_element(By.NAME, wd)”表示通过 name 来定位代码如下driver webdriver.Firefox()
# 打开百度
driver.get(https://www.baidu.com/)
# 通过name在搜索输入框中输入文本“自动化测试”
driver.find_element(By.NAME, wd).send_keys(自动化测试)
# 点击搜索
driver.find_element(By.ID, su).click()
# 关闭浏览器
driver.close()注意用 name 方式定位需要保证 name 值唯一否则定位失败。1.3 class 定位以百度首页搜索框为例如图 1.1所示其 class 属性值为“s_ipt”“By.CLASS_NAME, s_ipt”表示通过 class_name 来定位代码如下driver webdriver.Firefox()
# 打开百度
driver.get(https://www.baidu.com/)
# 通过class在搜索输入框中输入文本“web测试”
driver.find_element(By.CLASS_NAME, s_ipt).send_keys(web测试)
# 点击搜索
driver.find_element(By.ID, su).click()
# 关闭浏览器
driver.close()1.4 link_text 定位link_text 是以超链接全部名字作为关键字来定位元素的。以百度首页“新闻”超链接为例如图 1.2 所示关键字为“新闻”。代码如下driver webdriver.Firefox()
# 打开百度
driver.get(https://www.baidu.com/)
# 通过link_text定位点击‘新闻’超链接
driver.find_element(By.LINK_TEXT, 新闻).click()
# 关闭浏览器
driver.close()注意用此方法定位元素超链接中文字需要写全。1.5 partial_link_text 定位即用超链接文字的部分文本来定位元素类似数据库的模糊查询。以“新闻”超链接为例只需“新”一个字即可即取超链接全部文本的一个子集。代码如下driver webdriver.Firefox()
# 打开百度
driver.get(https://www.baidu.com/)
# 通过partial_link_text定位用超链接文字的部分文本来定位元素类似数据库的模糊查询
driver.find_element(By.PARTIAL_LINK_TEXT, 新).click()
# 关闭浏览器
driver.close()1.6 tag_name 定位tag_name 定位即通过标签名称定位如图 1.6所示定位标签“form”并打印标签属性值“name”。代码如下driver webdriver.Firefox()
# 打开百度
driver.get(https://www.baidu.com/)
# tag_name 定位即通过标签名称定位
print(driver.find_element(By.TAG_NAME, form).get_attribute(name))成功后控制台输出“f”1.7 CSS 定位CSS 定位的优点是速度快、语法简洁。表 1.1 中的内容出自 W3School 的 CSS 参考手册。CSS 定位的选择器有十几种在本节中主要介绍几种比较常用的选择器。仍以百度搜索框为例代码如下driver webdriver.Firefox()
# 打开百度
driver.get(https://www.baidu.com/)# 以class选择器为例实现CSS定位在搜索框输入“python3”
driver.find_element(By.CSS_SELECTOR, .s_ipt).send_keys(python3)# 以id定位语法结构为#加 id 名实现CSS定位在搜索框输入“python3”
driver.find_element(By.CSS_SELECTOR, #kw).send_keys(python3)# CSS 定位主要利用属性 class 和 id 进行元素定位。也可以利用常规的标签名称来定位如输入框标签“input”在标签内部又设置了属性值为“name’wd’”
driver.find_element(By.CSS_SELECTOR, input[namewd]).send_keys(python3)# CSS 定位方式可以使用元素在页面布局中的绝对路径来实现元素定位。百度首页搜索输入框元素的绝对路
# 径为“htmlbodydivdivdivdivdivformspaninput[namewd]”
driver.find_element(By.CSS_SELECTOR, htmlbodydivdivdivdivdivformspaninput[namewd]).send_keys(python3)# CSS 定位也可以使用元素在页面布局中的相对路径来实现元素定位。相对路径的写法和直接利用标签名称来定位两者
# 的代码实现的功能是一致的
driver.find_element(By.CSS_SELECTOR, input[namewd]).send_keys(python3)# 点击搜索
driver.find_element(By.ID, su).click()
# 关闭浏览器
driver.close()1.8 XPath 定位通过 XPath 来定位元素的方式对比较难以定位的元素来说很有效几乎都可以解决特别是对于有些元素没有 id、name 等属性的情况。XPath 是 XML Path 语言的缩写是一种用来确定 XML 文档中某部分位置的语言。它在 XML 文档中通过元素名和属性进行搜索主要用途是在 XML 文档中寻找节点。XPath定位比 CSS 定位有更大的灵活性。XPath 可以向前搜索也可以向后搜索而 CSS 定位只能向前搜索但是 XPath 定位的速度比 CSS 慢一些。XPath 语言包含根节点、元素、属性、文本、处理指令、命名空间等。以下文本为 XML实例文档用于演示 XML 的各种节点类型便于理解 XPath。?xml version 1.0 encoding utf-8 ?
!-- 这是一个注释节点 --
animalList typemammal animal categoruy forest nameTiger/name sizebig/size actionrun/action /animal
/animalList其中animalList为文档节点也是根节点name为元素节点type“mammal”为属性节点。节点之间的关系• 父节点。每个元素都有一个父节点如上面的 XML 示例中animal 元素是 name、size以及 action 元素的父节点。• 子节点。与父节点相反这里不再赘述。• 兄弟节点有些也叫同胞节点。它表示拥有相同父节点的节点。如上代码所示name、size 和 action 元素都是同胞节点。• 先辈节点。它是指某节点的父节点或者父节点的父节点以此类推。如上代码所示name 元素节点的先辈节点有 animal 和 animalList。• 后代节点。它表示某节点的子节点、子节点的子节点以此类推。如上代码所示animalList 元素节点的后代节点有 animal、name 等。仍以百度搜索框为例代码如下driver webdriver.Firefox()
# 打开百度
driver.get(https://www.baidu.com/)
# XPath 有多种定位策略最简单直观的就是写出元素的绝对路径。
driver.find_element(By.XPATH, /html/body/div/div/div/div/div/form/span/input).send_keys(python3)# XPath还可以使用元素的属性值来定位。//input 表示当前页面某个 input 标签[idkw] 表示这个元素的 id 值是 kw。
driver.find_element(By.XPATH, //input[idkw]).send_keys(python3)# 如果一个元素本身没有可以唯一标识这个元素的属性值我们可以查找其上一级元素。
# form[classfm has-soutu]通过 class 定位到父元素后面的/span/input 表示父元素下面的子元素。
driver.find_element(By.XPATH, //form[classfm has-soutu]/span/input).send_keys(python3)# 如果一个属性不能唯一区分一个元素那么我们可以使用逻辑运算符连接多个属性来查找元素
driver.find_element(By.XPATH, //input[idkw and classs_ipt]).send_keys(python3)# 点击搜索
driver.find_element(By.ID, su).click()
# 关闭浏览器
driver.close()本章主要介绍了 Selenium 元素的八大定位每一种定位方式都有其特殊的用法读者只要掌握其特殊性即可。需要在项目中多用多想、总结经验时间久了会对这些定位方式有更深的理解。