我希望只收到符合特定条件的链接

I wish to receive only links that match a specific criteria

我有这个 Selenium 代码:​​

driver.get("https://www.youtube.com/")

link_mix = driver.find_elements_by_tag_name('a')

for linked in link_mix:
    print(linked.get_attribute('href'))

我希望获得形式为 youtube.com/contentcodexxxxxx 的链接,而不是任何其他超链接,例如 header 链接。

Selenium 不提供使用任何过滤器查找 link 标签的任何方式。

相反,您必须遍历检索到的元素并丢弃任何不需要的元素。

driver.get("https://www.youtube.com/")

link_mix = driver.find_elements_by_tag_name('a')

for linked in link_mix:
    if not linked.get_attribute('href').startswith('youtube.com/contentcode'):
        continue
    print(linked.get_attribute('href'))

您可以从多个角度处理这个问题。

第一个非常简单的方法是在 URL.

中检查该字符串
link_mix = [x for x in link_mix if "youtube.com/contentcode" in x.get_attribute('href')]

此外,而不是做

link_mix = driver.find_elements_by_tag_name('a')

您可以通过指定要查找的链接所在的 html 元素来缩小范围。

html_body = driver.find_element_by_tag_name('body')
link_mix = html_body.find_elements_by_tag_name('a')

这只会找到 html 正文内的超链接,如果网页包含这些链接,则会忽略页眉或页脚中的链接。如果您知道这些链接可以在另一个 html 元素中进一步缩小,您可以替换第一个“find_element”。请注意 find_element_by_tag_name returns 如果没有找到这样的标签,则会出现异常。