我正在使用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节点应该是我在搜索中找到的节点的子节点,我应该能够以某种方式遍历层次结构以获取值,我只是不确定如何。
答案 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
获取第一个元素,然后从该元素的上下文中搜索跨度的元素和跨度的子元素