标签: puppeteer

使用puppeteer在循环中抓取多个URL

我有

urls = ['url','url','url'...]
Run Code Online (Sandbox Code Playgroud)

这就是我正在做的事情

urls.map(async (url)=>{
  await page.goto(`${url}`);
  await page.waitForNavigation({ waitUntil: 'networkidle' });
})
Run Code Online (Sandbox Code Playgroud)

这似乎不等待页面加载并快速访问所有网址(我甚至尝试使用page.waitFor)

只是想知道我做了一些根本错误的事情,或者不建议/支持这种类型的功能

web-scraping google-chrome-headless puppeteer

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

将jquery注入puppeteer页面

我正在尝试将jquery注入我的puppeteer页面,因为document.querySelector不会为我剪切它:

async function inject_jquery(page){
  await page.evaluate(() => {
    var jq = document.createElement("script")
    jq.src = "https://code.jquery.com/jquery-3.2.1.min.js"
    document.querySelector("head").appendChild(jq)
  })
  const watchDog = page.waitForFunction('window.jQuery !== undefined');
  await watchDog;
}
Run Code Online (Sandbox Code Playgroud)

结果是它大部分时间超时.有没有人有办法解决吗?

jquery node.js puppeteer

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

Node.js puppeteer - 如何设置导航超时?

我正在使用node.js和puppeteer来获取一些数据.我正在打开的一些文件很大......然后我收到一个错误:

错误:

our error { TimeoutError: Navigation Timeout Exceeded: 30000ms exceeded
    at Promise.then (/project/node_modules/puppeteer/lib/NavigatorWatcher.js:74:21)
    at <anonymous> name: 'TimeoutError' }
Run Code Online (Sandbox Code Playgroud)

如何忽略它或设置更高的超时?

那是我的剧本:

await page.goto('url'+tableCell04Val, {waitUntil: 'load'});
Run Code Online (Sandbox Code Playgroud)

javascript node.js puppeteer

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

如何使用puppeteer获取所有控制台消息?包括错误,CSP违规,资源失败等

我正在使用puppeteer获取一个页面,该页面在浏览器控制台中有一些错误,但是所有控制台消息都没有触发puppeteer的控制台事件.

puppeteer chromium浏览器显示多个控制台消息

多个控制台消息

但是,puppeteer只有控制台在节点中记录一件事

console在节点中记录一件事

这是我目前使用的脚本:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  page.on('console', msg => console.log('PAGE LOG:', msg.text));
  await page.goto('https://pagewithsomeconsoleerrors.com');
  await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)

编辑:正如我在下面的评论中所述,我确实尝试了Everettss推荐但不起作用的page.waitFor(5000)命令.

Edit2:msg.text意外删除了传播操作员.

Edit3:我在github上用类似但不同的示例屏幕截图打开了一个问题:https://github.com/GoogleChrome/puppeteer/issues/1512

puppeteer

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

如何使用headless下载文件与puppeteer:true?

我一直在运行以下代码,以便csv从网站下载文件http://niftyindices.com/resources/holiday-calendar:

const puppeteer = require('puppeteer');

(async () => {
const browser = await puppeteer.launch({headless: true});
const page = await browser.newPage();

await page.goto('http://niftyindices.com/resources/holiday-calendar');
await page._client.send('Page.setDownloadBehavior', {behavior: 'allow', 
downloadPath: '/tmp'})
await page.click('#exportholidaycalender');
await page.waitFor(5000);
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)

随着headless: false它的工作,它将文件下载到/Users/user/Downloads.用headless: true它不起作用.

我在macOS Sierra(MacBook Pro)上使用puppeteer版本运行1.1.1它,它将Chromium版本拉66.0.3347.0.local-chromium/目录并使用npm initnpm i --save puppeteer设置它.

有什么想法错了吗?

在此先感谢您的时间和帮助,

chromium node.js puppeteer

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

运行脚本时抛出找不到模块“dotenv”

在加载.env文件以将 env 值传递给getToken.jscypress 根文件夹中的脚本时,会抛出无法找到模块 'dotenv' 错误。我已经安装了npm install dotenv. 有人可以告诉我在这里缺少什么吗?.env文件位于 cypress 根文件夹中。

环境:Windows 10 > git bash /命令提示符

    const puppeteer = require("puppeteer");
    require('dotenv').config({path: '.env'})
    
    const baseURL = process.env.CYPRESS_BASE_URL
    const testsUser = process.env.CYPRESS_TESTS_USERNAME
puppeteer
  .launch({ headless: true, chromeWebSecurity: false, args: ['--no-sandbox'] })
  .then(async browser => {
    const page = await browser.newPage();
    await page.goto(`${baseURL}/login`);

    await page.waitFor(2000);
    await page.waitForSelector("input[name=username]");
    await page.type("input[name=username]", testsUser , {
      delay: 50
    });

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

包.json

"scripts": {
    "cy:run": "cypress run",
    "get-token-main": …
Run Code Online (Sandbox Code Playgroud)

puppeteer cypress dotenv

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

有没有办法使用剧作家连接到我现有的浏览器会话

我希望连接到网站并下载一些 pdf 文件。该网站允许我们只有登录后才能查看内容。它要求我们使用OTP登录,并且不能同时在超过3台设备上登录。

我想下载列出的所有 pdf 文件。所以我之前尝试过

python playwright open --save-storage websitename.json
Run Code Online (Sandbox Code Playgroud)

保存登录信息。但它不适用于该特定网站。website.json 文件是空的,但它适用于其他网站。

因此,我能想到的唯一解决方案是连接到当前的浏览器,打开该网站,然后下载这些 pdf。

如果您对此有解决方案,甚至有其他方法,请告知。

我也在考虑转行做木偶师。但是,我不知道使用node.js解析html,因为我觉得使用css选择器更舒服,所以我无法切换它。

web-scraping python-3.x puppeteer playwright-python

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

使用Puppeteer拦截页面上的XHR请求并返回模拟响应的最佳方法

我需要能够在加载Puppeteer的页面上拦截XHR请求并返回模拟响应,以便为我的Web应用程序组织无后端测试.最好的方法是什么?

automated-tests puppeteer

16
推荐指数
3
解决办法
7273
查看次数

与Puppeteer + Istanbul反应的代码覆盖率

我创建了一个应用程序,create-react-app并在Jest + Istanbul中编写了一些UI测试.

我想获得这些UI测试的代码覆盖率.我喜欢继续使用jest,因为我已经将它用于单元测试.

create-react-app如果可能的话,我不想弹出.但如果别无选择,我会对此持开放态度.

到目前为止我尝试过的:

package.json

"scripts": {
  "uitest": "react-scripts test --env=jsdom --verbose --testMatch='**/*.ui-test.{js}'",
}
Run Code Online (Sandbox Code Playgroud)

如果我跑 npm run uitest -- --coverage

尝试失败

^我认为在上面的场景中它只捕获测试而不是实际的App.

我该如何解决?


其他尝试失败:

1)如何覆盖伊斯坦布尔的React jsx文件? - 不要像我使用的那样申请create-react-app

2)https://github.com/facebook/create-react-app/issues/3257 - 显然这个功能被提出但被拒绝了.

3)https://github.com/istanbuljs/puppeteer-to-istanbul/issues/18 - 有一个名为puppeteer-to-istanbul的库,但它不支持源映射.(参见问题链接)

4)我也查看了关于safaribooks的Node.js Web开发 - 第四版的书 - 我找到了一个有用的Puppeteer指南,但它似乎没有涵盖,代码覆盖率.

5)在safaribooks上预订动手持续集成和交付 - 有一个关于Puppeteer + Jest测试的部分,没有说明代码覆盖率.

6)我试过puppeteer-to-istanbul- >我们可以通过这种方式计算bundle的代码覆盖率,它不支持源映射.

7)尝试了Enselic的建议,但无法使其正常工作.push尝试推送时,它似乎在自定义预设中的方法崩溃babel-plugin-istanbul.

istanbul reactjs jestjs create-react-app puppeteer

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

如何在 puppeteer 中获取 div 中的文本

const puppeteer = require("puppeteer");

(async function main() {
    try {
        const browser = await puppeteer.launch({headless: false});
        const page = await browser.newPage();
        page.setUserAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36");

        await page.goto("https://www.qimai.cn/rank/index/brand/all/genre/6014/device/iphone/country/us/date/2019-03-19", {waitUntil: 'load', timeout: 0});
        await page.waitForSelector(".container");
        const sections = await page.$$(".container");

        const freeButton = await page.$('[href="/rank/index/brand/free/device/iphone/country/us/genre/6014/date/2019-03-19"]');
        await freeButton.click();


        // free list

        const appTable = await page.waitForSelector(".data-table");
        const lis = await page.$$(".data-table > tbody > tr > td");

        // go to app content
        const appInfo = …
Run Code Online (Sandbox Code Playgroud)

javascript puppeteer

16
推荐指数
5
解决办法
4万
查看次数