如何使用Selenium Webdriver(Python)验证另一个HTML标记中是否存在某个HTML标记?

时间:2014-06-23 05:00:57

标签: python selenium xpath scrapy

基本上,我想知道标签是否在标签内。数据是动态生成的,这就是我使用selenium webdriver的原因。 HTML看起来像:

<td class="something">
    <span></span>
</td>

但问题是,<span>标记中有时没有<td>标记。我想知道何时发生这种情况以及何时不发生这种情况。我正在使用scrapy(并使用xpath查找元素)来抓取网站,因此数据将进入json文件的字典中。因此,当完成抓取时,json文件中的结果数据将如下所示:

{"data": ["*", " ", "*", " ", " ", " "]}

*对应于<span>标记中存在<td>标记的实例,而空格对应于<span>标记不存在的实例。如果需要进一步澄清,请告诉我,并感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

保罗的例子应该让你接近,但是,你为什么要反复选择?等待你想要发生的条件并设置超时以验证一致的性能水平对我来说更有意义。

    WebDriverWait wait = new WebDriverWait([Instance of IWebDriver goes here], TimeSpan.FromSeconds(5));
    wait.Until (d=> td[@class="something"][span]);

然后在页面上执行其他操作

    wait.Until (d=> td[@class="something"][not(span)]

但是,我个人只喜欢使用非常具体的选择器而不是通用选择器。 td / span可以是一个常见的结构,并不能真正告诉“发生了什么”。我会选择动态显示的文本或属性并映射到元素中的那些文本或属性,以便我可以确定在每种情况下我都得到了我想要的。每个应用程序都不同,因此您可能没有这个选项。