【问题标题】:xpath/python search then grab child nodes?xpath/python 搜索然后抓取子节点?
【发布时间】:2018-03-21 11:40:07
【问题描述】:

我正在使用 python 和 selenium 开发刮板,但在遍历 xpath 时遇到问题。我觉得这应该很简单,但我显然遗漏了一些东西。

我能够很好地浏览我正在浏览的网站,但我需要根据 XPATH 搜索获取一些 SPAN 文本。

我可以点击相应的单选按钮(在这种情况下是第一个)

(driver.find_elements_by_name("start-date"))[0].click()

但我还需要捕获在 span 标签中捕获的单选按钮旁边的文本。

<label>
    <input type="radio" name="start-date" value="1" data-start-date="/Date(1507854300000)/" data-end-date="/Date(1508200200000)/" group="15" type-id="8">
        <span class="start-date">
            10/12/2017<br>Summary text
        </span>
</label>

在上面的示例中,我希望根据我用于查找单选按钮的 find_elements_by_name 搜索将“10/12/2017”和“摘要文本”捕获到 2 个字符串变量中。

然后我遇到了第二个类似的集合问题,我需要在按类名搜索后捕获跨度标签。这会在页面上找到合适的父节点:

(driver.find_element_by_xpath("//div[@class=\"MyClass\"]"))

根据该搜索返回的节点,我想从它下面的 span 标签中获取“Text 1”和“Text 2”。

<div class="MyClass">
    <span>
        <span>Text 1</span>
    </span>
        <span class="bullet">
    </span>
    <span>
        <span>Text 2</span>
    </span>
</div>

我是 xpath 的新手,但据我所知,我正在寻找的跨度节点应该是我在搜索中找到的节点的子节点,并且我应该能够以某种方式遍历层次结构以获取值,我只是不确定如何。

【问题讨论】:

  • 好问题,因为两者都在同一个跨度

标签: python python-2.7 selenium xpath


【解决方案1】:

其实很简单,所有的WebElement 对象和WebDriver 对象都有相同的find_element_by_* 方法,主要区别在于元素方法将上下文更改为该元素,这意味着它只会有子元素被选元素。

考虑到这一点,您应该能够做到:

my_element = driver.find_element_by_class_name('MyClass')
my_spans = my_element.find_elements_by_css_selector('span>span')

这里发生的情况是,我们获取类MyClass 的第一个元素,然后从该元素的上下文中搜索作为跨度和跨度子级的元素

【讨论】:

    【解决方案2】:

    您可以尝试使用以下 x-path。

    //div[@class='MyClass']/span[1]/span  ---- To get Text 1
    //div[@class='MyClass']/span[3]/span  -----To get Text 2
    

    (//div[@class='MyClass']/span/span)[1] ---- To get Text 1
    (//div[@class='MyClass']/span/span)[2] ---- To get Text 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 2012-09-17
      相关资源
      最近更新 更多