我正在尝试提取在视频标签中找到的 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'))
最佳答案
Firefox 和 phantomjs webdrivers 与 Selenium 通信的方式完全不同。
当使用 Firefox 时,它会在加载一些 javascript 后返回页面加载完成的信号
在 phantomjs 中不同,它会在 Selenium 能够获取页面源代码后立即向 Selenium 发出页面已完成加载的信号,这意味着它不会加载任何 javascript。
你需要做的是Wait对于在提取元素之前存在的元素,在这种情况下它将是:
video = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//video")))
编辑:
Youtube 在决定是否提供源之前首先检查浏览器是否支持视频内容,虽然描述了一个解决方法 here
关于python - 在 Python 中通过 Selenium 模拟 PhantomJS 上的 HTML5 视频支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39308447/