使用无头Chrome浏览器

时间:2017-08-08 08:08:33

标签: selenium selenium-chromedriver python-3.6 google-chrome-headless

当我在无头模式chrome浏览器中运行测试脚本时,元素链接不可见,无法执行linkElement.click()。在头模式下一切都好。所有其他信息都在stacktrace中。 有人知道该怎么办吗?

堆栈跟踪:

  

发生错误:消息:元素不可见
   (会议信息:无头铬= 60.0.3112.90)
    (驱动程序信息:chromedriver = 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform = Windows NT 6.1.7601 SP1 x86_64)
  追溯(最近的呼叫最后):
    文件" C:\ nik-x.py",第148行,在主要文件中       FUNC(NIK)
    文件" C:\ lib \ support.py",第121行,在包装器中       举起来     文件" 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
      return self._parent.execute(command,params)
    文件" C:\ Python36 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py",第25行
  6,执行中       self.error_handler.check_response(响应)
    文件" C:\ Python36 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py",line
   194,在check_response中       提出exception_class(消息,屏幕,堆栈跟踪)
  selenium.common.exceptions.ElementNotVisibleException:消息:元素不可见
    (会议信息:无头铬= 60.0.3112.90)
    (驱动程序信息:chromedriver = 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform = 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 个答案:

答案 0 :(得分:8)

我认为问题是,在Headless Chrome的默认视图框(600x800)中,Element真的不可见。

启动镶边时,必须将无头浏览器的窗口大小设置为参数。我正在使用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();

其他信息

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

答案 1 :(得分:0)

options.addArguments(&#39;窗口尺寸= 1200,1100&#39);

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

以下是groovy中无头镀铬的完整设置: -

        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)}

答案 2 :(得分:0)

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

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));

答案 3 :(得分:0)

如果更改窗口大小对像我这样的人不起作用,则可能是HTML实际上在无头模式和有头模式之间切换。

我遇到了类似的问题,但是这种无脑的工作是在FireFox而不是Chrome中工作的。 Chrome元素的Xpath仅在抬头模式下起作用。我发现在Chrome的无头模式下HTML稍有变化。

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