Я работаю над тем, чтобы использовать Selenium, чтобы обойти вход в систему с пользователем и паролем. Мне удалось заставить его работать локально в Java, используя следующий код (отредактированный для устранения конфиденциальной информации): < /p>
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
log.info("starting web driver");
WebDriver driver = new ChromeDriver(options);
final String url = props.getProperty(configuration.getUrl()).orElse("");
driver.get(url);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(1000));
return driver;
< /code>
, а затем < /p>
log.info("inputting the username");
driver.findElement(By.("identifier")).sendKeys(credential.getUsername());
driver.findElement(By.("input")).submit();
log.info("inputting the password");
driver.findElement(By.("credentials.passcode")).sendKeys(credential.getPassword());
driver.findElement(By.("input")).submit();
< /code>
Теперь я перешел к сфере Docker, чтобы попытаться сделать то же самое, с такими файлами Docker (снова отредактирован, потому что это собственный код): < /p>
FROM /standalone-chrome:4.23.1 as chrome
FROM /tomcat:10-jdk17-openjdk
ENV JAVA_OPTS="-Xmx4096M -Xms4096M"
ADD target/-*.jar /target/.jar
COPY --from=chrome /usr/bin/google-chrome /usr/bin/google-chrome
COPY --from=chrome /usr/bin/chromedriver /usr/bin/chromedriver
CMD java --add-opens java.base/java.lang.reflect=ALL-UNNAMED -jar /target/*.jar -Dlogging.level.org.openqa.selenium=DEBUG
< /code>
Затем в коде я установил свойство системы для пути Chromedriver < /p>
log.info("Setting the path to the driver");
System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
log.info("starting web driver");
WebDriver driver = new ChromeDriver(options);
final String url = props.getProperty(configuration.getUrl()).orElse("");
driver.get(url);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(1000));
return driver;
< /code>
И я всегда получаю одну и ту же ошибку независимо от того, добавляю ли я хромидривер и Google-chrome из автономного в файловую систему Docker или нет, и я устанавливаю «Webdriver.chrome.driver».
org.openqa.selenium.SessionNotCreatedException: Could not start a new session.
Possible causes are invalid address of the remote server or browser start-up failure.
< /code>
Caused by: org.openqa.selenium.WebDriverException: Driver server process died prematurely.
< /code>
As you can see I am trying to get more info from the org.openqa.selenium logs to see if there is something that can point me in the right direction. To me it looks like I need to add something else from the selenium standalone of modify the path to the chromedriver in the code so that at runtime I can properly create my ChromeDriver. Maybe someone here has some clues.
Подробнее здесь: https://stackoverflow.com/questions/796 ... ng-locally
Селен не работает на сервере, а работает локально ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение