标签: puppeteer

如何通过无头chrome管理登录会话?

我需要刮刀:

打开无头浏览器,转到网址,登录(有蒸汽oauth),填写一些输入,点击2按钮

问题是无头浏览器的每个新实例都清除我的登录会话,然后我需要一次又一次地登录...如何通过实例保存它?例如使用带无头镀铬的木偶操纵者

或者我如何打开已登录的chrome无头实例?如果我已经登录了我的主要Chrome窗口

javascript cookies headless web-scraping puppeteer

23
推荐指数
3
解决办法
2万
查看次数

如何在 Puppeteer 中重新加载页面?

我想在页面加载不正确或遇到问题时重新加载页面。我试过了,page.reload()但没有用。

for(const sect of sections ){

            // Now collect all the URLs
            const appUrls = await page.$$eval('div.main > ul.app-list > li > div.app-info a.app-info-icon', links => links.map(link => link.href));

            // Visit each URL one by one and collect the data
            for (let appUrl of appUrls) {
                var count = i++;
                try{
                    await page.goto(appUrl);
                    const appName = await page.$eval('div.det-name-int', div => div.innerText.trim());
                    console.log('\n' + count);
                    console.log(appName);
                } catch(e){
                    console.log('\n' + count);
                    console.log('ERROR', e);
                    await page.reload();
                }

            }

        }
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误: …

javascript chromium node.js puppeteer

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

Puppeteer - 向下滚动,直到你不能再这样了

当我向下滚动时,我处于创建新内容的情况.新内容具有特定的类名.

如何继续向下滚动直到所有元素都已加载?换句话说,我想达到一个阶段,如果我继续向下滚动,没有新的东西会加载.

我正在使用代码向下滚动,再加上一个

await page.waitForSelector('.class_name');
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是,在加载所有元素之后,代码继续向下滚动,没有创建新元素,最终我得到超时错误.

编辑:这是代码

await page.evaluate( () => {
                window.scrollBy(0, window.innerHeight);
            });
await page.waitForSelector('.class_name');
Run Code Online (Sandbox Code Playgroud)

javascript node.js puppeteer

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

无法在 M1 macbook 上的 docker 容器内安装 Chromium

我正在 M1 Macbook Pro 上运行 docker,这里我使用这个 docker 脚本

FROM node:current-buster
# Create and set user
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN apt-get update && apt install -y ./google-chrome-stable_current_amd64.deb
Run Code Online (Sandbox Code Playgroud)

这会引发错误 google-chrome-stable:amd64 : Depends: libasound2:amd64 (>= 1.0.16) but it is not installable

对于其他依赖项也是如此

我尝试过各种方法:

  1. 改变基础镜像
  2. 将安装步骤更改为
apt-get install -y wget gnupg ca-certificates procps libxss1 && 
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -      && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'&& 
apt-get update && 
apt-get install -y google-chrome-stable 
Run Code Online (Sandbox Code Playgroud)

(这会出现无法找到包的错误)

该脚本在 …

linux chromium docker puppeteer apple-m1

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

Puppeteer:如何提交表格?

使用puppeteer,你怎么能以编程方式提交表单?到目前为止,我已经能够使用page.click('.input[type="submit"]')如果表单实际包含提交输入.但是对于不包含提交输入的表单,关注表单文本输入元素和使用page.press('Enter')似乎并不会导致表单提交:

const puppeteer = require('puppeteer');

(async() => {

    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://stackoverflow.com/', {waitUntil: 'load'});
    console.log(page.url());

    // Type our query into the search bar
    await page.focus('.js-search-field');
    await page.type('puppeteer');

    // Submit form
    await page.press('Enter');

    // Wait for search results page to load
    await page.waitForNavigation({waitUntil: 'load'});


    console.log('FOUND!', page.url());

    // Extract the results from the page
    const links = await page.evaluate(() => {
      const anchors = Array.from(document.querySelectorAll('.result-link a'));
      return anchors.map(anchor …
Run Code Online (Sandbox Code Playgroud)

javascript node.js google-chrome-headless puppeteer

20
推荐指数
2
解决办法
2万
查看次数

使用puppeteer打开本地html文件

是否可以使用puppeteer(没有Web服务器)使用无头chrome打开本地html文件?我只能将它连接到本地服务器.

我可以看到setContent()api和goto()api

  1. page.goto:无法使用本地文件或file://.
  2. page.setContent:用于html字符串

automation unit-testing google-chrome puppeteer

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

如何使用puppeteer填充输入字段

我正在使用puppeteer进行E2E测试,现在尝试使用下面的代码填充输入字段.

await page.type('#email', 'test@example.com');
Run Code Online (Sandbox Code Playgroud)

它工作,但我发现电子邮件地址是一个字符一个字符键入字段,就好像一个真人正在打字.
是否可以让输入字段一次填充电子邮件地址?

e2e-testing puppeteer

19
推荐指数
5
解决办法
2万
查看次数

在Chrome中加载页面时,如何捕获所有网络请求和完整响应数据?

使用Puppeteer,我想在Chrome中加载一个网址并捕获以下信息:

  • 请求网址
  • 请求标头
  • 请求发布数据
  • 响应头文本(包括重复的头文件set-cookie)
  • 转移响应大小(即压缩大小)
  • 完整的反应机构

捕获完整的响应体是导致我的问题的原因.

我试过的事情:

  • 获取响应内容response.buffer- 如果在任何时候有重定向,这不起作用,因为缓冲区在导航上被擦除
  • 拦截请求和使用getResponseBodyForInterception- 这意味着我无法再访问encodedLength,在某些情况下我也遇到了获取正确请求和响应头的问题
  • 使用本地代理可以正常工作,但这会显着减慢页面加载时间(并且还会更改某些行为,例如证书错误)

理想情况下,解决方案应该只有较小的性能影响,并且与正常加载页面没有任何功能差异.我也想避免分叉Chrome.

javascript google-chrome puppeteer

19
推荐指数
3
解决办法
5626
查看次数

错误:无法启动浏览器进程 puppeteer

检查失败 crashForExceptionInNonABIComplianceCodeRange 其功能下面的代码是创建 PDF 文件

   (async function() {

      try {

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

      await page.setContent(pdfOutput);
      await page.emulateMedia("screen");
      await page.pdf({
        path: "routes/planiton/pdf/mypdf.pdf",
        format: "A4",
        printBackground: true
      });

      console.log('done');
      await browser.close();
      //process.exit();

    } catch (e) {
      console.log("Our Error", e)
    }
  })();
Run Code Online (Sandbox Code Playgroud)

node.js puppeteer

19
推荐指数
11
解决办法
6万
查看次数

如何在 docker 容器中禁用核心文件转储

我的 PHP 容器运行 puppeteer 来生成 PDF。通过生成 PDF 文档,它还在我的容器内创建了两个核心转储文件。我不确定它们实际上来自哪里。

主机/服务器是 CentOS 7。

我检查了以下内容:

  1. 没有应用程序错误日志,Browsershot/puppeteer 运行没有错误。
  2. 没有发现错误日志(例如段错误) /var/log/messages

我试图禁用核心转储

通过遵循https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ 的禁用核心转储部分,我已经完成了:

  1. 将以下内容添加到 /etc/security/limits.conf
* soft core 0
* hard core 0
Run Code Online (Sandbox Code Playgroud)
  1. 通过以下方式创建了一个 disable-core-dumps.sh: echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh

  2. 将以下内容添加到 /etc/systemd/coredump.conf

[Coredump]

Storage=none
ProcessSizeMax=0
Run Code Online (Sandbox Code Playgroud)
  1. 重新启动服务器和容器

  2. 我也试过ulimit -c 0在容器内设置(高山)

以上技巧都不适合我。每次 puppeteer 生成 PDF 时,它总是会创建两个核心转储文件,如下所示:

* soft core 0
* hard core 0
Run Code Online (Sandbox Code Playgroud)

核心文件如下所示:

核心转储文件内容

谁能帮我禁用核心转储?非常感谢。

coredump docker docker-compose alpine-linux puppeteer

18
推荐指数
2
解决办法
5945
查看次数