Я пытаюсь загрузить PDF-файл страницы, используя Selenium 4 с протоколом Chrome devtools.
После вызова Driver.get (url) , я жду, когда рендеринг завершит:
Thread.sleep(60000); // wait for 1 minute to allow the page to finish rendering.
Page.PrintToPDFResponse pdfResponse = devTools.send(
Page.printToPDF(
Optional.empty(), Optional.empty(), Optional.empty(),
Optional.of(1), Optional.of(8.27), Optional.of(11.7),
Optional.of(0.0), Optional.of(0.0), Optional.of(0.0), Optional.of(0.0),
Optional.empty(), Optional.empty(), Optional.empty(),
Optional.empty(), Optional.empty(), Optional.empty()
)
);
< /code>
Тем не менее, метод не работает в течение нескольких секунд, даже не близко к значению тайм -аута, которое я установил с Future.get (...). Исключено:
Нет проблем, когда страница, которая будет напечатана как PDF, невелика, но когда контент становится большим, происходит время -схема.
java.util.concurrent.TimeoutException
Build info: version: '4.18.1', revision: 'b1d3319b48'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '5.15.0-143-generic', java.version: '17.0.2'
Driver info: driver.version: unknown
< /code>
Любая справка была бы очень оценена! Cdp < /p>
System.setProperty("webdriver.chrome.driver", "/chromedriver");
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless=new");
options.addArguments("--window-size=1920,1080");
options.addArguments("--no-sandbox");
options.addArguments("--log-level=2");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--disable-gpu");
options.addArguments("--disable-software-rasterizer");
File downloadDir = new File(reportDir.getAbsolutePath() + File.separator + PDF);
if (!downloadDir.exists()) {
downloadDir.mkdirs();
}
HashMap chromePrefs = new HashMap();
chromePrefs.put("profile.default_content_settings.popups", 0);
options.setExperimentalOption("prefs", chromePrefs);
// Ignore SSL certificate errors
options.addArguments("--ignore-certificate-errors");
options.addArguments("--allow-insecure-localhost");
ChromeDriver driver = null;
String url = "https://localhost:443/stat-report-pdf";
try {
driver = new ChromeDriver(options);
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.MINUTES);
DevTools devTools = driver.getDevTools();
devTools.createSession();
driver.get(url);
try {
Thread.sleep(1 * 60 * 1000);
} catch (InterruptedException e) {
log.error("processPdfFile InterruptedException 에러");
Thread.currentThread().interrupt();
}
Page.PrintToPDFResponse pdfResponse = devTools.send(
Page.printToPDF(Optional.empty(), Optional.empty(), Optional.empty(),
Optional.of(1), Optional.of(8.27), Optional.of(11.7),
Optional.of(0.0), Optional.of(0.0), Optional.of(0.0), Optional.of(0.0),
Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty())
);
byte[] pdfData = Base64.getDecoder().decode(pdfResponse.getData());
Path pdfPath = Paths.get(downloadDir.getAbsolutePath(), now.format(DateTimeFormatter.ofPattern("yyyyMMdd"))+"_MNX_Report.pdf");
Files.write(pdfPath, pdfData);
if( Files.exists(pdfPath) && Files.size(pdfPath) > 0) {
log.debug("PDF file generate success: {}", pdfPath.toString());
mailService.sendMailReport(pdfPath, startDate, endDate);
} else {
log.error("PDF file generate fail: {}", pdfPath.toString());
return false;
}
} catch (Exception e) {
log.error("processPdfFile error = {}", e.getMessage());
return false;
} finally {
if (driver != null) {
driver.quit();
}
}
return true;
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... ew-seconds