【问题标题】:How to select element by specific child/descendant element如何通过特定的子/后代元素选择元素
【发布时间】:2019-04-27 17:37:02
【问题描述】:

<a class="author " name="baut001" href="#!">
   <span class="content">
      <span class=" given-name">first name</span>
      <span class=" surname">Last name</span>
      <svg focusable="false" viewBox="128" width="19.125" height="24" class="icon ">
         <path d="m22.6 77"></path>
      </svg>
   </span>
</a>
<a class="author" name="baut002" href="#!">
<span class="content">
<span class="text given-name">first name</span>
<span class="text surname">Last name</span>
<span class="author-ref" id="baff002"><sup>a</sup></span>
</span>
</a>
<a class="author" name="baut003" href="#!">
   <span class="content">
      <span class=" given-name">first name</span>
      <span class=" surname">Last name</span>
      <svg focusable="false" viewBox="128" width="19.125" height="24" class="icon ">
         <path d="m22.6 77"></path>
      </svg>
   </span>
</a>

共有三个&lt;a&gt;标签,其中两个包含&lt;svg&gt;标签,我想点击那些元素。

【问题讨论】:

  • 1.找出所有a 标签。 2. 现在迭代所有a 标签并检查它是否有svg 可用或不可用? 3. 如果可用,然后单击a 否则跳过。这是解决问题的一种方法。
  • "3. 如果可用,然后单击 a else 跳过",这就是我想要的,如何检查它是否具有“svg”标签。
  • @scooprealm ...点击那些元素...您要准确点击哪个元素?

标签: python selenium selenium-webdriver web-scraping


【解决方案1】:

您可以在定位器中指定&lt;svg&gt; 标签。

你可以使用css_selector

driver.find_elements_by_css_selector('.author svg')

xpath

driver.find_elements_by_xpath('//a[@class="author"]//*[local-name()="svg"]')

【讨论】:

  • 其实XPath是不正确的! svg 标签不是来自标准的 HTML 命名空间,所以你不能用//svg 选择它,你需要//*[local-name()="svg"]。此外,您的选择器打算定位 svg 是链接的后代,而不是 包含 svg 的链接
【解决方案2】:

如果您想定位包含另一个节点的节点,您可能需要使用以下格式的 XPath

  1. 按子节点:

    //parent_node[child_node]
    

    //parent_node[child::child_node]
    
  2. 按后代节点:

    //anscestor_node[.//descendant_node]
    

    //anscestor_node[descendant::descendant_node]
    

在你的情况下选择包含svg后代节点的a节点,你可以试试;

links_with_svg = driver.find_elements_by_xpath('//a[.//*[local-name()="svg"]]')

links_with_svg = driver.find_elements_by_xpath('//a[descendant::*[local-name()="svg"]]')

【讨论】:

  • 有一天我会通过询问有关 xpath 的一个非常困难的问题来危及您的声誉。但是,您的解决方案总是会带来一些新的东西来学习@sir Andersson。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
  • 2010-11-27
  • 1970-01-01
  • 2018-06-15
  • 2011-11-07
  • 1970-01-01
相关资源
最近更新 更多