【问题标题】:puppeteer execute a js function on the chosen pagepuppeteer 在所选页面上执行 js 函数
【发布时间】:2019-07-04 10:21:55
【问题描述】:

这是分析页面https://www.diretta.it/

在这个页面里用js动态加载了接下来几天的内容,不改变网站的URL(可以在表格右上角试试)。

使用puppeteer,代码如下

await page.goto ('https://www.diretta.it/');

它加载今天页面的内容。 有没有办法用明天的内容加载页面? 我必须从接下来几天的比赛中收集信息

更改日从终端执行的 js 中的函数是:

> set_calendar_date ('1')

【问题讨论】:

  • 您是否尝试过对整个文档进行评估?类似await page.$eval('html', () => set_calendar_date ('1'));

标签: javascript node.js web-scraping puppeteer


【解决方案1】:

您正在寻找的是page.evaluate() 函数。 这个函数可以让你在页面上下文中运行任何 JS 函数。

简单来说,运行page.evaluate() 类似于打开开发工具并直接在那里写set_calendar_date('1')

这是一个有效的 sn-p,如果您想亲眼看到它,请不要犹豫,将 {headless: false} 传递给 puppeteer.launch()

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.diretta.it/');
  await page.evaluate(() => {
    set_calendar_date ('1');
  });
  await page.waitFor(500); //Wait a bit for the website to refresh contents

  //Updated table is now available
})();

【讨论】:

  • 如果函数是在另一个上下文中定义的,这将如何工作?假设我有一个 id 为“main-iframe”的 iframe 和一个函数“onTest()”,那么我将如何调用该函数?
  • 您将如何处理 Cannot find name 'set_calendar_date ' 错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 2017-10-16
  • 2017-09-02
  • 2018-05-16
  • 2019-07-29
  • 2015-12-21
相关资源
最近更新 更多