xpath / python搜索然后抓住子节点?

时间:2017-10-10 06:56:51

标签: python python-2.7 selenium xpath

我正在使用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>

在上面的示例中,我希望捕获&#34; 10/12 / 2017&#34;和&#34;摘要文本&#34;基于find_elements_by_name搜索的2个字符串变量我用来找到单选按钮。

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

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

根据该搜索返回的节点,我想抓住&#34;文本1&#34;和&#34;文字2&#34;来自它下面的span标签。

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

我是xpath的新手,但是从我可以收集到的内容来看,我正在寻找的span节点应该是我在搜索中找到的节点的子节点,我应该能够以某种方式遍历层次结构以获取值,我只是不确定如何。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用以下x路径。

//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

答案 1 :(得分:0)

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

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

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

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