问题标签 [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.
javascript - 如何在浏览器环境中运行单元测试?
我正在为一些操作 DOM 的代码编写测试,我想在浏览器环境中运行它,但我不知道如何。
我使用测试库AVA为我的小型库promisify-dom-selector编写了一个模型测试:
并想在Headless Chrome中运行它。
我尝试使用 ava 插件karma-ava设置 Karma,但它甚至不起作用,这是错误消息:
如果可能的话,我不会选择 Karma 路线,但我不知道还有其他方法!我能做些什么?
node.js - 运行 navalia 示例的打字稿错误
我正在尝试从https://github.com/joelgriffith/navalia运行此示例,但就我而言,我无法让它正常工作:
海军测试.ts
tsconfig.json
打字.d.ts
以下是版本:
这是我得到的错误,虽然我得到了 .js 文件输出:
我确信某处有一个愚蠢的错误,但请有人帮我看看吗?谢谢。
javascript - Runtime.consoleAPICalled 回调在打开 Chrome devtools 时停止
我正在 Nodejs 中使用 Chrome 和 Chrome DevTools 协议(https://chromedevtools.github.io/devtools-protocol/)开发网络自动化系统。
调用 Runtime.consoleAPICalled 方法工作正常,但是当我打开已启动 Chrome 的 devtools 时,它不再工作。
无论 Chrome 开发工具如何,如何调用 API?
google-chrome - 使用 Headless Chrome 开发者工具跟踪重定向
我正在使用CDP4J,尽管我希望这个问题与 Google Chrome DevTools Protocol 直接相关。
我想获取对网页和响应代码发出的 HTTP 请求的列表。因此,这将包括主框架中的初始请求和后续请求,通过 3xx 重定向或 JavaScript 起源的导航进行。
目前尚不清楚如何可靠地做到这一点。
我尝试了以下方法:
- 店铺
io.webfolder.cdp.session.Session.getFrameId
- 向会话添加回调
addEventListener
,记录每个类型的事件io.webfolder.cdp.event.Event.NetworkResponseReceived
- 其中,过滤那些帧 ID 匹配的。
- 这些过滤器类型
io.webfolder.cdp.type.page.ResourceType.Document
我有一个我知道返回 HTTP 303 的 URL。但是查看事件,看不到原始 URL,而是只看到重定向的最终目的地。每个 NetworkResponseReceived 的状态都是 200。
如何捕获重定向链?
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。此事件成功触发,但没有报告子节点。
在这一点上,我对脚本是否正在运行感到困惑。任何人都可以提供一些建议吗?
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>
selenium - 使用 Headless Chrome 运行 Flash 游戏并截图
和标题说的差不多。我不想使用 Selenium,因为它会很慢,而且我至少需要每秒 60 帧。还有其他选择吗?有没有人尝试过这样的事情?我正在尝试在一款名为 Winterbells 的游戏上执行此操作,如果这是必要的信息的话。谢谢!
google-chrome - 渲染后如何从无头 chrome 获取页面的 html?
对于单页 Web 应用程序,有没有办法使用无头 chrome 将 html 内容传送回另一个程序?我只想使用 v8 来呈现页面并取回内容。这么多网站是不可抓取的。
node.js - 使用headless chrome拦截图片请求数据
我有一个用例需要使用无头 Chrome 网络(https://chromedevtools.github.io/devtools-protocol/tot/Network/)来拦截所有图像请求并在保存之前找出图像大小(基本上丢弃小图标等图像)。
但是,我无法找到一种在保存之前将图像数据加载到内存中的方法。我需要将它加载到 Img 对象中以获取width
和height
. Network.getResponseBody
正在接受我无权访问的requestId Network.requestIntercepted
。也Network.loadingFinished
总是给我encodedDataLength
变量中的“0”。我不知道为什么。所以我的问题是:
如何拦截来自 jpg/png 请求的所有响应并获取图像数据?无需通过 URL 字符串将文件保存到磁盘并重新加载。
最佳:如何从标题响应中获取图像尺寸?然后我根本不必将数据读入内存。
我的代码如下:
javascript - 无头 chrome 启动器 --window-size 导致错误
在给定特定窗口大小的情况下,我需要能够截取屏幕截图。我阅读了这篇关于如何在 Codeception 中运行 Headless Chrome 的博客文章和关于 Headless Chrome入门的这个页面,但无法弄清楚如何在初始化时调整窗口大小。
我试图通过--window-size
下面的所有选项,但没有一个工作:
最糟糕的是,现在我的屏幕截图在这样做一段时间后是空白的。无头浏览器中是否保留了某种内存导致这种情况?我还没有尝试重新启动我的 Mac,这可能是下一个。
那么在给定窗口大小的情况下,有什么方法可以截取整页截图呢?在 phantom.js 中,这是一件非常琐碎的事情。
我的代码如下
如果我在命令行中执行此操作,它可以正常工作:
更新
我意识到无头 Chrome Canary 至少在 Mac 上非常不稳定。如果我关闭终端并重新启动它,有时它会起作用。但是在运行完全相同的脚本之后,它就永远挂断了(我一夜之间离开了)。我今天刚刚更新了所有内容(Chrome Canary、chrome-launcher、chrome-remote-interface)并继续调试。也许现在还不是黄金时期。