我正在使用 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/