Chrome selenium 对Headless Chromium 的试验失败

d7v8vwbk  于 2023-03-06  发布在  Go
关注(0)|答案(8)|浏览(215)

我正在尝试让我的selenium测试自动化在headless chrome上运行,这样我就可以把它移到TeamCity上。我没有任何运气。当我运行它时,chrome看起来确实是在headless上运行的(没有弹出浏览器),但是我得到了一个NoSuchElementException。当非headless运行时,自动化按预期工作。拍摄的快照只显示了一个白色矩形。
我对这个问题进行了广泛的研究,但是我一直没有找到一个适合我的解决方案。看起来这个问题在https://bugs.chromium.org/p/chromedriver/issues/detail?id=476中报告过,但是它被标记为已修复。我认为这个问题可能是错误的chromedriver,或者可能是错误的chromedriver/selenium组合,但是我尝试了各种各样的组合,但是没有结果。
我正在使用:

  • selenium -Java 3.6.0
  • 镀 chrome 驱动器2.33.506120
  • Windows 7企业服务包1,64位

我的代码是:

...
ChromeOptions headlessOptions = new ChromeOptions();
headlessOptions.addArguments("--start-maximized");
headlessOptions.addArguments("--headless");
driver = new ChromeDriver(headlessOptions);
driver.get(url);
WebElement usernameTextfield = driver.findElement(By.cssSelector(".input.username"));
...

输出为:

Starting ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) on port 41402
Only local connections are allowed.
Nov 01, 2017 10:22:51 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":".input.username"}
  (Session info: headless chrome=62.0.3202.75)
  (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds

这使得我无法将测试自动化作为CI的一部分,因此任何帮助都将非常感谢。

p8ekf7hl

p8ekf7hl1#

这就是我的工作:

var chromeOptions = new ChromeOptions();                        
chromeOptions.AddArguments("--headless");
chromeOptions.AddArguments("--disable-gpu");
chromeOptions.AddArguments("--window-size=1280,800");
chromeOptions.AddArguments("--allow-insecure-localhost");

//specifically this line here :)
chromeOptions.AddAdditionalCapability("acceptInsecureCerts", true, true);

https://bugs.chromium.org/p/chromium/issues/detail?id=721739中找到

qgelzfjb

qgelzfjb2#

我遇到了同样的问题,本地服务器使用的是自签名证书,下面是适合我的组合:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu");
options.addArguments("--no-sandbox");
options.addArguments("--allow-insecure-localhost");
dw1jzc5e

dw1jzc5e3#

试试这个:

final ChromeOptions options = new ChromeOptions();

options.addArguments("--headless");
options.addArguments("--window-size=1280,800");

WebDriver driver = new ChromeDriver(options);
falq053o

falq053o4#

添加用户代理为我完成了这项工作:

--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
7dl7o3gd

7dl7o3gd5#

你的chromedriver/selenium组合看起来很完美。在我看来是一个纯粹的同步问题。我们需要诱导一些等待来同步如下:

driver.get(url);
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement usernameTextfield = wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.cssSelector(".input.username"))));
usernameTextfield.sendKeys("user_name");
yzxexxkh

yzxexxkh6#

对于任何可能在这里遇到这个错误,但正在使用python的人。
我有一个脚本工作的问题,只有当无头没有使用。
最初,我的选项如下所示:

options = Options()
options.headless = True

找到这个线程后,我改变了我的选项如下:

options = Options()
options.add_argument("--headless");
options.add_argument("--window-size=1440, 900")

看起来当Selenium导航页面时,无头窗口的格式不同。想想看。这解决了我所有的问题。

nzrxty8p

nzrxty8p7#

我也有同样的问题。
您需要添加到您的选项您的计算机的用户代理,要搜索您的用户代理只需键入谷歌:x1月1x
然后将其添加到选项中:options.add_argument("your-user-agent")

vs3odd8k

vs3odd8k8#

选项.add_argument(“--窗口大小=1440,900”)
在尝试了别人推荐的方法后,我从“Slyme”中拿来的这个解决了我的问题。我的是一个Java框架。

相关问题