如何单击每个链接并提取其中的内容-Python Selenium

时间:2018-07-20 18:47:47

标签: python selenium selenium-webdriver

我想从id =“ LinkNoticia”的所有链接中获取内容 实际上,我的代码加入了第一个链接并提取了内容,但是我无法访问其他内容。

我该怎么办?

这是我的代码(适用于1个链接)

from selenium import webdriver

driver= webdriver.Chrome("/selenium/webdriver/chromedriver")
driver.get('http://www.emol.com/noticias/economia/todas.aspx')

driver.find_element_by_id("LinkNoticia").click()

title = driver.find_element_by_id("cuDetalle_cuTitular_tituloNoticia")
print(title.text)

1 个答案:

答案 0 :(得分:0)

首先,页面具有多个具有相同ID的元素这一事实本身就是一个错误。 ID的全部要点对于页面上的每个元素都是唯一的。根据{{​​3}}:

  

id =名称   此属性为元素分配名称。 该名称在文档中必须唯一。

冗长的讨论是HTML specs

由于ID应该是唯一的,所以Selenium的大多数(全部?)实现都只能用于查找具有给定ID(例如find_element_by_id)的一个元素。我从未见过通过ID查找多个元素的功能。因此,您不能直接将ID用作定位器,需要使用允许多个元素定位的现有功能之一,并将ID用作允许您选择一组元素的某些属性。您的选择是:

find_elements_by_xpath
find_elements_by_css_selector

例如,您可以这样更改搜索:

links = driver.find_elements_by_xpath("//a[@id='LinkNoticia']");

这将为您提供完整的链接集,并且您需要遍历它们以检索实际的链接(href)。请注意,如果您仅单击每个链接,就会离开该页面,并且links中的引用将不再有效。因此,您可以执行以下操作:

  1. 通过链接构建hrefs的列表:

    hrefs=[]
    for link in links:
        hrefs.append(link.get_attribute("href"))
    
  2. 浏览每个href以检查其标题:

    for href in hrefs:
        driver.get(href);
        title = driver.find_element_by_id("cuDetalle_cuTitular_tituloNoticia")
        # etc