python使用xpath(超详细)

python使用xpath(超详细),第1张

用XPath表达式来定位到对应的<td>元素

//th[span[text()="发布时间"]]/following-sibling::td/span

这个XPath表达式首先选择包含文本“发布时间”的<span>元素的<th>元素,然后使用/following-sibling::td选择这个<th>元素的下一个兄弟元素,即包含发布时间的<td>元素。最后,使用/span选择包含发布时间值的<span>元素。

请注意,这个XPath表达式返回的是一个<span>元素,如果您只需要获取该元素的文本值,可以使用text()函数,例如:

//th[span[text()="发布时间"]]/following-sibling::td/span/text()

这将返回包含发布时间的<span>元素的文本值

之前写过一篇文章提到了xpath元素定位,只写了一些函数,但是不够具体。于是想再写一篇关于xpath元素的定位终极篇,相信你一定能在这里找到你需要的解决办法。

通过绝对路径方式定位(相信大家不会使用这种方式)

CSS

通过相对路径方式定位

Bash

通过元素索引定位

CSS

使用xpath属性定位(结合第2、第3中方法可以使用)

CSS

使用部分属性值匹配(最强大的方法)

Bash

使用xpath轴(未曾使用)

selxpath() 得到的依旧是一个SelectorList

参看原文档

xpath(query)

Find nodes matching the xpath query and return the result as a SelectorList instance with all elements flattened List elements implement Selector interface too

query is a string containing the XPATH query to apply

那么实际上就是去看Selector 相关的函数了。

————————————————

<p>

AA

<sub>1</sub>

<sub>2</sub>

<sub>3</sub>

</p>

<p>

BB

<sub>1</sub>

<sub>2</sub>

<sub>3</sub>

</p>

对于上述例子,其实可以考虑获取到p之后,对其内容再进行一次查找,即可获得 1 、2 、3的内容。

大概是这样的吧 可以试试

jquery有个 parents()

比如选了一个div id为test,想整xpath的话 $("#test")parents();这样获取的是一个数组,

var aa = [];

$('#test')parents()each(function(){

aapush(thistagName);

});

获取标签名后 就可以替换成xpath了 不过需要注意的是 这个不止获取到body 最后一个元素应该是到html,也不太确定,反正在firefox上是这样的

一、为什么要做自动化?

前提:主流程稳定,周期长,脚本可重复利用。

1节省人力资源

2提高效率

3面试需要

二、什么是RobotFramework:

基于Python的关键字驱动的自动化框架。

1 基于Python:就是由python语言开发的这个框架。

2关键字驱动:关键字驱动测试又称为表格驱动测试,是自动化测试的一种方法,是数据测试的一种改进方法。关键字驱动主要包括测试步骤、测试步骤中的对象,测试对象执行的动作,测试对象需要的数据

3自动化框架?:是应用于自动化测试,框架提供可重用的基础自动化测试平台,提供自动化测试执行和管理功能的组织架构。

三、pip的常用方法:

pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。

以下在win10_x64 cmd中 *** 作:

安装:pip install 包名

eg:pip install robotframework

安装指定版本:pip install 包名==版本号

eg:pip install robotframework==1741

升级指定包:pip install --upgrade 包名

eg:pip install --upgrade robotframework

卸载:pip uninstall 包名

eg:pip uninstall robotframework

搜索安装包:pip search 包名

eg:pip search robotframework

查看当前电脑上已经安装的包:pip list

查看当前电脑上可以升级的包:pip list -o

四、rf的安装:

安装RF自动化框架:pip install robotframework

安装RF自动化框架IDE:pip install robotframework-ride

安装wxpython(ride依赖wxpython):pip install wxpython

ps :实际上新版本pip在安装ride时会自动安装所需依赖,也就是wxpython

版本信息:Win10 x64 + Python 377 + rf 312 + ride 1741 + wxpython 407post2

ps :ride 1x版本不支持Python 38及以上,ride 2x(开发中)支持Python 38

rf日志中文乱码解决方法:修改文件 python安装目录下 Libsite-packagesrobotidecontrib estrunner estrunnerpluginpy 第 565 行,将 SYSTEM 改成 OUTPUT ,重启ride工具。

五、元素定位:

id :以百度搜索输入框为例

在RF中写法 id=kw

name :以百度搜索输入框为例

在RF中写法: name=wd

xpath :Xml Path Language

1 绝对路径:从html根部逐级(从上至下)查找

/html/body/p[1]/p[1]/p[3]/p/p/form/span[1]/input

在RF中写法:xpath=/html/body/p[1]/p[1]/p[3]/p/p/form/span[1]/input

2相对路径:根据节点的上下文进行查找

eg://p/form/span/input 这里是在html中找一个p,p里面包含一个form,form包含一个span,span包含一个input,找有这样一个四层的关系的input标签,要注意如果html中有多个符合这种层级关系的input,会默认选第一个,也就是说这种方式未必是完全准确的。

3 xpath相对定位我们还可以根据元素的属性来查找:

eg://p/form/span[1]/input[@type] 这里是找符合这样一个层级关系并且有'type'这个属性的input标签

在RF中写法:xpath=//p/form/span[1]/input[@type]

eg://p/form/span[1]/input[@type='submit'] 这里是找符合这样一个层级关系并且'type'这个属性的值为'submit'的input标签

在RF中写法:xpath=//p/form/span[1]/input[@type='submit']

eg://p/form/span[1]/input[contains(@type,'sub')] 这里是找符合这样一个层级关系并且'type'这个属性的值包含'sub'的input标签

在RF中写法:xpath=//p/form/span[1]/input[contains(@type,'sub')]

以上是根据属性,如果是下面这样的a标签,我们还可以根据链接文字来进行定位

点我

eg://a[contains(text(),'点我')] 这样就是找所有a标签并且文字为'点我'的元素了

在RF中写法:xpath=//a[contains(text(),'点我')]

小技巧:

Chrome-F12-Console 中根据Xpath寻找元素:使用 $x (""),引号中填写xpath路径,如$x("/html/body/p[1]/p[1]/p[3]/p/p/form/span[1]/input")

css:

id: 以百度搜索输入框为例

在RF中写法: css=#kw

class: 以百度搜索输入框为例

在RF中写法: css=s_ipt

css根据属性定位

[id='kw'] 表示查找id值为'kw'的元素

[name^='w'] 表示查找name值为'k'开头的元素

[class$='ipt'] 表示查找class值为'ipt'结尾的元素

[autocomplete='f'] 表示查找autocomplete值中包含'f'的元素

[id='kw'] [name^='w'] 表示查找id值为'kw'并且name值为'k'开头的元素

在RF中写法:css=[id='kw'] [name^='w']、css=[class$='ipt']、

css=[maxlength='255']、css=[autocomplete='off']

ps:id和class也是属性,只是在css中针对id和class多了一种简单的写法,如上面的

css=#kw、css=s_ipt

css根据标签定位:

input

表示查找当前页面所有input标签

在RF中写法:css=input

a,input

表示查找当前页面所有a标签和input标签

在RF中写法:css=a,input

span input

表示查找span标签下的所有input标签,哪怕是span下下级的input

在RF中写法:css=span input

span>input

表示查找父元素为span标签的所有input标签,注意和span input的区别

在RF中写法:css=span>input

span+input

表示查找紧挨在span元素后的第一个input元素

在RF中写法:css=span+input

span~input

表示查找紧挨在span元素后的所有input元素

在RF中写法:css=span~input

ps :其实大家都知道,因为页面上只依靠标签定位的话重复的可能性太大了,所有我们可以采用 标签 + 属性 的方式来进行定位

例如 span>input[id='kw'][name^='w'] 意思是查找所有父标签为span的input标签,并且该标签中有属性id的值为kw且属性name的值为w开头

在RF中写法:css=span>input[id='kw'][name^='w']

小技巧:

Chrome-F12-Console 中根据css寻找单个元素:

使用 $ (""),引号中填写css选择器,如$("span>input[id='kw'][name^='w']")

Chrome-F12-Console 中根据css寻找多个元素:

使用 $ (""),引号中填写css选择器,如$("span>input[id='kw'][name^='w']")

以上就是关于python使用xpath(超详细)全部的内容,包括:python使用xpath(超详细)、xPath 用法总结整理、XPATH文本内容匹配th内容,获取td的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9865470.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存