Python selenium webdriver没有始终选择元素,即使它在那里

时间:2016-07-11 12:41:39

标签: python html python-3.x selenium selenium-webdriver

我正在开发一个web scraper来从html文件中的源标记收集src链接并将其添加到列表中。

该网站的视频嵌套在一堆div下,但所有网页最终都会出现:

<video type="video/mp4" poster="someimagelink" preload="metadata" crossorigin="anonymous">
    <source type="video/mp4" src="somemp4link">
</video>

我目前的方法是登录网站,转到包含视频页面链接的页面,逐个访问每个视频页面并尝试查找源标记并将其添加到列表中。

import time
import requests
from bs4 import BeautifulSoup
from selenium import webdriver

browser = webdriver.Firefox()

# A bunch of log in and get list of video page links, which works fine

soup = BeautifulSoup(browser.page_source)
for i in range(3):
    browser.get(soup('a', {'class', 'subject__item'})[i]['href'])
    vsoup = BeautifulSoup(browser.page_source)
    print(vsoup('source'))
    browser.get('pageWithVideoPages')

    # This doen't add to a list, it just goes to the video page,
    # tries to find the source tag and print it out.
    # Then go back to original page and start loop again.

但是我得到了这个:

[<source src="themp4link" type="video/mp4"></source>]
[]
[]
[]

所以第一个工作正常,然后所有其余的只返回黑名单......好像没有源标记,但是手动检查检查员会发现那里有源标记。

重复这一点,我现在得到:

[<source src="http://themp4link" type="video/mp4"></source>]
[]
[<source src="http://themp4link" type="video/mp4"></source>]

该网站需要启用javascript才能加载内容(这就是我使用webdriver执行此操作的原因)...这可能与此有关吗?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您可能需要等待所需的网络元素。您应该使用WebDriverWait进行探索。