本帖最后由 RPA智多星-技术支持 于 2022-10-21 13:48 编辑
一个HTML(网页)元素由标签、属性名、属性值三部分组成,如下图所示。 XPath定义 XPath是一个路径,可以用于定位HTML元素。 XPath的绝对路径和相对路径 l 绝对路径:以单斜杠“/”开头,表示了从html根元素到当前定位元素的一个完整路径。例如:/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input l 相对路径:以双斜杠“//”开头,可以是定位元素的一个最短路径,例如://input[@id=“kw”] 绝对路径因为路径过长,往往会因页面微调而不稳定;而相对路径则相对更稳定一些 因此,在使用时我们优先使用相对路径。 快速获取元素XPath XPath语法说明 场景 | | | | 按id属性查找 | | | | 按name属性查找 | | //input[@name="username"] | | 按class属性查找 | | //button[@class="btn-submit"] | | 按其他属性查找 | | | | 按标签之间的文本(innerText)查找 | | | | 多个条件混合使用 | | //select[@name="city" and @size="4"] //select[@name="city"] or @size="4"] | |
XPath最佳实践 1、 先按当前元素的特征定位元素,id、name、特殊的class、placeholder等属性 2、 如果当前元素没有固定的特征 2.1 定位该元素有固定特征的父亲级元素、祖先级元素,然后再向下查找该元素,例如://*[@id='J_login_form’]/input XPath写法 | | div[id='J_login_form’]/input | 从div[id='J_login_form’]向下查找子节点input | div[id='J_login_form’]//input | 从div[id='J_login_form’]向下查找子、孙节点input |
2.2 定位该元素有固定特征的兄弟元素,然后再相邻查找该元素,例如: 前一个兄弟://div[@class="com-answer-panel"]/preceding-sibling::div[1] 后一个兄弟://div[@class="com-answer-panel"]/following-sibling::div[1] 2.3 定位该元素有固定特征的子元素、孙子元素,然后再向上查找该元素,例如: 向上查找父节点://div[@class="com-answer-panel"]/parent::div 向上查找祖先节点(往往有多个,还需要增加其他限定条件)://div[@ class="com-answer-panel"]/ancestor::div XPath举例 l 根据父亲元素定位目标元素 XPath写法://div[@id=”aid”]/div l 根据祖先元素定位目标元素 XPath写法://div[@id=”aid”]//div[@class=”e”] l 根据子元素定位目标元素 XPath写法://div[@id=”bid”]/parent::div l 根据子孙元素定位目标元素 XPath写法://div[@id=”cid”]/ ancestor::div[@class=”a”] l 根据前一个兄弟节点定位目标元素 XPath写法://div[@id=”cid”]/ preceding-sibling::div l 根据后一个兄弟节点定位目标元素 XPath写法://div[@id=”cid”]/ following-sibling::div |