Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html Xpath-复杂路径:如何通过引用不同父级中的另一个元素来查找元素?_Html_Selenium_Selenium Webdriver_Xpath_Xpath 2.0 - Fatal编程技术网

Html Xpath-复杂路径:如何通过引用不同父级中的另一个元素来查找元素?

Html Xpath-复杂路径:如何通过引用不同父级中的另一个元素来查找元素?,html,selenium,selenium-webdriver,xpath,xpath-2.0,Html,Selenium,Selenium Webdriver,Xpath,Xpath 2.0,因此,我面临一个挑战,问题是,网页有一种列表,其中有一些元素,旁边有文本和按钮,如下所示: 目标是通过参考特定文本点击按钮(因为按钮文本与所有“按钮”相同),例如,只点击“元素A”和“元素C”的按钮 我分析了HTML代码,尝试将xpath定位到所需的按钮有点复杂(至少对我来说) 本质上,我会有一个变量来存储元素文本的字符串(“元素a”、“元素B”…),然后我应该单击链接到它们的按钮 HTML代码如下所示(这些字符串是类,仅供参考,但它们表示每个节点,如div或span和嵌套的child;很抱歉

因此,我面临一个挑战,问题是,网页有一种列表,其中有一些元素,旁边有文本和按钮,如下所示:

目标是通过参考特定文本点击按钮(因为按钮文本与所有“按钮”相同),例如,只点击“元素A”和“元素C”的按钮

我分析了HTML代码,尝试将xpath定位到所需的按钮有点复杂(至少对我来说)

本质上,我会有一个变量来存储元素文本的字符串(“元素a”、“元素B”…),然后我应该单击链接到它们的按钮

HTML代码如下所示(这些字符串是类,仅供参考,但它们表示每个节点,如div或span和嵌套的child;很抱歉绘制得很乱)

所以,我在这里迷路了,我试图寻找父轴和祖先轴,但真的不知道如何正确地实现正确的xpath, 作为参考,我正在尝试Accomplish,尽管我确信它不是正确的语法

//span[(text()=“Element A”)]/(查找包含元素文本和元素按钮的主父级)/(查找包含“Element A”的父级中的“Button”文本)

问题是,因为lsit上有许多元素,每个主父元素都是不同的,所以我使用元素文本(“元素A”、“元素B”…)来定位特定的“按钮”

非常感谢您的任何建议! 也许有一些使用轴或谓词的提示

谢谢

HTML页面的可操作部分,因为放置所有HTML代码并不那么实用,它是巨大的 例如,我提到的元素是:

  • 塞努亚传奇地狱之刃2
  • 地狱之刃:塞努亚的牺牲&塞努亚的传奇
  • 地狱之刃塞努阿的牺牲
然后,我需要根据我所瞄准的元素文本来瞄准所需的按钮(带有文本“共享”),比如:地狱之刃塞努阿的牺牲

<div aria-busy="false" class="o8kakjsu role="listbox">
   <div class="a8s20v7p k5wvi7nf buofh1pr pfnyh3mw l9j0dhe7 du4w35lb">
      <div>
         <div class="rq0escxv">
            <div class="rq0escxv">
               <div class="rq0escxv ">
                  <div class="cbu4d94t e5nlhep0 aodizinl">
                     <div class="buofh1pr">
                        <div class="dati1w0a">
                           <div class="j83agx80 ">
                              <div class="knvmm38d">
                                 <h2 class="  " dir="auto">
                                    <div class="l9j0dhe7 stjgntxs ni8dbmo4" style="display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;">All</div>
                                 </h2>
                              </div>
                           </div>
                        </div>
                     </div>
                  </div>
               </div>
               <div class="">
                  <div class="muag1w35 b20td4e0">
                     <div data-vc-ignore-dynamic="1" style="padding-left: 8px; padding-right: 8px;">
                        <div class=" a8c37x1j">
                           <div class="">
                              <div class="">
                                 <div class="">
                                    <a aria-label="Senua's Saga Hellblade 2 After a long research, I finally did it!
Watch this tutorial: https://www.youtube.com/watch?v=a6B6XYbviRI

From there I was able to understand better the XPath logic and how to approach my challenge, the end Xpath is this one:

//span[(text()="Element A")]/parent::div/parent::div/parent::div/parent::div/parent::div//*[(text()="Button")]

经过长时间的研究,我终于做到了! 观看本教程:

从那时起,我能够更好地理解XPath逻辑以及如何应对我的挑战,最终的XPath是:

//div[.="Hellblade: Senua's Sacrifice & Senua's Saga"]/following::span[.="Share"][1]
对于那些不懂Xpath的人来说,这就像是从一个起点(一个元素)开始,然后精确地导航(比如父元素或其他任何情况),最后到达目标元素


如果有人知道如何做得更好,请!评论出来

根据您的示例,这是您应该使用的。“地狱之刃:塞努阿的牺牲和塞努阿的传奇”的例子:

我们查找包含字符串变量的元素,然后查找包含按钮文本的后续第一个元素

因此,这将为您的页面提供技巧:


请读一读为什么会这样。考虑使用格式化的基于文本的相关HTML、代码试验和错误堆栈跟踪更新问题。所以,我真的不想压倒某人,因为它是一个很长的代码,但是如果它有帮助,当然,在新的EddoWoW中添加一个示例代码,它也可以工作。如果可以,请推荐一些指南或视频,这些指南或视频有助于Xpath中的此类主题,或者我可以在本例中进一步研究的一些关键概念,谢谢!从这里开始:另外:如果您需要更多详细信息,请检查:
//span[.="Element A"]/following::*[.="Button"][1]