Как сделать полный скриншот страницы с помощью библиотеки AShot через Selenium и Java

Я попробовал приведенный ниже код для создания скриншота всей страницы. Но захватывается только видимая область,

public void Fullscreen (WebDriver driver) 
{
    try {
        final Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
        final BufferedImage image = screenshot.getImage();
        ImageIO.write(image, "PNG", new File("D:\\" + "AShot_BBC_Entire.png"));           
    } catch(Exception e){
        System.out.println(e.getMessage());
    }
}

person Ismail    schedule 17.08.2018    source источник


Ответы (2)


При работе с Selenium Java Client v3.14.0, ChromeDriver v2.41, Chrome v 68.0 с использованием ashot-1.4.4.jar вот пример создания полного снимка экрана как по горизонтали, так и по вертикали с помощью ChromeDriver и aShot Library по url https://jquery.com/:

  • Блок кода:

    import java.io.File;
    import javax.imageio.ImageIO;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    import ru.yandex.qatools.ashot.AShot;
    import ru.yandex.qatools.ashot.Screenshot;
    import ru.yandex.qatools.ashot.shooting.ShootingStrategies;
    
    public class ashot_CompletePage {
    
        public static void main(String[] args) throws Exception {
    
            System.setProperty("god.bless.you", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            ChromeOptions options = new ChromeOptions();
            options.addArguments("start-maximized");
            options.addArguments("disable-infobars");
            options.addArguments("--disable-extensions"); 
            WebDriver driver =  new ChromeDriver(options);
            driver.get("https://jquery.com/");
            new WebDriverWait(driver, 20).until(ExpectedConditions.titleContains("jQuery"));
            Screenshot myScreenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(100)).takeScreenshot(driver);
            ImageIO.write(myScreenshot.getImage(),"PNG",new File("./Screenshots/elementScreenshot.png"));
            driver.quit();
        }
    }
    
  • Скриншоты:

скриншот


Ссылка

Вы можете найти подробное обсуждение в Как сделать снимок экрана с помощью Selenium WebDriver.

person DebanjanB    schedule 17.08.2018
comment
Я новичок в селене, мне нужен тот же код, который вы написали здесь. Я застрял в запуске вашего кода. Он показывает ошибку импорта. Я разрешил все операторы импорта, кроме selenium.webdriver, то есть import org.openqa.selenium.WebDriver;. Можете ли вы помочь мне, где я могу получить этот пакет? - person Mohamed Thasin ah; 26.07.2019
comment
Исключение в потоке main javax.imageio.IIOException: невозможно создать ImageOutputStream! на java.desktop/javax.imageio.ImageIO.write(ImageIO.java:1551) на WorldAirfaresTests.ashot_CompletePage.main(ashot_CompletePage.java:28) - person Justin Lambert; 30.09.2020
comment
@JustinLambert Давайте обсудим это в чате Selenium - person DebanjanB; 20.10.2020
comment
Посетив это несколько лет спустя, было бы лучше использовать driver.close(), чем driver.quit() (до конца всей вашей программы) - person dmanexe; 06.12.2020

Хотите добавить ответ на случай, если вы не знаете, какой экран используется. (сетчатка или нет)

В этом случае вам нужно найти devicePixelRatio окна браузера:

Object output = ((JavascriptExecutor) webDriver).executeScript("return window.devicePixelRatio");
String value = String.valueOf(output);
float windowDPR = Float.parseFloat(value);

Затем вы можете использовать ShootingStrategy с масштабированием;

ShootingStrategy shootingStrategy = ShootingStrategies.viewportPasting(ShootingStrategies.scaling(windowDPR), 100)
person Degard    schedule 25.11.2020
comment
Добавление опции масштабирования помогло! - person Sapnesh Naik; 09.02.2021