通过href无法获取来自driver.find_elements的所有链接

时间:2017-05-09 18:17:22

标签: python selenium xpath webdriver

python和selenium webdriver的新手。我正在尝试检查我自己的网页上的所有链接,并使用它的http状态代码来查看它是否是一个断开的链接。我正在运行的代码(从原始代码开始减少)......

firsts [] = []
firsts [(x:xs)] = [x]
firsts ((x:xs):xss) = x: firsts xss


> firsts [[1,2,3], [7,6,8], [0,3,4]]
[1,7,0]

html看起来像......

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import requests

links = driver.find_elements_by_xpath("//a[@href]")
while len(links):
    url = links.pop()
    url = url.get_attribute("href")
    print(url)

当我运行我的脚本时,唯一可以打印的链接是Google链接,而不是损坏的链接。我做了一些测试用例,似乎只有链接中包含短语“ http://www ”的链接才会被打印出来。虽然我可以更改我的网页上的href链接以包含此短语,但我有具体原因说明为什么不能将它们包括在内。

如果我可以使用<ul> <li><a href = "https://www.google.com/">visit google</a></li> <li><a href = "broken">broken link ex</a></li> </ul> 获取所有链接(使用或不使用“http://www”短语),那么我可以稍后在脚本中转换这些链接以包含该短语然后获取http状态代码。

我看到其他帖子,但没有一个能帮助我克服这个障碍。任何澄清/解决方法/提示都将不胜感激。

1 个答案:

答案 0 :(得分:3)

以下列表理解应该为您提供所有链接的列表。它找到所有锚标签并生成一个包含&#39; href&#39;每个元素的属性。

links = [elem.get_attribute("href") for elem in driver.find_elements_by_tag_name('a')]

这里是同样的事情,细分为小步骤并用作函数:

def get_all_links(driver):
    links = []
    elements = driver.find_elements_by_tag_name('a')
    for elem in elements:
        href = elem.get_attribute("href")
        links.append(href)
    return links