Драйвер Селена не ждет загрузки страницы на java для Mermaid.jsJAVA

Программисты JAVA общаются здесь
Anonymous
Драйвер Селена не ждет загрузки страницы на java для Mermaid.js

Сообщение Anonymous »

Я хочу использовать Mermaid.js, чтобы отобразить блок -схему. Я хочу использовать драйвер Selenium в Java, чтобы прочитать рендерированный HTML DOM. Однако источник HTML читается, когда рендеринг не завершен. Как я могу этого добиться? Код ">





import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11.4.1/+esm'
const config = {
startOnLoad: true,
flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'cardinal' },
securityLevel: 'loose',
};
mermaid.initialize(config);




flowchart TD
A --> B


< /code>
< /div>
< /div>
< /p>
java code: < /p>
package com.tugalsan.tst.html;

import static java.lang.System.out;
import java.nio.file.Path;
import java.time.Duration;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Main {

public static void main(String... args) {
var urlPath = Path.of("C:\\git\\tst\\com.tugalsan.tst.html\\a.html");
var urlStr = urlPath.toUri().toString();
var until = Duration.ofMinutes(1);
var output = processHTML(urlStr, until, false, false);
out.println(output);
}

public static String processHTML(String urlStr, Duration until, boolean useFirefox, boolean useWait) {
WebDriver driver = null;
if (useFirefox) {
try {
// WebDriverManager.firefoxdriver().setup();
var options = new FirefoxOptions();
options.addArguments("--no-sandbox");
// options.setExperimentalOption("useAutomationExtension", false);
// options.setExperimentalOption("excludeSwitches", new String[]{"enable-automation"});
options.addArguments("--disable-infobars"); // disabling infobars
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--disable-popup-blocking");
options.setAcceptInsecureCerts(true);
// options.addArguments("--disable-blink-features=AutomationControlled");
driver = new FirefoxDriver(options);
if (useWait) {
waitForPageToLoad(driver, until);
}
driver.get(urlStr);
return driver.getPageSource();
} finally {
if (driver != null) {
driver.close();
}
if (driver != null) {
driver.quit();
}
}
}

var options = new EdgeOptions();
options.addArguments("--no-sandbox");
options.setExperimentalOption("useAutomationExtension", false);
options.setExperimentalOption("excludeSwitches", new String[]{"enable-automation"});
options.addArguments("--disable-infobars"); // disabling infobars
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--disable-popup-blocking");
options.setAcceptInsecureCerts(true);
options.addArguments("--disable-blink-features=AutomationControlled");

try {
driver = new EdgeDriver(options);
if (useWait) {
waitForPageToLoad(driver, until);
}
driver.manage().timeouts().implicitlyWait(until);
driver.manage().timeouts().pageLoadTimeout(until);
var dmn = new Dimension(1280, 1024);
driver.manage().window().setSize(dmn);
driver.get(urlStr);
return driver.getPageSource();
} finally {
if (driver != null) {
driver.close();
}
if (driver != null) {
driver.quit();
}
}
}

public static void waitForPageToLoad(WebDriver driver, Duration until) {
ExpectedCondition< Boolean> pageLoad = (WebDriver driver1) -> ((JavascriptExecutor) driver1).executeScript("return document.readyState").equals("complete");
Wait< WebDriver> wait = new WebDriverWait(driver, until);
try {
wait.until(pageLoad);
} catch (Throwable pageLoadWaitError) {
throw new RuntimeException(pageLoadWaitError);
}
}

}
< /code>
html output: < /p>



import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11.4.1/+esm'













Подробнее здесь: https://stackoverflow.com/questions/794 ... mermaid-js

Вернуться в «JAVA»