在Selenium中以放大状态进行全页面截图

3

我正在使用Selenium Firefox WebDriver加载网页,然后将页面缩放到500%,然后希望以500%的缩放分辨率拍摄页面截图,但无法正常工作。

DesiredCapabilities desiredCapabilities = DesiredCapabilities.firefox();
desiredCapabilities.setPlatform(Platform.WINDOWS);
WebDriver driver = new FirefoxDriver(desiredCapabilities);
driver.get(url);
driver.manage().window().setSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height));
WebElement html = driver.findElement(By.tagName("html"));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));

这段代码可以缩放网址。 现在我想在缩放后的分辨率下截取屏幕截图。

File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("c:\\"+url.substring(url.lastIndexOf("/"),url.lastIndexOf("."))+".png"));

这是在正常分辨率下拍摄屏幕截图,而不是放大分辨率。

请有人帮忙,如何在selenium中实现这一点,或者即使selenium是否是适合我的要求的正确工具。如果不是,请建议其他可行的工具。


你能解释一下这行代码的作用吗?WebElement html = driver.findElement(By.tagName("html")); - Rupesh Shinde
@RupeshShinde - 我认为这是通过标签查找整个HTML页面,因此它要求Webdriver缩放整个HTML页面。 - Helping Hands
@RupeshShinde - HelpingHands说得对。它是为了获取HTML元素,即整个页面,然后缩放到页面中。 - Gaurav Bansal
如果你改用 Chrome() 而不是 Firefox(),会有什么区别吗?谢谢。 - alecxe
@alecxe - 在Chrome中缩放不起作用,显示错误:未知错误:无法聚焦元素。 - Helping Hands
3个回答

1
你可以测试这个:

String script = "var page = this;page.zoomFactor = 0.9;";
((PhantomJSDriver)driver).executePhantomJS(script);

zoomFactor缩放了屏幕截图。


0

以下代码对我有效。

    File scrFile2 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    // Now you can do whatever you need to do with it, for example copy somewhere
    FileUtils.copyFile(scrFile2, new File("c:\\tmp\\screenshot.png"));

我刚打开了一个页面,并以原始大小拍了一张截图,即使我手动缩放和使用您的代码(用于缩放),我也得到了缩放后的分辨率截图。

你提供的代码和我使用的代码没有任何变化,但是它不能满足我的需求。我的要求是,当将页面以正常分辨率转换为图像时,其像素为xy,但当放大到500%时,转换后的图像应该有5x5y个像素,但实际上并没有发生这种情况。 - Gaurav Bansal
是的 Gaurav,我没有改变任何东西,但它对我起作用了。我得到了缩放页面的截图。为了缩放,我通过暂停执行一段时间,并使用您的代码手动缩放它。无论哪种方式都对我起作用。 - naveenz

0
我可以使用这个命令进行缩放:
set_pref("layout.css.devPixelsPerPx", "2.2")

这段代码不是Java的,而是用于Firefox的。

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