首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我有一个基于4个值的动态xpath,如果我使用OR条件,xpath看起来很大,有没有其他方法来处理这个问题?

对于基于4个值的动态xpath,如果使用OR条件,xpath会变得很大,可以考虑使用XPath函数来处理这个问题。

XPath函数是一种在XPath表达式中使用的内置函数,可以对节点进行计算、筛选和转换。以下是一些常用的XPath函数:

  1. contains()函数:用于判断一个字符串是否包含另一个字符串。可以使用该函数来简化OR条件的判断。例如,contains(@属性, '值1') or contains(@属性, '值2') or contains(@属性, '值3') or contains(@属性, '值4')可以简化为contains(@属性, '值1|值2|值3|值4')
  2. starts-with()函数:用于判断一个字符串是否以另一个字符串开头。可以使用该函数来进一步简化OR条件的判断。
  3. matches()函数:用于判断一个字符串是否匹配一个正则表达式。可以使用该函数来更灵活地处理OR条件。

通过使用这些XPath函数,可以将复杂的OR条件简化为一个更简洁的表达式,从而减小xpath的大小。

另外,还可以考虑使用CSS选择器来代替XPath。CSS选择器是一种用于选择HTML元素的语法,可以通过元素的属性、层级关系等进行选择。相比于XPath,CSS选择器更简洁、易读。可以使用一些库或工具,如BeautifulSoup、Jsoup等,将CSS选择器转换为XPath。

总结起来,处理基于多个值的动态xpath时,可以考虑使用XPath函数来简化OR条件的判断,或者使用CSS选择器代替XPath。这样可以减小xpath的大小,提高代码的可读性和维护性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

DOM编程

DOM(Document Object Model)文档对象模型,是语言和平台的中立接口。。 允许程序和脚本动态地访问和更新文档的内容。 为什么要使用DOM?...Dom技术使得用户页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强。...总的来说就是:添加、替换、删除子节点,判断是否有子节点,克隆子节点 ---- document HTML的DOM中我们提到并大量使用了document这个Javascirpt的内置对象,请注意这个对象仅仅可以表示...现在问题就是,IE和fireFox的装载XML方式是不一样的。因此,我们最好封装成一个方法来装载XML。.../[条件])【或关系】 我们之前使用dom4j的时候,是调用selectSingleNode()和selectNodes()方法来获取任意深度的节点或多个节点 我们想要在JavaScript中使用XPATH

1.3K70

什么是DOM编程?(修订版)

DOM(Document Object Model)文档对象模型,是语言和平台的中立接口。。 允许程序和脚本动态地访问和更新文档的内容。 为什么要使用DOM?...Dom技术使得用户页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强。...这里写图片描述 总的来说就是:添加、替换、删除子节点,判断是否有子节点,克隆子节点 ---- document HTML的DOM中我们提到并大量使用了document这个Javascirpt的内置对象...现在问题就是,IE和fireFox的装载XML方式是不一样的。因此,我们最好封装成一个方法来装载XML。...】 多条件查询节点:(先找到元素节点/[条件]|先找到元素节点/[条件])【或关系】 我们之前使用dom4j的时候,是调用selectSingleNode()和selectNodes()方法来获取任意深度的节点或多个节点

1.4K20
  • 🔥《手把手教你》系列基础篇之4-python+ selenium自动化测试-xpath使用(详细教程)

    我们大部分时候需要去步骤2中,找出能够识别这个唯一元素的节点信息。刚好上面通过id=kw只能找到一个匹配的元素,说明这个XPath可用,看起来也简洁。...JD首页左侧电脑菜单举例 XPath写法推荐,这里用contains()方法来定位 这里href = //diannao.jd.com, 如果我觉得这个href太长,我只取关键字diannao,利用...有时候,如果这个id不能作为参考值,我们需要利用相对定位方法来定位这个新闻标题前面的单选按钮; 1)先根据value = google_web 或者text()=谷歌来定位“谷歌”这个标签。...当然,使用 XPath 不仅仅只局限在 id、name 和 class 这三个属性值,元素的任意属性值都可以使用,只要它能唯一的标识一个元素。...,如果它的上级 有可以唯一标识属性的值,也可以拿来使用。

    1.1K50

    🔥《手把手教你》系列基础篇之4-python+ selenium自动化测试-xpath使用(详细教程)

    我们大部分时候需要去步骤2中,找出能够识别这个唯一元素的节点信息。刚好上面通过id=kw只能找到一个匹配的元素,说明这个XPath可用,看起来也简洁。...JD首页左侧电脑菜单举例 XPath写法推荐,这里用contains()方法来定位 这里href = //diannao.jd.com, 如果我觉得这个href太长,我只取关键字diannao,利用...有时候,如果这个id不能作为参考值,我们需要利用相对定位方法来定位这个新闻标题前面的单选按钮; 1)先根据value = google_web 或者text()=谷歌来定位“谷歌”这个标签。...当然,使用 XPath 不仅仅只局限在 id、name 和 class 这三个属性值,元素的任意属性值都可以使用,只要它能唯一的标识一个元素。...,如果它的上级 有可以唯一标识属性的值,也可以拿来使用。

    1.2K30

    Python带你薅羊毛:手把手教你揪出最优惠航班信息

    请各位大佬读者注意,我写这篇文章并不是为了展示什么新技术。没错,已经有更先进的方法来寻找更便宜的机票,然而我只希望我的文章能给读者带来一些简单而实用的东西。...今天的例子中,我选择用 XPath 来定位页面上的元素,因为我觉得这个例子里并不是太需要用到 CSS——当然,如果你能做到混合使用 CSS 来进行定位,那当然更完美。...这个函数还返回一个数据表对象 flights_df 以便我们可以把各种不同排序的结果分门别类,并最后整合在一起。 我试着让变量名看起来比较清晰易懂一些。...如果你的搜索不含有弹性日期的话,就不会有一个对照表对象出现在页面上,那么你的这段代码就可能会出问题。 我使用 Outlook 帐户(hotmail.com)进行了一下电子邮件发送测试。...对于学有余力的读者,可以考虑一下如何改进我们这段简单的小程序,比如我想到的有:使用微信机器人,把搜索结果文字通过微信发给你自己;使用 V** 或是其他更隐蔽的方式从多个服务器同时获取搜索结果;把保存搜索结果的

    1.3K20

    利用pthon爬虫和数据分析在618抢购Macbook pro

    涉及面 爬虫中阶知识,因为涉及到动态页面抓取,一个页面对不同型号进行点击操作,之后再获取元素,使用了phantomjs包 python字符串处理中阶知识,涉及到数据清洗,重构,还有缺失值的填充,这次没用...流程和以前的动态页面抓取一致,选择需要的url之后进行元素点击操作,目的是为了选中需要比较价格的机型,这都么有问题,我以前写过很多关于phantomjs和selenium的动态页面处理的博客,大家如果只是想参考代码...A: 解决方法,额,我是每天看一下log,看看有没有不正常的,不正常就kill任务然后修改位置,再接着跑,一般来说,商家不会闲着无聊去修改位置的,另一个解法是对之后的结果手动清洗,如果价格与之前的价格差值大过一定范围...,则直接认为是噪声数据,毕竟,怎么可能价格涨跌超过1000的呢,还有一个解法是,确定点击元素的值代表是什么型号,然后点击的价格就是什么型号的了,这个我懒得做了。。。。...我最后的目的是获取价格变动的时间戳,不管哪家变动,都获取,然后把值都给选出来,这里有一些问题的是脏数据的处理,还有就是阈值的设定,毕竟某东的优惠券是800这个幅度的,,,, ? ? ? ?

    2.3K70

    (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)

    url地址来更改页面的方式失效,这一部分,我在(数据科学学习手札47)基于Python的网络数据采集实战(2)中爬取马蜂窝景点页面下蜂蜂点评区域用户评论内容的时候,也详细介绍过,但之前我在所有爬虫相关的文章中介绍的内容...,而是基于网页自身的CSS结构,其实selenium中对网页元素进行定位的方式非常多,但是通过我大量的实践,其中很多方法效果并不尽如人意,唯有其中基于xpath的定位方法十分方便,定位非常准确方便,因此本文不会浪费你的时间介绍其他效果不太好的方法...路径表达式即可;   xpath使用路径表达式来识别xml文档中的节点或节点集,我们先从一个示例出发来对xpath路径表达式有一个认识:   还是以马蜂窝游记页面为例: from selenium import...[]:指定最末端结点的属性 @:在[]中指定属性名称和对应的属性值   在xpath路径表达式中还有很多其他内容,但在selenium中进行基本的元素定位了解到上面这些规则就可以了,所以我们上面的例子中的规则...,快速加载图片比较吃网速和内存''' for i in range(1, 20): '''这里使用一个错误处理机制, 如果有定位到加载下一页按钮就进行 点击下一页动作,否则继续每隔

    1.8K50

    七、Selenium与phantomJS----------动态页面模拟点击、网站模拟登录 每天一个小实例1(动态页面模拟点击,并爬取你想搜索的职位信息) 每天一个小实例2(模拟网站登录)我用的是

    如果我们把 Selenium 和 PhantomJS 结合在一起,就可以运行一个非常强大的网络爬虫了,这个爬虫可以处理 JavaScrip、Cookie、headers,以及任何我们真实用户需要做的事情...因为 PhantomJS 是一个功能完善(虽然无界面)的浏览器而非一个 Python 库,所以它不需要像 Python 的其他库一样安装,但我们可以通过Selenium调用PhantomJS来直接使用。...,并不是显示在下拉框中的值 15 #visible_text是在option标签文本的值,是显示在下拉框的值 当你触发了某个事件之后,页面出现了弹窗提示,处理这个提示或者获取提示信息方法如下: alert...如果实际页面等待时间过长导致某个元素还没出来,但是你的代码直接使用了这个元素,那么就会抛出NullPointer的异常。   ...隐式等待是等待特定的时间,显式等待是指定某一条件直到这个条件成立时继续执行。   显式等待:   显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了。

    2.3K70

    高阶爬虫实战:破解极验滑动验证码

    针对这种验证码我们首先确定了使用selenium模拟滑动破解方式,selenium鼠标移动点击拖动都比较简单,那么问题就在于拖动多少距离,眼睛看起来很直观,但是程序怎么获取呢?利用图像识别.........但是这个坐标是前面url里面的图片坐标,然后我就去看了一下图4 ? 这个图片尽然比较大,坐标问题有答案了,但是这个跟260有什么关系呢?打乱的图片比较大,拼好的小,那它是怎么拼的呢?...它成功引起了我的注意,因为按照我的想法,如果是从拼图里拿出一部分拼成一个完成图片的话,那么最左边拿出来的图片,应该是从(0,0),(0,58),但是我们看到的是(1,0),(1,58),y值还是比较符合我们的预期的...这在后面还好说,如果是在前面呢,那不就计算到阴影里去了嘛。如果这个对比有一个容差就好了,我以前用按键精灵的时候好像就有这种嘛,这个好不智能呀。...一种方式就是调试,这种是比较麻烦的,还有一种方式就是获取多张图片,全图和缺陷图,然后使用取色工具,取对应位置的颜色值,确定一个大概范围。

    2.9K72

    自动化测试面试题及答案大全(5)「建议收藏」

    我们一般最重要的就是使用webdriver。 5.Selenium有什么限制或者缺陷 除了基于web的软件和mobile的程序,selenium不支持桌面软件自动化测试。...还有一个可能和这个问题相关的面试题,如果页面元素经常发生需求变化,你是如何做,答案就是采用POM思想。好处就是只要该一个页面,我就去修改这个页面对象的元素定位和相关方法,脚本不需要修改。...,例如ck编辑器,动态表格等 14.举例一下你遇到过那些异常,在selenium自动化测试过程中 通过这个问题,大概知道你写过多少脚本。...alert弹窗 我们常见的alert弹窗有两种:基于windows弹窗和基于web页面弹窗 我们知道,webdriver是能够处理alert弹窗的,Selenium提供了Alert这个接口。...如果这种方法不能实现上传,我们就可能需要借助第三方工具,我用过一个第三方工具叫autoIT. 还有一个方法是利用robot类 27.如何处理“不受信任的证书”的问题?

    1.8K30

    Python爬虫(二十一)_Selenium与PhantomJS

    本章将介绍使用Selenium和PhantomJS两种工具用来加载动态数据,更多内容请参考:Python学习指南 Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的...如果我们把Selenium和PhantomJS结合在一起,就可以运行一个非常强大的网络爬虫了,这个爬虫可以处理JavaScript、Cookie、headers,以及任何我们真实用户需要做的事情。...() 页面切换 一个浏览器肯定会有很多窗口,所以我们肯定要有方法来实现窗口的切换,切换窗口的方法如下: driver.switch_to_window('this is window name') 也可以使用...如果实际页面等待事件过长导出某个dom元素还没出来,但是你的代码直接使用了这个WebElement,那么就会抛出NullPointer的异常。...隐式等待就是等待特定的时间,显示等待是指定某一条件知道这个条件成立时继续执行。 显式等待 显示等待指定了某个条件,然后设置最长等待事件。如果在这个时间还找到没有元素,那么便会抛出异常。

    2.6K101

    Appium常用操作之「Toast提示信息获取」

    所以在很多版本当中,如果我们要用 Toast,我们就需要指明一个东西:那就是「自动化测试引擎必须指明为 UiAutomator2。」 不然它默认就不用这个,必须自己指明。...「也就是等待的时候,要用元素存在的条件。不能用元素可见的条件。」 driverWait 方法中,请用presence_of_element_located。它存在了就行了,存在了之后再去处理它。...只想通过「手机号码」这个文本匹配来找到它。 可以,但是选取部分内容的时候要注意下:除了 xpath 之外,页面上其它元素有没有文本也是「手机号码」的。 ?...「Toast 这个问题有些尴尬,如果特别需要 Toast 上面的消息怎么办?可以求助开发,帮你稍微延长一点时间。」 有时能找到 Toast,有时找不到,这里是概率性的问题。...4.Toast 获取跟 Appium 的版本有关 还有一个问题,Toast 获取的时候提示你"应用的一些页签啊没有通过",这个也是跟 Appium 的版本有关。Toast 这块的问题是比较多的。

    1.3K10

    自动化测试最新面试题和答案

    问题1:Selenium是什么,流行的版本有哪些? Selenium是基于Web的最流行的UI自动化测试工具。...我怎样才能使用另一个端口?...,如ID、名称、XPath、CSS定位器,我应该使用哪一个?...假如一个文本框是一个Ajax控件,当我们输入一些文本时,它会显示自动建议的值。 处理这样的控件,需要在文本框中输入值之后,捕获字符串中的所有建议值;然后,分割字符串,取值就好了。...显式等待只是用于特定搜索的一个计时器。它的可扩展性更强,你可以设置它来等待任何条件。通常情况下,可以使用一些预先构建的条件来等待元素变得可点击,可见,不可见等,或者只是编写适合需求的条件。

    5.8K20

    极验验证码破解之selenium

    图1 针对这种验证码我们首先确定了使用selenium模拟滑动破解方式,selenium鼠标移动点击拖动都比较简单,那么问题就在于拖动多少距离,眼睛看起来很直观,但是程序怎么获取呢?...图13 这个图片尽然比较大,坐标问题有答案了,但是这个跟260有什么关系呢?打乱的图片比较大,拼好的小,那它是怎么拼的呢?幸好我们看到了一个比较有用信息 ? ? 看到这个-1px了吗?...它成功引起了我的注意,因为按照我的想法,如果是从拼图里拿出一部分拼成一个完成图片的话,那么最左边拿出来的图片,应该是从(0,0),(0,58),但是我们看到的是(1,0),(1,58),y值还是比较符合我们的预期的...这在后面还好说,如果是在前面呢,那不就计算到阴影里去了嘛。如果这个对比有一个容差就好了,我以前用按键精灵的时候好像就有这种嘛,这个好不智能呀。...一种方式就是调试,这种是比较麻烦的,还有一种方式就是获取多张图片,全图和缺陷图,然后使用取色工具,取对应位置的颜色值,确定一个大概范围。

    1.7K50

    创建一个分布式网络爬虫的故事

    以下为译文: 大概600万条记录,每个记录有15个左右的字段。 这是我的数据分析项目要处理的数据集,但它的记录有一个很大的问题:许多字段缺失,很多字段要么格式不一致或者过时了。...初始实现 现在我有一个看起来不错的设计,我需要选择使用哪些技术。 但别误会我的意思:我的目标不是提出一个完美的技术栈。...为了避免这个问题,我在爬虫程序调度器上使用了一个本地SQLite数据库来存储每个已爬过的URL,以及与其抓取日期相对应的时间戳。...现在有很多方法可以解决这个问题,但我还是选择了一个非常简单的解决方案。我指定了一些主控制器,让它们只抓取动态生成的网页。 在那些主控制器上: 我安装了谷歌浏览器和Chrome驱动程序。...其他的输出一条错误信息或者看起来无限长的堆栈跟踪信息。无论哪种方式,它们都很大!

    1.2K80

    Appium常用操作之「Toast提示信息获取」

    如果想要获取到 Toast 也是有要求的。 Toast 是什么? UiAutomator Viewer 是抓不到它的。即使截屏截到了,用元素定位也是定位不到的。所以用正常套路是搞不定它的。...「也就是等待的时候,要用元素存在的条件。不能用元素可见的条件。」 driverWait 方法中,请用presence_of_element_located。它存在了就行了,存在了之后再去处理它。...只想通过「手机号码」这个文本匹配来找到它。 可以,但是选取部分内容的时候要注意下:除了 xpath 之外,页面上其它元素有没有文本也是「手机号码」的。...「Toast 这个问题有些尴尬,如果特别需要 Toast 上面的消息怎么办?可以求助开发,帮你稍微延长一点时间。」 有时能找到 Toast,有时找不到,这里是概率性的问题。...4.Toast 获取跟 Appium 的版本有关 还有一个问题,Toast 获取的时候提示你"应用的一些页签啊没有通过",这个也是跟 Appium 的版本有关。Toast 这块的问题是比较多的。

    2.5K10

    Selenium面试题

    与id有关:id 全能选手:xpath、css_selector 如果存在id,我一定使用Id,因为简单方便,定位最快。...先去找该元素不变的属性,要是都变,那就找不变的父元素,用层级定位(以不变应万变) 属性动态变化也就是指该元素没有固定的属性值,可以通过: JS实现, 通过相对位置来定位,比如xpath的轴,paren...重置元素属性,给定位的元素加背景、边框 NO.17 XPath中使用单斜杠和双斜杠有什么区别? 如果XPath是从文档节点开始,它将允许创建“绝对”路径表达式。...假如一个文本框是一个Ajax控件,当我们输入一些文本时,它会显示自动建议的值。 处理这样的控件,需要在文本框中输入值之后,捕获字符串中的所有建议值;然后,分割字符串,取值就好了。...显式等待只是用于特定搜索的一个计时器。它的可扩展性更强,你可以设置它来等待任何条件。通常情况下,可以使用一些预先构建的条件来等待元素变得可点击,可见,不可见等,或者只是编写适合需求的条件。

    5.7K30

    POI生成word文档完整案例及讲解

    里面可以有表格,使用xwpfTableCell.getTables()获取,and so on 在poi文档中段落和表格是完全分开的,如果在两个段落中有一个表格,在poi中是没办法确定表格在段落中间的。...2.1.1,下面就是根据从数据库中取到值,判断规则,和json数据做对比的,就是json数据中有没有数据库中要的值。判断规则是xpath的规则运算符。...=-1){//存在这个符号,表示需要判断前提条件,@&@,前提条件,需要取的值的字段,单位 //                        String[] methodParamArray = xpath.split...则会通过反射的方法来获取数值。 可以看出来只要是input开头都是通过这个方法获取的。这个主要是为了给替换做准备的。...反射的逻辑详见 反射的一个案例分析 取值逻辑5: 假如上面的4套规则还不能解决一些问题的话,则通过代码直接来设置map的key和value值,放到map中来,比如说当前的时间等等。

    11.7K40

    POI生成word文档完整案例及讲解

    里面可以有表格,使用xwpfTableCell.getTables()获取,and so on 在poi文档中段落和表格是完全分开的,如果在两个段落中有一个表格,在poi中是没办法确定表格在段落中间的。...判断规则,和json数据做对比的,就是json数据中有没有数据库中要的值。...=-1){//存在这个符号,表示需要判断前提条件,@&@,前提条件,需要取的值的字段,单位 //                        String[] methodParamArray = xpath.split...则会通过反射的方法来获取数值。 可以看出来只要是input开头都是通过这个方法获取的。这个主要是为了给替换做准备的。...反射的逻辑详见 反射的一个案例分析 取值逻辑5: 假如上面的4套规则还不能解决一些问题的话,则通过代码直接来设置map的key和value值,放到map中来,比如说当前的时间等等。

    4.7K32

    《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)

    5.3使用页面属性定位 标签属性定位,相对比较简单,也要求属性能够定位到唯一一个元素,如果存在多个相同条件的标签,默认只是第一个,具体格式: xxx.By.xpath("//标签[@属性='属性值']"...//则是指从前面的节点的子节点中进行查找 (6) 选取若干路径| 这个符号用于在一个xpath中写多个表达式用,用|分开,每个表达式互不干扰,意思是一个xpath可以匹配多个不同条件的元素,例如:如下图所示...有不想使用感觉对路径的定位方式,也没法搞清使用什么序号来定位元素,那么则推荐使用属性值定位元素的方法。 被测试网页的元素一般都包含各种各样的属性值,并且很多属性值具有唯一性。...因此非常建议使用相对路径结合属性值定位的方式来编写XPath定位表达式,基于此定位方法可以解决大部分的页面元素定位问题。...先找到一个相对好定位的元素,再根据这个元素和要定位的相对位置进行定位,可以解决一些元素难以定位的问题。 5.4.1轴示意图 ?

    3.5K41
    领券