Xpath解析网页
在xpath语法中 . 代表当前节点,可有可无 // 代表相对路径 *代表查找出所有符合条件的元素,也可以用标签名,xpath语法中同一个父节点下多个子节点可以使用索引且索引从1开始
通过任何属性定位:
driver.find_element_by_xpath(" .//*[@name=‘tj_trmap’] ")
文本定位:
定位地图:driver.find_element_by_xpath("//*[text()=‘地图’]")
逻辑运算定位:
多重定位:driver.find_element_by_xpath("//*[text()='新闻’and@name=‘tj_trnews’])
模糊匹配查询:
模糊文本查询: //*[contains(text(),‘hao’]
模糊匹配某个属性://*[contains(@name,‘123’)]
模糊匹配以什么开头: //span[starts-with(@id,‘s_kw_’)]
模糊匹配以什么结尾: //span[ends-with(@id,‘kw_wrap’)]
模糊正则表达式: //*[matchs(text(),‘hao13’)]
title定位: 只有标签头,无属性和文本等可定位的东西
第一种方法:先定位到其父类或者是祖类,然后一层层定位
第二种方法:当父类或者祖类下只有一个标签头时候,可以先定位到父类或祖类,然后直接是标签头
同级标签定位:
following-sibling 定位本节点下面的 //*[@class=‘num_break’][2]/following-sibling::span[2]
定位最后一个span标签 因为class=“num_break”有两个,我们需要用的是第一个
preceding-sibling 定位本节点上面的://*[contains(@name,‘trmap’)]/preceding-sibling::a[2]
通过层级父类定位子类定位:
父级:driver.find_element_by_xpath(".//*[@id=‘u1’]/a[1]")
祖籍:driver.find_element_by_xpath("//*[@id=‘head’]/div/div[3]/a[1]")
子节点定位父节点或祖节点:
通过子节点定位父节点(
.//[@id=‘u1’]/parent::div 或者是 .//[@id=‘u1’]/…
通过子类定位祖类(
.//[@id=‘u1’]/ancestor::div[2] 或者是 .//[@id=‘u1’]/…
层级定位://*[@name=‘tj_trnews’]/…/a[3]
来源:CSDN
作者:没有衬衫
链接:https://blog.csdn.net/Assassin567/article/details/103864375