从xpath文本中获取多个Href

时间:2018-03-21 15:01:45

标签: python selenium xpath

这是交易:我有一个网站,我想提取一些Href,特别是那些有文本“LEIAESTEDEDIÇÃO”的网站,就像在这个HTML中一样。

<a href="http://acervo.estadao.com.br/pagina/#!/20120824-43410-spo-1-pri-a1-not/busca/ministro+Minist%C3%A9rio" title="LEIA ESTA EDIÇÃO" style="" class="" xpath="1">LEIA ESTA EDIÇÃO</a>

这是我的代码,这是非常错误的,我正在做一些测试,看它是否有效。 顺便说一句:它必须是硒。

driver = webdriver.Chrome()
x = 1


while True:

    try:

    link = ("http://acervo.estadao.com.br/procura/#!/ministro%3B minist%C3%A9rio|||/Acervo/capa//{}/2000|2010|2010///Primeira").format(x)
    driver.get(link)
    time.sleep(1)
    xpath = "//a[contains(text(),'LEIA ESTA EDIÇÃO')]"
    links = driver.find_elements_by_xpath(xpath)
    bw=('')
    for link in links:
        bw += link._element.get_attribute("href")
        print (bw)  

    x = x + 1

    time.sleep(1)

except NoSuchElementException:
    pass

print(x)
time.sleep(1)

2 个答案:

答案 0 :(得分:3)

您可以尝试以下代码来获取所需的输出:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver.get(link)
links = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.LINK_TEXT, "LEIA ESTA EDIÇÃO")))
references = [link.get_attribute("href") for link in links]

答案 1 :(得分:1)

我真的建议你阅读selenium docs,那里的解释简单明了。

有些地方可以改进您的代码:

  1. 你真的不需要真的。一旦你提取了你完成的所有链接,就想想吧。
  2. try / except未正确缩进。
  3. 您应该获得一个链接列表并从中提取文本hrefs。 一个简单的1衬里可以(如果至少有1个带有该文本的标签):

    [a_tag.get_attribute('href') for a_tag in driver.find_elements_by_link_text("LEIA ESTA EDIÇÃO")]
  4. bw:它将成为所有href中的1个连接字符串,我很确定它不是您要查找的内容,而是列表或其他数据结构。

  5. 我建议在python中阅读有关字符串连接的this answer

    1. 总的来说,似乎你可以改善你的python。我真的建议在进入selenium之前更熟悉语言和流程:)