标签: puppeteer

Puppeteer:如何像 Jasmine 中的假计时器一样管理时间?

我需要像 Jasmine 中的假计时器一样管理浏览器中的时间,以避免长时间等待实时测试结果。

puppeteer

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

获取 Puppeteer 中阻止的请求列表

我正在尝试获取被浏览器阻止的请求列表(HTTPS 站点上的 HTTP)。我试过

page.on('requestfailed', request => {
        console.log(request.url());
        console.log('failed');
    });
Run Code Online (Sandbox Code Playgroud)

但它没有提供请求。我看到的唯一请求是那些不再存在的 URL。被阻止的 (HTTP) 请求也不会触发请求事件。

page.on('request', request => { 
   console.log(request.url());
}
Run Code Online (Sandbox Code Playgroud)

还有其他活动我可以收听吗?

编辑:

当我使用时我可以看到有些东西失败了

page._client.on('Network.loadingFailed', async event => {
        const request = await page._networkManager._requestIdToRequest.get(event.requestId);
        console.log(event);
        console.log(request);
    });
Run Code Online (Sandbox Code Playgroud)

但请求变量未定义。所以我不知道哪个请求失败了。

google-chrome-headless puppeteer

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

发送消息到 console.log (jest puppeteer)

为什么我无法看到的console.log在我的消息page.evaluatepage.$page.$$page.$evalpage.$$eval 并不能以访问变量的是?

let variable = 0;
const divColors = await page.evaluate(() => {
      const divs = Array.from(document.querySelectorAll('.map-filters div'));
      let text = divs.map((element, index) => {
        console.log(element.textContent)
        variable =1;
        return element.style.color;
      })
      return text;
    })
Run Code Online (Sandbox Code Playgroud)

为什么我不能做variable=1console.log(element.textContent)在这个例子中?

javascript node.js jestjs puppeteer

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

NodeJS Puppeteer setDownloadBehavior 问题

我正在尝试设置用于下载的自定义路径,但 chromeDownloads无论如何都会将文件放入典型文件夹中。

const puppeteer = require('puppeteer');

(async () => {
   const browser = await puppeteer.launch({
      executablePath: 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe',
      defaultViewport: {
          width: 1920,
          height: 1080
      },
      headless: false,
      userDataDir: "./user_data"
   });

   const page = await browser.newPage();

   await page.goto(
     'https://example.com/page-with-the-file-link',
      { waitUntil: 'domcontentloaded' },
   );

   await page._client.send('Page.setDownloadBehavior', {
         behavior: 'allow',
         downloadPath: 'C:/Users/Me/Downloads/custom/folder/'
   });

   console.log('Start downloading');

   await page.click('a.download-btn');

   await page.waitFor(5000);

   console.log('Complete');
   await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)

因此,它忽略downloadPath选项并将文件放入默认C:/Users/Me/Downloads文件夹。

它也不会等待 5 秒,它只有时间下载文件并在单击下载链接后立即退出。

Start downloading
Complete
(node:51016) UnhandledPromiseRejectionWarning: Error: WebSocket is …
Run Code Online (Sandbox Code Playgroud)

javascript automation google-chrome node.js puppeteer

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

无法使用 Puppeteer 登录

我正在尝试使用以下代码通过 Puppeteer在https://moz.com/login上登录到Moz

const puppeteer = require('puppeteer');

const creds = {
    email: "myemail",
    password: "mypassword"
};

(async () => {
  const browser = await puppeteer.launch({
    args: [
        '--disable-web-security',
      ],
      headless: false
    });
  const page = await browser.newPage();

    await page.goto("https://moz.com/login");
    await page.$eval("input[name=email]", (el, value) => el.value = value, creds.email);
    await page.$eval("input[name=password]", (el, value) => el.value = value, creds.password);
    await Promise.all([
        page.$eval("input[type=submit]", elem => elem.click()),
        page.waitForNavigation({ waitUntil: 'networkidle0' }),
    ]);

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

我知道我传递的电子邮件和密码是正确的,因为我可以使用它们手动登录,但是当我运行上面的脚本时,我在表单上方收到“无效的电子邮件或密码”错误。

Chrome 中的 JS 控制台记录了两个错误:

无法加载资源:服务器无法加载资源:服务器与404状态响应()cs.moz.com/id?d_visid_ver=1.10.0&d_fieldgroup=A&mcorgid=2C702C1653CF9B460A490D4B%40AdobeOrg&mid=86471825972219878023490878783607186756&ts=1564059866100:1 …

node.js web-scraping puppeteer

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

Heroku 上的 Puppeteer:无法启动浏览器进程

我在 Heroku 上使用 Puppeteer,但收到以下错误:

Failed to launch the browser process! /usr/src/app/node_modules/puppeteer/.local-chromium/linux-756035/chrome-linux/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md
Run Code Online (Sandbox Code Playgroud)

heroku puppeteer

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

如果 Protractor 已经存在,Google 为什么要开发 Puppeteer?

有谁知道为什么在已经有 Protractor 的情况下 Google 决定开发 Puppeteer?(专用于 Angular)

selenium automation protractor angular puppeteer

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

在无头服务器云上运行的特定网站上的 Puppeteer 超时

我制作了一个在我的计算机上运行良好的 node.js 网络抓取代码,但是,当我部署到运行 Debian 的 Google Cloud VM 实例时,它会返回特定网站的超时错误。我已经为 puppeteer 尝试了许多不同的设置,但似乎都不起作用。我相信当我从谷歌云服务器运行时,我试图抓取的网站会阻止我的代码,但当我从我的计算机运行时不会。抓取部分在我的电脑上运行良好。Puppeteer 找到 HTML 标签并检索信息。

const puppeteer = require('puppeteer');
const GoogleSpreadsheet = require('google-spreadsheet');
const { promisify } = require('util');
const credentials = require('./credentials.json');

async function main(){

    const scrapCopasa = await scrapCopasaFunction();

    console.log('Done!')

}



async function scrapCopasaFunction() {

    const browser = await puppeteer.launch({
        args: ['--no-sandbox'], 
    });
    const page = await browser.newPage();
    //await page.setDefaultNavigationTimeout(0);
    //await page.setViewport({width: 1366, height: 768});
    await page.setUserAgent('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36');
    await page.goto('http://www.copasa.com.br/wps/portal/internet/abastecimento-de-agua/nivel-dos-reservatorios');
    //await …
Run Code Online (Sandbox Code Playgroud)

javascript node.js web-scraping google-cloud-platform puppeteer

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

Puppeteer pdf 分页错误

我尝试通过 puppetter 生成 pdf 文件。它适用于一页,但是当我尝试生成多页 pdf 文档时,我有一个分页符的错误。HTML模板用于下面的生成。如果可以,请你帮助我。复制的前提条件:以 100% 的高度填充第一页并为下面的块添加标题。

HTML模板

function getHTMLTemplate(
    height = 'auto', 
    component = '<div></div>', 
    style = '<style></style>',
    header = '<div></div>',
    footer = '<div></div>',
) {
    return `
        <!DOCTYPE html>
        <html>                
            <head>
                <meta charset="utf-8" />
                <meta http-equiv="X-UA-Compatible" content="IE=edge">
                <title>HTML to PDF Example</title>
                <meta name="viewport" content="width=device-width, initial-scale=1">
                <style>
                    * {margin: 0; padding: 0; border-spacing: 0;}

                    .page {
                        width: 210mm;
                        height: ${height};
                        overflow: hidden;
                        background: transparent;
                        margin-top: -1px !important;
                        margin-bottom: -1px !important;
                    }

                    body>div {
                        width: 100%;
                        position: fixed; …
Run Code Online (Sandbox Code Playgroud)

javascript pdf node.js puppeteer

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

需要 dotenv 时如何修复“require(...).config(...) is not a function”错误

我在使用 dotenv 时遇到此错误:

(async () => {
^
TypeError: require(...).config(...) is not a function
Run Code Online (Sandbox Code Playgroud)

Evertyghing 工作正常,直到我需要 dotenv。

这是代码

const puppeteer = require('puppeteer');
const fs = require('fs');
require('dotenv').config()

(async () => {
  const browser = await puppeteer.launch({
    headless: false,
    args: ['--start-maximized'],
    defaultViewport: null,
  });

  const page = await browser.newPage();
  ...more code here
})()
Run Code Online (Sandbox Code Playgroud)

Dotenv 已正确安装:

  "dependencies": {
    "dotenv": "^8.2.0",
    "puppeteer": "^5.3.1"
  }
Run Code Online (Sandbox Code Playgroud)

require typeerror node.js puppeteer dotenv

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