当前位置: 首页 > 知识库问答 >
问题:

Python:如何在Selenium中使用Xpath选择最近的邻居元素?

亢胤运
2023-03-14

我有一个HTML页面中的一长串表。以下只是列表的一小部分。

<ul id="exportContentTree" data-space-key="VAG" data-content-tree-src="/spaces/exportspacetree.action" data-content-tree-loaded="true">
<li class="content-tree-node">
   <ul class="content-tree-node-children">
      <li class="content-tree-node">
        <input type="hidden" name="contentToBeExcluded" value="">
        <input type="checkbox" name="contentToBeExported" class="exportContentTreeCheckbox" value="134258951" checked="checked">
        <label class="label" for="contentToBeExported">
          <a href="https://ewiki.abc.com/display/VAG/Getting+Started">Getting Started 
          </a>
        </label>
    </li>
  </ul>
  <ul class="content-tree-node-children">
    <li class="content-tree-node">
      <input type="hidden" name="contentToBeExcluded" value="">
      <input type="checkbox" name="contentToBeExported" class="exportContentTreeCheckbox" value="137464227" checked="checked">
      <label class="label" for="contentToBeExported">                    
        <a href="https://ewiki.abc.com/display/VAG/Queue+Management">Queue Management
        </a>
      </label>
   </li>
  </ul>
<ul class="content-tree-node-children">                    
    <li class="content-tree-node">
        <input type="hidden" name="contentToBeExcluded" value="179758339">
        <input type="checkbox" name="contentToBeExported" class="exportContentTreeCheckbox" value="179758339" checked="checked">
        <label class="label" for="contentToBeExported">                        
          <a href="https://ewiki.abc.com/pages/viewpage.action?pageId=179758339"># Archive #
          </a>
        </label>        
    </li>
</ul>
</li>
</ul>

我想检查

在上面给出的代码中,在理想的情况下,Selenium应该选中“入门”和“队列管理”的复选框,而不是“#存档#”

我使用了以下代码,以便Selenium可以遍历列表并选中所有复选框。

for topic in browser.find_elements_by_class_name('content-tree-node-children'):
        topic_checkboxes = topic.find_elements_by_xpath('//*[@id="exportContentTree"]/li/*[@class="content-tree-node-children"]/li/*[@class="exportContentTreeCheckbox"]')
for checkbox in topic_checkboxes:
        checkbox.click()

我试图在第二个for循环中添加一个if语句,以检查标签之间的链接文本是否以#开头,这不起作用:

for checkbox in topic_checkboxes:
  if checkbox.find_element_by_xpath('//*[@id="exportContentTree"]/li/*[@class="content-tree-node-children"]/li/*[@class="exportContentTreeCheckbox"]/following-sibling::label/*').text.startswith('#') == False:
    checkbox.click()

有人能告诉我哪里做错了什么吗?是Xpath表达式还是其他什么?


共有1个答案

屠锦
2023-03-14

下面是xpath:

//ul[@class='content-tree-node-children']/descendant::label[@for='contentToBeExported']//a[not(starts-with(text(), '#'))]

将仅选择在开头中没有#标记。

我们使用not()start-with()来避免任何以#作为起始文本的锚标记。

 类似资料:
  • 我正在尝试使用jgraph T解决一个链接预测问题。我正在根据两个节点的邻居计算两个节点之间的相似性。每个节点都有一些属性。计算变得太多了,因为一些节点有大约700个邻居,而我有4500个这样的节点。我有谁对的700K边,我计算相似性。 现在,我不想使用节点的所有邻居,我只想使用每个节点的k个最近邻居来计算一对节点之间的相似度。我可以根据边共享的两个节点的属性数,或节点之间长度为n的最短路径数等,

  • 问题内容: 考虑使用以下HTML: 我想单击abc,但是包装div可能会更改,所以 不是我想要的 我试过了: 但这不适用于更深层的嵌套 有任何想法吗? 问题答案: 的HTML 您可以将 XPATH 用作: 输出 也就是说,您的Python代码应为:

  • 问题内容: 我想创建一个Selenium测试,以使用AOL邮件测试我们的扩展。我设法登录到AOL并撰写了电子邮件,但是我还需要在iframe中的编辑器中选择元素。我检查了一下,即使打开了编辑器,以下测试也失败了: 我得到了错误。如何通过Xpath(或通过Selenium以任何其他方式)选择iframe的主体和其他元素? 问题答案: 在切换到之前,您无法浏览。您的xPath 将不会起作用,因为代码位

  • 问题内容: 我正在尝试使用Selenium(在Python中)从网站中提取一些信息。我一直在使用XPaths选择元素,但是在使用以下同级选择器时遇到了麻烦。HTML如下: 我可以选择“摄影师的名字” 我试图选择标记后的文本部分(示例中为“ Ansel Adams”)。我以为我可以使用以下同级选择器,但收到以下错误: 有什么想法为什么这不起作用? 问题答案: @RossPatterson是正确的。麻

  • 如何只选择父级而不选择子级? List summaryLinks=summary.findelements(by.xpath(“”));

  • 问题内容: 我有一个GWT应用程序,正在尝试使用Selenium编写一些测试。 我正在使用XPath来标识测试页面上的元素。使用将无效,因为这些值是由GWT自动生成的,并且可以更改。当我意识到我可以按其标签找到按钮时,事情进展顺利,如下所示: 但是,当我开始运行多个测试时,我开始遇到问题。我意识到问题是,一旦Javascript生成的GWT应用程序的所有不同“页面”都保留在HTML中的隐藏元素中。