【问题标题】:Mimicking HTML5 Video support on PhantomJS used through Selenium in Python在 Python 中通过 Selenium 模拟 PhantomJS 上的 HTML5 视频支持
【发布时间】:2016-09-03 15:18:34
【问题描述】:

我正在尝试提取在 video 标签中找到的 HTML5 视频的源链接。使用 Firefox webdrive ,我能够得到想要的结果,即 -

[<video class="video-stream html5-main-video" src='myvideoURL..'</video>]

但如果我使用 PhantomJS -

 <video class="video-stream html5-main-video" style="width: 854px; height: 480px; left: 0px; top: 0px; -webkit-transform: none;" tabindex="-1"></video>

我怀疑这是因为 PhantomJS 缺乏 HTML5 视频支持。无论如何我可以欺骗网页认为支持 HTML5 视频以便它生成 URL 吗?或者我可以做点别的吗?

试过了

try:

    WebDriverWait(browser,10).until(EC.presence_of_element_located((By.XPATH, "//video")))


finally:


    k = browser.page_source


    browser.quit()


soup = BeautifulSoup(k,'html.parser')


print (soup.find_all('video'))

【问题讨论】:

  • 你能提供一个测试链接吗?
  • @Rafael,我尝试的链接实际上是一个 YouTube 视频。我使用了 Firefox 33,它似乎在检查元素时生成了源 URL。

标签: python selenium phantomjs


【解决方案1】:

Firefox 和 phantomjs webdrivers 与 Selenium 通信的方式完全不同。

当使用 Firefox 时,它会在加载了一些 javascript 后返回页面已完成加载的信号

在 phantomjs 中不同,它向 Selenium 发出信号表明页面已完成加载,因为它能够获取页面源,这意味着它不会加载任何 javascript。

您需要做的是Wait 让元素在提取之前出现,在这种情况下它将是:

video = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//video")))

编辑:

Youtube在决定是否提供源之前首先检查浏览器是否支持视频内容,虽然here描述了一个解决方法

【讨论】:

  • 很抱歉,我该如何处理这个视频对象? .我试过(有问题的编辑)但仍然得到相同的结果
  • video 对象是被选中的元素,BeautifulSoup 中不需要解析。但它应该按照您的方式工作,如果您删除 try 子句,它是否返回元素未找到的错误?
  • 不,它不会返回错误,而是 -[] 即 - 正是我之前得到的
  • 但是,如果它适用于 Phantomjs,你就可以开始了,这不是你想要的吗?编辑:哦,它不会生成 URL,是的,这可能是因为 PhantomJS 没有图形支持
  • 有什么我可以做的吗?也许是另一个支持 HTML5 或 Flash 的无头浏览器?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
相关资源
最近更新 更多