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状态代码。
我看到其他帖子,但没有一个能帮助我克服这个障碍。任何澄清/解决方法/提示都将不胜感激。
答案 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