标签: headless-browser

Chrome headless:超时退出

我正在使用 chrome headless 来截图。但是当添加超时时,进程不会退出,它会保持活动状态......有没有办法在错误(例如超时)时终止进程?

没有超时的命令及其输出(这个正在工作):

>>> chrome --headless --screenshot --no-sandbox https://stackoverflow.com
[0808/174530.681784:ERROR:gpu_process_transport_factory.cc(1016)] Lost UI shared context.
Fontconfig warning: "/etc/fonts/fonts.conf", line 146: blank doesn't take any effect anymore. please remove it from your fonts.conf
[0808/174531.735502:ERROR:cert_verify_proc_nss.cc(981)] CERT_PKIXVerifyCert for securepubads.g.doubleclick.net failed err=-8179
[0808/174532.060892:INFO:headless_shell.cc(590)] Written to file screenshot.png.
>>> 
Run Code Online (Sandbox Code Playgroud)

超时命令(测试时为 1 毫秒)及其输出(待定):

>>> chrome --headless --screenshot --no-sandbox --timeout=1 https://stackoverflow.com
[0808/174256.720003:ERROR:gpu_process_transport_factory.cc(1016)] Lost UI shared context.
Fontconfig warning: "/etc/fonts/fonts.conf", line 146: blank doesn't take any effect anymore. please remove it from your fonts.conf
[0808/174256.772496:INFO:headless_shell.cc(344)] Timeout.
Run Code Online (Sandbox Code Playgroud)

shell google-chrome headless-browser google-chrome-headless

7
推荐指数
1
解决办法
1459
查看次数

如何在 iframe 内渲染 .mht 文件

我想使用无头 Chrome 拍摄页面快照,它将返回一个文件给我,因此我正在创建一个 mht 文件,因为它将包含有关网页的更多信息。所以,现在我想在 iframe 中渲染这个快照,但我无法这样做。

<iframe src="file:///home/user/untitled1.mht"></iframe>
Run Code Online (Sandbox Code Playgroud)

渲染后会返回错误。

Attempted to load a multipart archive into an subframe
Run Code Online (Sandbox Code Playgroud)

html mhtml headless-browser

7
推荐指数
1
解决办法
1420
查看次数

HeadlessChrome 与 Chrome 83 与 Karma 断开连接

Karma我使用、Sinon和执行一些单元测试Mocha。它运行良好,一个月来,我在运行这些单元测试时遇到了一些问题。我的 HeadlessChrome 出现错误。事实上,它显示了这个错误:

HeadlessChrome 83.0.4103 (Windows 10.0.0) ERROR
Disconnected, because no message in 30000 ms.
Run Code Online (Sandbox Code Playgroud)

我有这个业力配置:

module.exports = function (config) {
  config.set({
    // Others configs
    ...
    port: 9876,
    browsers: ['ChromeHeadlessNoSandbox'],
    customLaunchers: {
      ChromeHeadlessNoSandbox: {
        base: 'ChromeHeadless',
        flags: [
          '--no-sandbox', // required to run without privileges in docker
          '--user-data-dir=/tmp/chrome-test-profile',
          '--disable-web-security'
        ]
      }
    },
    captureTimeout: 10000,
    plugins: [
      'karma-mocha', 'karma-mocha-reporter', 'karma-junit-reporter', 'karma-chrome-launcher',
      'karma-typescript', 'karma-html-reporter'
    ]
  });
};

Run Code Online (Sandbox Code Playgroud)

我找到了两种方法来修复它:

  • 降级到版本 81。
  • 在浏览器中打开 localhost:9876 中的页面。
  • 更改 karma 配置(浏览器和标志属性):
module.exports …
Run Code Online (Sandbox Code Playgroud)

headless-browser karma-runner google-chrome-headless

7
推荐指数
1
解决办法
1万
查看次数

如何使Python,QT和Webkit在无头服务器上运行?

我有Debian Linux服务器,我用它来做各种各样的事情.我希望它能够做一些我需要定期完成的网络抓取工作.

这段代码可以在这里找到.

import sys  
from PyQt4.QtGui import *  
from PyQt4.QtCore import *  
from PyQt4.QtWebKit import *  

class Render(QWebPage):  
  def __init__(self, url):  
    self.app = QApplication(sys.argv, False)  # Line updated based on mata's answer
    QWebPage.__init__(self)  
    self.loadFinished.connect(self._loadFinished)  
    self.mainFrame().load(QUrl(url))  
    self.app.exec_()  

  def _loadFinished(self, result):  
    self.frame = self.mainFrame()  
    self.app.quit()  
Run Code Online (Sandbox Code Playgroud)

对它的简单测试看起来像这样:

url = 'http://example.com'
print Render(url).frame.toHtml()
Run Code Online (Sandbox Code Playgroud)

在对构造函数的调用中,它会以此消息消失(它打印到stdout,而不是未捕获的异常).

: cannot connect to X server 
Run Code Online (Sandbox Code Playgroud)

如何在无头服务器上使用Python(2.7),QT4和Webkit?什么都不需要显示,所以我可以调整任何设置或任何需要调整的东西.

我已经研究过替代方案,但这对我和我的项目来说是最合适的.如果我必须安装X服务器,我怎么能以最小的开销做到这一点?

python qt webkit headless headless-browser

6
推荐指数
3
解决办法
6970
查看次数

适用于GAE的Python Headless浏览器

我正在尝试将Angular.js客户端与Google Appengine上的webapp2一起使用。

为了解决SEO问题,该想法是使用无头浏览器运行javascript服务器端并将生成的html提供给搜寻器。

是否有在Google App Engine上运行的python无头浏览器?

python google-app-engine headless-browser

6
推荐指数
1
解决办法
1309
查看次数

Geb新款无头镀铬

我正试图让我的项目使用Geb在无头模式下运行Chrome的beta频道.

我可以使用Geb Gradle示例项目重现该问题.

在GebConfig.groovy中,我有这个块来定义chrome:

environments {

    // run via “./gradlew chromeTest”
    // See: http://code.google.com/p/selenium/wiki/ChromeDriver
    chrome {
        driver = {
            ChromeOptions options = new ChromeOptions()
            DesiredCapabilities capabilities = DesiredCapabilities.chrome()

            String chromiumPath = "/usr/bin/chromium-browser"
            String macChromePath = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
            String macCanaryChrome = "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"

            def chromiumBinary = new File(chromiumPath)
            def isAgent = chromiumBinary.exists()
            def macChromeBinary = new File(macChromePath)
            if (isAgent) {
                options.setBinary(chromiumBinary) //Set binary using file to avoid NoClassDefFound error on mac
            } else if (macChromeBinary.exists()) …
Run Code Online (Sandbox Code Playgroud)

groovy selenium google-chrome headless-browser geb

6
推荐指数
1
解决办法
2388
查看次数

无头Chrome - 从加载的网页触发回调

有没有办法从加载的网页触发回调?我以前使用PhantomJS,可以使用以下代码:

 if (typeof window.callPhantom === 'function') {
    window.callPhantom({ data: 'RenderPDF' });
 }
Run Code Online (Sandbox Code Playgroud)

并在phantomjs脚本中:

page.onCallback = function (data) {
   /* callback code */
};
Run Code Online (Sandbox Code Playgroud)

javascript headless-browser google-chrome-devtools phantomjs

6
推荐指数
1
解决办法
501
查看次数

如何在无头Chrome上使用Selenium Webdriver?

我正在学习使用Selenium来做基本的事情,例如截取屏幕,抓取和测试,并希望将它与无头Chrome一起使用,Chrome现在从Chrome 59开始就是稳定的.

我已经能够使用'selenium-webdriver'宝石和chromedriver截取屏幕截图,但不是无头.

这是我正在运行的ruby脚本,它在开始初始化驱动程序后挂起

require 'rubygems'
require 'selenium-webdriver'

Selenium::WebDriver.logger.level = :debug
p 'initializing driver'
driver = Selenium::WebDriver.for :chrome, switches: %w[--headless --disable-gpu --screenshot --hide-scrollbars]
p 'navigating to Google'
driver.navigate.to "http://google.com"  
driver.save_screenshot("./screen.png")
driver.quit
Run Code Online (Sandbox Code Playgroud)

和日志的输出:

:> ruby rubytest.rb
"initializing driver"
2017-06-07 15:55:43 DEBUG Selenium Executing Process 

["/Users/name/Documents/scrapings/python/env/bin/chromedriver", "--port=9515"]
2017-06-07 15:55:43 DEBUG Selenium polling for socket on ["127.0.0.1", 9515]
Starting ChromeDriver 2.29.461585 (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b) on port 9515
Only local connections are allowed.
2017-06-07 15:55:43 INFO Selenium -> POST session
2017-06-07 15:55:43 INFO Selenium    >>> http://127.0.0.1:9515/session …
Run Code Online (Sandbox Code Playgroud)

ruby selenium headless-browser selenium-chromedriver selenium-webdriver

6
推荐指数
2
解决办法
7010
查看次数

在没有xorg的情况下在linux上运行chrome headless

是否可以在没有安装音频和xorg依赖项的情况下在无头Linux机器上安装和运行chrome headless?

如果没有,那么是否有一个特殊的无头铬/铬构造,不会拉xorg和音频库?

google-chrome headless chromium headless-browser

6
推荐指数
1
解决办法
4616
查看次数

如何避免在Puppeteer和Phantomjs上被检测为bot?

Puppeteer和PhantomJS相似。我俩都遇到了这个问题,代码也很相似。

我想从一个网站上获取一些信息,该网站需要进行身份验证才能查看这些信息。我什至无法访问主页,因为它像“ SS”一样被检测为“可疑活动”:https : //i.imgur.com/p69OIjO.png

我发现,当我使用名为Cookie的标头在Postman上进行测试并且在浏览器中捕获到它的cookie的值时,不会发生此问题,但是此cookie会在一段时间后过期。所以我想Puppeteer / PhantomJS都没有捕获cookie,因为该站点拒绝了无头的浏览器访问。

我可以做些什么来绕过这个?

// Simple Javascript example
var page = require('webpage').create();
var url = 'https://www.expertflyer.com';

page.open(url, function (status) {
    if( status === "success") {
        page.render("home.png");
        phantom.exit();
    }
});
Run Code Online (Sandbox Code Playgroud)

bots node.js headless-browser phantomjs puppeteer

6
推荐指数
4
解决办法
6547
查看次数