标签: headless-browser

如何使用 puppeteer 启动带有“不跟踪”设置的无头 Chrome?

在 puppeteer 中使用 chromium 时如何设置“不跟踪”?是否可以?

args 中是否有任何选项可以设置如下。

 puppeteer.launch({ args=['DO_NOT_TRACK']})
Run Code Online (Sandbox Code Playgroud)

尝试了Chromium Switch中列出的许多选项,但找不到我需要的选项。通过设置这样的选项,我想避免谷歌分析跟踪。

headless-browser puppeteer

5
推荐指数
1
解决办法
1790
查看次数

Puppeteer - 使用“--allow-file-access-from-files”通过 XMLHttpRequest 加载本地文件不起作用

我正在尝试使用通过 Puppeteer 启动的 Headless Chromium 中的本地文件。

我总是遇到以下错误:

'Cross origin requests are only supported for protocol schemes: http, data, chrome, https'
Run Code Online (Sandbox Code Playgroud)

我确实尝试过设置--allow-file-access-from-files

它可以复制如下:

const puppeteer = require('puppeteer');

puppeteer.launch({headless:true,args:['--allow-file-access-from-files']}).then(
  async browser => {
    const page = await browser.newPage();
    await page.setContent('<html><head><meta charset="UTF-8"></head><body><div>A page</div></body></html>');
    await page.addScriptTag({url:"https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"});
    await page.on('console', msg => console.log('PAGE LOG:', msg.text()));
    await page.evaluate (() => {
      $.get('file:///..../cors.js')
        .done(
           _ => console.log('done')
        ).fail(
          e => console.log('fail:'+JSON.stringify(e))
        );
    });
  await browser.close();
  }
);
Run Code Online (Sandbox Code Playgroud)

查看正在运行的进程,看起来 Chromium 确实是通过该选项启动的。

热烈欢迎所有提示!

javascript chromium headless-browser google-chrome-headless puppeteer

5
推荐指数
1
解决办法
7286
查看次数

防止 Chrome-Headless 强制执行 ssl

设置

我在 docker-compose 项目中将 chrome-headless 作为容器运行。我的主应用程序(我想测试的应用程序)在撰写文件中命名为“app”。

为了从 chrome-headless 容器连接到我的应用程序,我使用了 dockers 内部容器链接:http://app:3000

docker-compose.yml

version: '3'

services:
  app:
    build:
      context: .
    ports:
      - 3000:3000

  chrome:
    image: alpeware/chrome-headless-trunk
Run Code Online (Sandbox Code Playgroud)

问题

虽然这应该很容易,但有一个细节使事情变得复杂:chrome-headless 在“.app”域上强制执行 ssl。由于我连接到“ http://app:3000 ”,因此此规则适用。

连接时出现此错误:

net::ERR_SSL_PROTOCOL_ERROR at http://app:3000
Run Code Online (Sandbox Code Playgroud)

有没有办法设置 chrome-headless 来停止在某些域上强制执行 ssl? 在 docker-compose.yml 中将名称从 'app' 更改为其他名称实际上有效,但这似乎是一个相当丑陋的解决方法。

谢谢

headless-browser docker google-chrome-headless

5
推荐指数
1
解决办法
153
查看次数

Selenium Firefox headless 返回不同的结果

当我抓取包含使用无头选项的产品的页面时,我得到不同的结果。
对于同一问题,一次我得到的结果未排序,另一次得到正确排序的结果。

硒火狐浏览器:

firefox_options = Options()
firefox_options.headless = True
browser = webdriver.Firefox(options=firefox_options, executable_path=firefox_driver)
Run Code Online (Sandbox Code Playgroud)

根据这篇文章:
“当使用无头选项时,Firefox 不会发送不同的标头”。

如何使用无头选项从抓取中获得恒定的结果?

更新:

事实证明,广告弹出窗口隐藏了价格排序菜单。通过设置DebanjanB发布的恒定窗口大小,问题得到了解决。

感谢您的任何建议

python selenium headless-browser geckodriver firefox-headless

5
推荐指数
1
解决办法
6755
查看次数

公共 LinkedIn 页面需要在 Puppeteer 中进行身份验证,但在 Chromium/Chrome 中手动粘贴 URL 时不需要进行身份验证

我试图使用Puppeteer在 Linkedin 上打开一个上市公司页面,但每次它都会重定向到身份验证表单。当我在 Chromium 或 Chrome 中手动粘贴 URL 时,不会发生这种情况。

这是代码:

const puppeteer = require("puppeteer");

(async () => {
    const url = "https://www.linkedin.com/company/google/";

    const browser = await puppeteer.launch({
        headless: false,
        args: [
            "--lang=en-GB",
            "--no-sandbox",
            "--disable-setuid-sandbox",
            "--disable-gpu",
            "--disable-dev-shm-usage",
        ],
        defaultViewport: null,
        pipe: true,
        slowMo: 30,
    });

    const page = await browser.newPage();

    await page.goto(url, {
        waitUntil: 'networkidle0',
    });

    await page.waitForSelector(".top-card-layout__entity-info-container", { timeout: 10000 });

    await page.close();
    await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)

这是浏览器重定向的地方:

在此输入图像描述

https://www.linkedin.com/company/google/如果我在 Chromium 或 Chrome 中手动粘贴 URL,则不会发生这种情况。

到目前为止我已经尝试过:

  • 使用incognito浏览器上下文: …

javascript google-chrome node.js headless-browser puppeteer

5
推荐指数
1
解决办法
9822
查看次数

无法在 Ubuntu 16.04 AWS EC2 实例上使用 puppeteer 启动 chromium headless

我有一个微服务,其中一个 API 正在生成 PDF(基于作为参数传递的类型的 3 个 pdf)。我使用 puppeteer 包来生成 PDF。在我的本地系统上发挥作用。

当我尝试在 EC2 ubuntu 16.04 服务器上运行相同的微服务时,它无法启动 chromium headless。我使用过“npm i puppeteer”,根据我的理解,它应该将 chromium headless 作为依赖项。

微服务运行良好,但问题在于 puppeteer 获取 chromium。

错误

Error: Could not find browser revision 800071. Run "PUPPETEER_PRODUCT=firefox npm install" or "PUPPETEER_PRODUCT=firefox yarn install" to download a supported Firefox browser binary.
Run Code Online (Sandbox Code Playgroud)

另外,我无法在“/node_modules/puppeteer/”中找到“.local-chromium/linux-{version}/linux-chrom”

所以,我的理解是 chrome 从未安装过

我对 docker 也很满意。我只在 docker 中运行其他微服务。因此,如果有人可以建议一些使用 docker 的解决方法,那也是可行的。

来自微服务的相关代码部分

async function createPDF(baseFile, inp) {
var templateHtml = fs.readFileSync(
    path.join(process.cwd(), `utilities/${baseFile}.html`),
    "utf8"
  );

  var template = handlebars.compile(templateHtml); …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js headless-browser docker puppeteer

5
推荐指数
1
解决办法
7110
查看次数

有没有办法使用PhantomJs/CasperJS或类似的无头浏览器录制动作?

好的,这里是我试图找到解决方案的问题的简要描述.

假设我们有一个可以自动执行不同在线任务的在线服务(点击链接,导航到页面,从组合框中选择一个选项,最后从地址栏复制地址).我想要执行这些操作的站点完全使用JavaScript,我希望一切都在PHP端点我的意思是php脚本从用户获取参数,将其传递给JS Server并检索结果并将其显示回用户.

怎么可能这样做?任何的想法?我知道可以通过详细分析DOM元素来完成它,但它非常耗时且不稳定.只是想知道有没有办法,所以我可以像Selenium一样记录这个动作?那个php < - >无头浏览器交互怎么样?

php headless-browser phantomjs casperjs

4
推荐指数
1
解决办法
2086
查看次数

HtmlUnit不创建HtmlPage对象

我是HtmlUnit的新手,我正在尝试抓取一个使用Javascript编辑代码的网站。我听说HtmlUnit是最好的方法,因为它使用无头浏览器返回最终代码。

但是,正如您将看到的那样,我什至无法创建一个HtmlPage对象,而不会抛出一个巨大且无法理解的异常(至少考虑到我对HtmlUnit几乎为空的经验)。

这是我的代码:

import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class Main {

    public static void main(String[] args) {
        Main scraper = new Main();
        scraper.testingGargoyle();


    }

    private void testingGargoyle() {
        String myUrl = "https://www.wearvr.com/#game_id=game_4";
        WebClient webClient = new WebClient();
        try {
            HtmlPage myPage = ((HtmlPage) webClient.getPage(myUrl));
        } catch (FailingHttpStatusCodeException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是抛出的异常:

Apr 30, 2015 5:43:50 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'application/x-javascript'.
Apr 30, …
Run Code Online (Sandbox Code Playgroud)

html javascript htmlunit web-scraping headless-browser

4
推荐指数
1
解决办法
3607
查看次数

如何在python中隐藏Chrome驱动程序?

虽然我知道有人问过这个问题,但我找不到合适的答案,所以我又问了一遍.我使用PhantomJS来抓取网站,但在Mac上速度非常慢,所以我想要Chrome浏览器,但Chrome浏览器显示浏览器很糟糕,我可以将其隐藏吗?我尝试了如下代码,仍然显示一个小浏览器窗口..

browser = webdriver.Chrome()
browser.set_window_position(0, 0)
browser.set_window_size(0, 0)
Run Code Online (Sandbox Code Playgroud)

python headless-browser selenium-chromedriver

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

如何使用Puppeteer动态注入函数进行评估?

我正在使用Puppeteer用于无头Chrome.我希望评估页面内部的一个函数,该函数使用在其他地方动态定义的其他函数的部分.

下面的代码是最小的示例/证明.实际上functionToInject()并且otherFunctionToInject()更复杂并且需要页面DOM.

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(someURL);       

var functionToInject = function(){
    return 1+1;
}

var otherFunctionToInject = function(input){
    return 6
}

var data = await page.evaluate(function(functionToInject, otherFunctionToInject){
    console.log('woo I run inside a browser')
    return functionToInject() + otherFunctionToInject();
});

return data
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我得到:

错误:评估失败:TypeError:functionToInject不是函数

我理解的是:functionToInject没有被传递到页面的JS上下文中.但是如何将其传递到页面的JS上下文中?

javascript headless-browser google-chrome-headless puppeteer

4
推荐指数
1
解决办法
5102
查看次数