11

当我在无头模式 chrome 浏览器中运行测试脚本时,元素链接不可见,无法执行linkElement.click()。在头部模式下一切正常。所有其他信息都在堆栈跟踪中。请问有谁知道怎么办?

堆栈跟踪:

发生错误:消息:元素不可见
(会话信息:无头 chrome=60.0.3112.90)
(驱动程序信息:chromedriver=2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8),平台=Windows NT 6.1.7601 SP1 x86_64)
回溯(最近一次通话):
文件“C:\nik-x.py”,第 148 行,在 main
func(nik)
文件“C:\lib\support.py”,第 121 行,在 wrapper
raise ret
文件“C:\lib\support.py ",第 108 行,在 newFunc
res[0] = func(*args, **kwargs)
文件“C:\testcases\nik-1003.py”,第 37 行,在 testcase
i.click()
文件“C:\ Python36\lib\site-packages\selenium\webdriver\remote\webelement.py",第 7 行
7,点击
self._execute(Command.CLICK_ELEMENT)
文件“C:\Python36\lib\site-packages\selenium\webdriver\remote\webelement.py”,第 4
93 行,在 _execute 中
返回 self._parent.execute(command, params)
文件“C:\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py”,第 25 行
6,在执行
self.error_handler.check_response(response)
文件“C:\Python36\lib\site-packages\ selenium\webdriver\remote\errorhandler.py",第
194 行,在 check_response 中
引发 exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
(Session info: headless chrome=60.0.3112.90)
(驱动程序信息:chromedriver=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8),平台=Windows NT 6.1.7601 SP1 x86_64)

这是我的一段代码:
icons = nik.elementLeftmenuSportIcons() for i in icons[:-1]: try: i.click()

来自测试页面的 HTML: <a href="#" class="default b_futbal gaPageEventElement" data-ga-cat="Sporty" data-ga-action="futbal"> <span class="left-menu-only-large-res">Futbal</span> </a>

4

5 回答 5

13

我认为问题在于,该元素在 Headless Chrome 的默认视图框 (600x800) 中确实不可见。

Headless Browser 的窗口大小必须在启动 chrome 时设置为参数。我正在使用javascript(我认为API在python下看起来很相似):

var Options = require('selenium-webdriver/chrome').Options;
var options = new Options();
options.addArguments('headless');
options.addArguments('disable-gpu');
options.addArguments('window-size=1200,1100');

browser = builder.forBrowser('chrome').setChromeOptions(options).build();

附加信息

我也通过 webdriver 设置了窗口大小,browser.manage().window().setSize(1200,1100);但是这个命令在 headless chrome 中是不够的。在非无头变体中,这是有效的。

于 2017-09-19T11:31:47.970 回答
2

您可以通过以下两种方式执行此操作。

1.在chrome选项中传递窗口大小,如下所述(在实例化驱动程序实例之前):

ChromeOptions options = new ChromeOptions()
options.addArguments("headless");
options.addArguments("window-size=1200,1100");
WebDriver driver = new ChromeDriver(options);

2.实例化chrome驱动后设置窗口大小:

WebDriver webDriver= new ChromeDriver();
webDriver.manage().window().setSize(new Dimension(1200,1100));
于 2019-02-21T07:43:43.597 回答
1

options.addArguments('窗口大小=1200,1100');

在无头镀铬模式下为我工作:) 非常感谢@powerpete

以下是 groovy 中 headless chrome 的完整设置:-

        ChromeOptions options = new ChromeOptions()
        DesiredCapabilities capabilities = DesiredCapabilities.chrome()
        options.addArguments('headless','disable-gpu','--test-type','--ignore-certificate-errors')
        options.addArguments('window-size=1200,1100');
        capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        capabilities.setCapability(ChromeOptions.CAPABILITY, options)
        driver = {new ChromeDriver(capabilities)}
于 2017-09-29T09:20:34.377 回答
0

如果更改窗口大小对像我这样的任何人都不起作用,则可能是 HTML 实际上在无头模式和有头模式之间发生了变化。

我有一个类似的问题,但无头在 FireFox 而不是 Chrome 中工作。Chrome 元素的 Xpath 仅在 headed 模式下工作。我发现 HTML 在 Chrome 的无头模式下略有变化。

在 Chrome 中使用无头模式时,我通过用 FireFox 上的元素的 Xpath 替换 Chrome 上的元素的 Xpath 来解决此问题。

于 2019-08-30T21:55:39.260 回答
0

options.AddArguments("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36");

添加这个对我有帮助

于 2022-01-31T11:33:22.767 回答