在 Node 中迭代 page.evaluate

Iterate over page.evaluate in Node

我正在尝试使用 for-of 循环方法来迭代 URL 数组,并将它们与 page.evaluate(人偶库)函数一起使用。我将 post 我的代码片段(单个 URL 版本)以便这里的人可以更好地向我解释如何循环它。我想定义一个 url 的数组(可能在 Json 中定义),而不是每次我想在我的学校科目之间切换时替换第二个 url

const puppeteer = require('puppeteer');

let scrape = async () => {
const browser = await puppeteer.launch({headless: true});
const page = await browser.newPage();
await page.goto('https://marconi-pr.registroelettronico.com/quaderno/'); //go to login page
await page.waitFor(2000);
await page.click('#ext-container-6 > div.x-size-monitors.scroll'); //skip some ads
await page.waitFor(2000);
await page.type('#ext-element-21', 'user'); //user field
await page.waitFor(1000);
await page.type('#ext-element-27', 'password'); //pwd field
await page.click('#btnAccedi'); //login button
await page.waitFor(5000);
await page.goto('https://marconi-pr.registroelettronico.com/mastercom/register_manager.php?_dc=1537450418307&id_materia=1000188&action=get_assignments_subject&page=1&start=0&limit=25'); //after login i want to access this
const html = await page.evaluate(el => el.innerHTML, await page.$('pre')); //copying some things
await browser.close();
return html;
};

scrape().then((html) => {
html = JSON.parse(html); //parsing as json
console.log(html); // Success!
});

您可以在使用以下方法登录后对一组 URL 使用 page.evaluate()

'use strict';

const puppeteer = require('puppeteer');

const urls = [
  'https://www.example.com/page-1',
  'https://www.example.com/page-2',
  'https://www.example.com/page-3',
];

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

  const page = await browser.newPage();

  let result = '';

  await page.goto('https://www.example.com/login');

  await page.type('#username', 'username');
  await page.type('#password', 'password');

  await page.click('#submit');

  await page.waitForNavigation();

  for (let i = 0; i < urls.length; i++) {
    await page.goto(urls[i]);

    result = await page.evaluate(() => document.getElementById('example').innerHTML);

    console.log(result);
  }

  await browser.close();
})();