问题标签 [google-chrome-headless]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1722 浏览

javascript - 如何在浏览器环境中运行单元测试?

我正在为一些操作 DOM 的代码编写测试,我想在浏览器环境中运行它,但我不知道如何。

我使用测试库AVA为我的小型库promisify-dom-selector编写了一个模型测试:

并想在Headless Chrome中运行它。

我尝试使用 ava 插件karma-ava设置 Karma,但它甚至不起作用,这是错误消息:

如果可能的话,我不会选择 Karma 路线,但我不知道还有其他方法!我能做些什么?

0 投票
1 回答
174 浏览

node.js - 运行 navalia 示例的打字稿错误

我正在尝试从https://github.com/joelgriffith/navalia运行此示例,但就我而言,我无法让它正常工作:

海军测试.ts

tsconfig.json

打字.d.ts

以下是版本:

这是我得到的错误,虽然我得到了 .js 文件输出:

我确信某处有一个愚蠢的错误,但请有人帮我看看吗?谢谢。

0 投票
0 回答
548 浏览

javascript - Runtime.consoleAPICalled 回调在打开 Chrome devtools 时停止

我正在 Nodejs 中使用 Chrome 和 Chrome DevTools 协议(https://chromedevtools.github.io/devtools-protocol/)开发网络自动化系统。

调用 Runtime.consoleAPICalled 方法工作正常,但是当我打开已启动 Chrome 的 devtools 时,它不再工作。

无论 Chrome 开发工具如何,如何调用 API?

0 投票
2 回答
886 浏览

google-chrome - 使用 Headless Chrome 开发者工具跟踪重定向

我正在使用CDP4J,尽管我希望这个问题与 Google Chrome DevTools Protocol 直接相关。

我想获取对网页和响应代码发出的 HTTP 请求的列表。因此,这将包括主框架中的初始请求和后续请求,通过 3xx 重定向或 JavaScript 起源的导航进行。

目前尚不清楚如何可靠地做到这一点。

我尝试了以下方法:

  1. 店铺io.webfolder.cdp.session.Session.getFrameId
  2. 向会话添加回调addEventListener,记录每个类型的事件io.webfolder.cdp.event.Event.NetworkResponseReceived
  3. 其中,过滤那些帧 ID 匹配的。
  4. 这些过滤器类型io.webfolder.cdp.type.page.ResourceType.Document

我有一个我知道返回 HTTP 303 的 URL。但是查看事件,看不到原始 URL,而是只看到重定向的最终目的地。每个 NetworkResponseReceived 的状态都是 200。

如何捕获重定向链?

0 投票
0 回答
118 浏览

javascript - 无法访问无头 Chrome 中脚本附加的元素

我正在通过无头 chrome 访问网页,该网页应该运行脚本以将一些元素附加到 DOM。但是,我想不出一种方法来掌握这些元素

尝试通过我的 Page.loadEventFired 回调中的 DOM.querySelector 访问它们什么也没给我。我想这可能是因为在 querySelector 运行时附加它们的脚本尚未完成执行,所以我尝试将处理程序附加到 DOM.childNodeInserted 事件(在 Page.loadEventFired 的上下文中和导航到页)如下:

DOM.childNodeInserted((params) => { console.log("we have a child!!"); });

但该事件永远不会触发。我的下一个方法是 DOM.setChildNodes 事件与插入元素的容器元素上的 DOM.requestChildNodes 相结合。我在 Page.loadEventFired 中执行 DOM.requestChildNodes。此事件成功触发,但没有报告子节点。

在这一点上,我对脚本是否正在运行感到困惑。任何人都可以提供一些建议吗?

0 投票
5 回答
13111 浏览

selenium - 使用无头 Chrome 浏览器时的 ElementNotVisibleException

当我在无头模式 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>

0 投票
0 回答
201 浏览

selenium - 使用 Headless Chrome 运行 Flash 游戏并截图

和标题说的差不多。我不想使用 Selenium,因为它会很慢,而且我至少需要每秒 60 帧。还有其他选择吗?有没有人尝试过这样的事情?我正在尝试在一款名为 Winterbells 的游戏上执行此操作,如果这是必要的信息的话。谢谢!

0 投票
0 回答
4661 浏览

google-chrome - 渲染后如何从无头 chrome 获取页面的 html?

对于单页 Web 应用程序,有没有办法使用无头 chrome 将 html 内容传送回另一个程序?我只想使用 v8 来呈现页面并取回内容。这么多网站是不可抓取的。

0 投票
1 回答
2512 浏览

node.js - 使用headless chrome拦截图片请求数据

我有一个用例需要使用无头 Chrome 网络(https://chromedevtools.github.io/devtools-protocol/tot/Network/)来拦截所有图像请求并在保存之前找出图像大小(基本上丢弃小图标等图像)。

但是,我无法找到一种在保存之前将图像数据加载到内存中的方法。我需要将它加载到 Img 对象中以获取widthheight. Network.getResponseBody正在接受我无权访问的requestId Network.requestIntercepted。也Network.loadingFinished总是给我encodedDataLength变量中的“0”。我不知道为什么。所以我的问题是:

  1. 如何拦截来自 jpg/png 请求的所有响应并获取图像数据?无需通过 URL 字符串将文件保存到磁盘并重新加载。

  2. 最佳:如何从标题响应中获取图像尺寸?然后我根本不必将数据读入内存。

我的代码如下:

0 投票
1 回答
1336 浏览

javascript - 无头 chrome 启动器 --window-size 导致错误

在给定特定窗口大小的情况下,我需要能够截取屏幕截图。我阅读了这篇关于如何在 Codeception 中运行 Headless Chrome 的博客文章和关于 Headless Chrome入门的这个页面,但无法弄清楚如何在初始化时调整窗口大小。

我试图通过--window-size下面的所有选项,但没有一个工作:

最糟糕的是,现在我的屏幕截图在这样做一段时间后是空白的。无头浏览器中是否保留了某种内存导致这种情况?我还没有尝试重新启动我的 Mac,这可能是下一个。

那么在给定窗口大小的情况下,有什么方法可以截取整页截图呢?在 phantom.js 中,这是一件非常琐碎的事情。

我的代码如下

如果我在命令行中执行此操作,它可以正常工作:

更新

我意识到无头 Chrome Canary 至少在 Mac 上非常不稳定。如果我关闭终端并重新启动它,有时它会起作用。但是在运行完全相同的脚本之后,它就永远挂断了(我一夜之间离开了)。我今天刚刚更新了所有内容(Chrome Canary、chrome-launcher、chrome-remote-interface)并继续调试。也许现在还不是黄金时期。