我想以编程方式指示Firefox访问URL列表(例如,在文本文件中定义),并且每个URL都将页面保存到磁盘或打印它。
我知道Selenium提供了捕获页面截图的功能,但我想知道是否可以使用浏览器的原生保存和打印功能。
如果Selenium没有提供这样的功能,那么任何其他工具是否允许我定义一个由Firefox执行的脚本并获得类似的结果?
答案 0 :(得分:10)
可以在firefox中启用静默打印以打印到默认打印机,绕过打印对话框。
所需的firefox偏好设置为print.always_print_silent
,可以使用selenium进行设置,如下所示:
import org.openqa.selenium.JavascriptExecutor;
/* ... */
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("print.always_print_silent", true);
WebDriver driver = new FirefoxDriver(profile);
现在只需导航到网页并使用javascript调用print:
driver.get("http://www.google.com");
((JavascriptExecutor)driver).executeScript("window.print();");
此外,将其与免费的PDF打印机(例如novaPDF)连接到print without displaying the Save as dialog,并自动将PDF保存到预定义的位置。
答案 1 :(得分:1)
通常您会使用Sikuli API执行此操作。开源社区(也就是Mozilla基金会)正在开发一个名为Marionette的项目,据说可以让你在不使用屏幕截图匹配的情况下做这些事情,但它仍然是alpha,他们仍在使用它,Chrome和IE还没有登录它爱好。
应该注意的是,在本机文件下载中,您实际上不需要测试已经过良好测试的另存为对话框的浏览器功能。 Selenium测试人员通常做的只是使用Apache HttpUtils或类似的东西下载文件,并在下载步骤中绕过浏览器。然后您不需要使用“另存为”对话框,它将跨浏览器工作。只需使用selenium获取下载URL并使用Java代码下载它。
答案 2 :(得分:0)
如果您可以使用png格式,则可以获取整页屏幕截图。
import selenium.webdriver
import selenium.common
options = selenium.webdriver.firefox.options.Options()
# options.headless = True
with selenium.webdriver.Firefox(options=options) as driver:
driver.get('http://google.com')
time.sleep(2)
root=driver.find_element_by_tag_name('html')
root.screenshot('full page screenshot.png')
答案 3 :(得分:0)
也许这可以帮助您... https://stackoverflow.com/a/64987078/6003328
我用python做的... 基本上,我更改每个打印的 about:config 设置,调整要创建的pdf的文件名,并将打印机设置为always_print_silent:true ...