【问题标题】:Is the Firefox Web Console accessible in headless mode?Firefox Web 控制台是否可以在无头模式下访问?
【发布时间】:2020-12-21 06:22:00
【问题描述】:

标题说明了一切:我想知道在 headless mode 启动 Firefox 时是否可以与 Firefox console 交互。

更一般地说,我会接受某种以编程方式在脚本中访问它的方式。

我的尝试:

到目前为止,我一直在玩 Javascript bindingsSelenium 没有成功:

使用 Selenium 中的 -devtools option 启动 Firefox 确实打开了开发工具,但我随后 cannot 发送组合键,将我切换到实际控制台,或者实际上从我的 .js 脚本与打开的开发工具进行交互任何方式的窗口。


编辑

回应下面的第一条评论:this answer 似乎没有帮助。当我将CTRL+SHIFT+k 发送到google.combody 标签时,控制台没有打开:

var webdriver = require('selenium-webdriver'),
    By = webdriver.By,
    until = webdriver.until;

var firefox = require('selenium-webdriver/firefox');
var inpt = require('selenium-webdriver/lib/input');

var options = new firefox.Options();

var driver = new webdriver.Builder()
    .forBrowser('firefox')
    .setFirefoxOptions(options)
    .build();

(async function(){
    await driver.get('https://google.com');
    var bdy = await driver.findElement(By.id('gsr'));
    await bdy.sendKeys(inpt.Key.CONTROL + inpt.Key.SHIFT + 'k');    
})();

这会打开页面 (google.com) 并且没有返回任何错误,但是任何地方都没有控制台。

为了更好的衡量标准:只发送inpt.Key.SHIFT + 'k'确实在 Google 搜索字段中输入大写“K”,所以我知道键被正确引用。

此外,仅发送'k' 会在搜索字段中输入一个小“k”。只有三键组合不起作用。

第二次编辑:

我收回了它:newer answer 确实可以正常工作(我从node 切换到Python)。

【问题讨论】:

  • 这对您有帮助吗? stackoverflow.com/a/33547261/12870513
  • @Karthik:没那么多……我已经编辑了我的答案。
  • 我收回了这一点:它确实有效,谢谢!请参阅上面的第二次编辑。

标签: javascript selenium firefox


【解决方案1】:

Karthik 下面的评论确实解决了这个问题,但我想在这里总结一下并记录自动访问 Firefox-Web-Console 的有效解决方案。

我在上面链接的the answer 的要点(在我的第二次编辑中)是,为了完全访问 Firefox 浏览器的关键控件,必须

  • 首先将 Firefox context 切换到 chrome(从默认的 content 上下文)
  • 指示自动浏览器驱动程序定位带有 id tabbrowser-tabs 的元素
  • 将组合键(在本例中为 Ctrl+Shift+k)发送到该元素。

具体的工作解决方案:

Python

脚本是

from selenium.webdriver import Firefox, DesiredCapabilities, FirefoxProfile
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.keys import Keys

import time

options = Options()
webdriver = Firefox(options=options)
webdriver.get("https://google.com")
try:
    time.sleep(3)
    with webdriver.context(webdriver.CONTEXT_CHROME):
        console = webdriver.find_element(By.ID, "tabbrowser-tabs")
        console.send_keys(Keys.LEFT_CONTROL + Keys.LEFT_SHIFT + 'k')
                
except:
    pass

使用python <path-to-script> 运行它会打开一个显示google.com 和底部的控制台的Firefox 窗口。

Javascript

这里是完整的脚本

var webdriver = require('selenium-webdriver'),
    By = webdriver.By,
    until = webdriver.until;

var firefox = require('selenium-webdriver/firefox');
var inpt = require('selenium-webdriver/lib/input');

var options = new firefox.Options();

var driver = new webdriver.Builder()
    .forBrowser('firefox')
    .setFirefoxOptions(options)
    .build();

(async function(){
    await driver.get('https://google.com');
    await driver.setContext("chrome");

    var tabs = await driver.findElement(By.id('tabbrowser-tabs'));
    await tabs.sendKeys(inpt.Key.CONTROL + inpt.Key.SHIFT + 'k');
    
})();

使用node <path-to-script> 运行它可以达到与上面相同的效果:在google.com 上打开一个Firefox 窗口,控制台在底部打开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 2017-02-21
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多