我希望能够运行使用 SeleniumWebDriver 和 Node.js 的自动化。
问题是,如果 Google Chrome 已经打开并被用户使用,我就无法启动自动化。
目前我通过在启动自动化之前关闭所有 Chrome 实例来解决这个问题,
但对我来说这似乎不是一个好的解决方案。
以下是我用来设置 selenium webdriver 的配置代码:
async function setupSelenium(headless) {
const userDataDir =
"/Users/matteobaldassarre/Library/Application Support/Google/Chrome/";
const options = new Options()
.addArguments(`--user-data-dir=${userDataDir}`)
.addArguments("--remote-debugging-port=9222")
.addArguments("--start-maximized");
if (headless) options.addArguments("--headless=new")
let driver = await new Builder()
.forBrowser("chrome")
.setChromeOptions(options)
.build();
await driver
.manage()
.setTimeouts({ implicit: 10000 });
return driver;
}
请记住,我想使用默认配置文件运行 Chrome(当另一个 chrome 实例打开时用户可能正在使用的配置文件)。
我尝试使用 --remote-debugging-port 参数,因为这似乎是使用相同配置文件启动两个实例的唯一方法,但是当我运行自动化时,我收到此错误:
session not created: Chrome failed to start: exited normally.
(chrome not reachable)
(The process started from chrome location /Applications/Google Chrome.app/Contents/MacOS/Google Chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
要打开一个新窗口,您可以使用 newWindow() 方法。具体方法如下:
// Opens a new window and switches to new window
driver.switchTo().newWindow(WindowType.WINDOW);