使用Selenium和Webdriver截取Flash对象的屏幕截图

7
当我使用Selenium Firefox Webdriver进行截图时(是的,Firefox有flash插件),它不会显示flash对象,而只会显示一个白色框。我需要做些什么或安装什么东西吗?
我正在使用以下代码:
from selenium import webdriver

def webshot(url, filename):
    browser = webdriver.Firefox()
    browser.get(url)
    browser.save_screenshot(filename)
    browser.quit()
2个回答

4
为了让这个工作正常运行,我必须使用wmode=transparent属性。但显然,这取决于您是否可以编辑您尝试截屏的网页的源代码。
要编辑现有的HTML页面,请将WMODE参数添加到HTML代码中。
将以下参数添加到OBJECT标签中:
 <param name="wmode" value="transparent">

您好, ns

3
我按照nonshatter的建议解决了这个问题。我截取了外部页面的屏幕截图,因此我必须在运行时将wmode更改为“transparent”。因此,我需要使用javascript更改所有的EMBED和OBJECT。我找到了这个不错的脚本:http://www.onlineaspect.com/2009/08/13/javascript_to_fix_wmode_parameters/ 所以我只需制作一个脚本来执行它,并上传到“mysite.com/myscript.js”,现在工作的脚本在这里:
from selenium import webdriver

script = '''
    var s = document.createElement('script');
    s.src = 'http://mysite.com/myscript.js';
    document.body.appendChild(s);
'''

def webshot(url, filename):
    browser = webdriver.Firefox()
    browser.get(url)
    browser.execute_script(script)
    browser.save_screenshot(filename)
    browser.quit()

据我初步了解,从JavaScript代码中可以看出,该方法适用于几乎所有的Flash情况。虽然我只做了一些测试,但至少可以证实它在截取正在播放视频的YouTube页面时是有效的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接