有时候,相同的父节点下面的标签个数不一致,一个父节点下面是两个标签,另一个父节点下面是三个标签。
但是我们又想要把只有两个标签的父节点也记为三个子节点,并且把它最后一个节点的值记为None。可通过伪造的第三个标签和第二个标签比较,判断是不是应该为None。
如果子节点的标签也不一致,可以如下方式,这种情况比较少见:
//div[contains(@class, 'tv')]/child::node()[last()]
不过一般很少会这样用到,我这里只做记录。如果遇到和我相似的情况可以采用!
常用的标签:
div、p、ul li、ol li、h1-h6、a、span、b、u、i、input(属性text、number、password、radio、checkbox、submit、reset)、form、select>option、textarea
h5(新标签):header、nav、footer、main、section、video、audio、input(color、range、week、date)
标签的分类:
单双标签:单标签没有与之对
取xpath最后一个android.view.ViewGroup元素
android.view.ViewGroup[last()]
取xpath倒数第二个android.view.ViewGroup元素
android.view.ViewGroup[last()-1]
具体实现方式
response.xpath(
“//div[@class=‘tab-pane’]/table[4]/tbody/tr[4]/td[not(contains(i/@class,‘class -calaaa’))]/text()”)...
1. 由父节点定位子节点最简单的肯定就是由父节点定位子节点了,我们有很多方法可以定位,下面上个例子:对以下代码:<html><body><div id="A"> <!--父节点定位子节点--> &...
from selenium.webdriver.support.wait import WebDriverWait
#导入条件判断模块
from selenium.webdriver.support import expected_conditions as EC
#导入查询元素模块
from selenium.webdriver.com
因为 XPath 中 text() 前面是 /,而此 / 的含义是选取直接子节点,而此处很明显 li 的直接子节点都是 a 节点,文本都是在 a 节点内部的,所以这里匹配到的结果就是被修正的 li 节点内部的换行符,因为自动修正的li节点的尾标签换行了。第一次选择我们调用了 ancestor 轴,可以获取所有祖先节点,其后需要跟两个冒号,然后是节点的选择器,这里我们直接使用了 *,表示匹配所有节点,因此返回结果是第一个 li 节点的所有祖先节点,包括 html,body,div,ul。
在利用xpath定位时,往往会出现某一元素所在的子级元素有唯一定位属性,或比较容易定位,但该元素直接定位比较困难,此时我们可以采用迂回定位办法 ,先定位其子级元素,再通过子级元素来定位该元素,格式如下:
“子元素的xpath/parent::父元素类型”
如,在robot文件中可以写成:
Click Button xpath=//i[@class="ivu-icon ivu-icon-md-add"]/parent::button
通过此种方式可以直接通过子元素的class名称定位到button按钮
<a id="1" href="www.baidu.com">我是第1个a标签</a>
<p>我是p标签</p>
<a id="2" href="www.baidu.com">我是第2个a标签</a>
<a id="3" href="www.baidu.com">我是第3个a标签</a>
<a i...