Selenium找到所有具有两个div的元素

时间:2016-06-23 22:25:31

标签: selenium selenium-webdriver

我正在尝试从网站收集文字和图片,以帮助收集与失踪人员相关的推文。这是问题所在:

有些推文没有图片,因此相应的<div class='c' ....>只有一个<div>...</div>。 有些推文有图片,因此相应的<div class='c' ....>有两个<div>...</div>,如下面的代码所示:

<div class='c' id="M_D*****">
  <div>...</div>

<div class='c' id="M_D*****">
  <div>...</div>
  <div>...</div>

我打算检查推文是否有图片,即查明相应的<div class='c' ....>是否有两个<div>...</div>

PS:以下代码用于收集所有文本和图片网址,但并非所有推文都有图片,所以我想通过解决上述问题来匹配它们。

tweets = browser.find_elements_by_xpath("//span[@class='ctt']")
graph_links = browser.find_elements_by_xpath("//img[@alt='img' and @class='ib']")

这是一项公益计划,旨在帮助失踪人士回家。

2 个答案:

答案 0 :(得分:0)

你提供的html可能还不够,但基于它我建议xpath://div[@id='M_D*****' and ./div//img]找到具有指定id的div并包含带有image的div。

但直接回答你的问题:

//div[./div[2] and not(./div[3])]会找到所有正好有2个div孩子的div

答案 1 :(得分:0)

通过分别收集文本和图像,我认为事后不可能将文本与相关图像相匹配。我建议采用不同的方法。我会搜索包含文本和可选图像的<div class='c'...>。一旦你有了#34;容器&#34; DIV,然后您可以获取文本并查看图像是否存在并将它们放在一起。如果没有所有相关的HTML,您可能需要调整下面的代码,但它应该让您了解如何处理此问题。

containers = browser.find_elements_by_css_selector("div.c")
for container in containers:
    print container.find_element_by_css_selector("span.ctt").text // the tweet text
    images = container.find_elements_by_css_selector("img.ib")
    if len(images) > 0 // see if the image exists
        print images[0].get_attribute("src") // the URL of the image
    print "-------------" // separator between tweets