java - 使用 Chrome headless 浏览器实现自动化,每次都需要 OTP

标签 java selenium-webdriver google-chrome-headless headless-browser one-time-password

我正在使用 java 和 headless Chrome 来自动化 selenium 自动化工具中的应用程序。

我的应用程序在首次登录计算机或新浏览器(chrome/mozila/IE)时需要 OTP 验证。一旦在机器或浏览器上验证了 OTP,从下次开始就不会要求输入 OTP。登录就足够了。

由于我正在自动化其 headless 浏览器,我想我可以通过第一次在控制台中输入 OTP 来提供 OTP 和验证,并且从下次开始它可能不会要求 OTP。

System.setProperty("webdriver.chrome.driver", constant.browserPathChrome);
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setHeadless(true);
chromeOptions.addArguments("--enable-javascript");
chromeOptions.addArguments("--disable-gpu");
driver = new ChromeDriver(chromeOptions);
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.get("my application url");

但是,当我从同一台计算机启动该站点时,即使在我的计算机中通过在控制台中提供接收到的 OTP 作为输入来首次验证它之后,chrome headless 每次都会要求 OTP。但每次自动化时我都无法给出OTP。如何让它像其他浏览器一样运行?我应该添加哪些功能?

Phantom.js 没有这种问题,当我第一次通过控制台提供 OTP 时,它会进行验证,从下次开始就不再要求 OTP。但由于其他一些原因我无法使用 pahntom.js。我想使用 chrome headless 。

最佳答案

Selenium 将为每次运行创建一个新的浏览器实例,因此它为每次运行请求 OTP 是有效的。

一种解决方案可能是您可以在启动浏览器实例时添加 Chrome 配置文件,以便 selenium 会选择此配置文件而不是启动其默认配置文件。

chromeOptions.addArguments("user-data-dir=path_of_chrome_profile");

chrome 配置文件路径可以是您的本地路径或存储库路径

关于java - 使用 Chrome headless 浏览器实现自动化,每次都需要 OTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57704478/

相关文章:

java - 带有 chromedriver 的 Selenium 根据 "headless"参数给出不同的结果

java - 如何刷新 Selenium 中的 DOM 树以便显示新生成的元素?

java - 在现有元素之后添加新元素到 LinkedList 时的性能

python - 如何配置 ChromeDriver 通过 Selenium 以 Headless 模式启动 Chrome 浏览器?

c# - 如何使用 WebDriver 在 Visual Studio 中更改单个测试类的配置类属性

java - Selenium - 如何获取元素及其子元素文本

google-chrome - 使用 Headless Chrome 开发者工具跟踪重定向

Java 日期格式转 JavaScript 日期格式

java.lang.IllegalArgumentException : [Assertion failed] - this argument is required; it must not be null

Python + Selenium -- 无法点击元素