标签: puppeteer

如何将参数传递给 page.evaluate?

我希望我的结果是一个函数,它在浏览器上下文中运行,表现得像一个函数。所以我可以要求它获取不同的资源。然而这个p论点是行不通的。为什么,我该如何解决?

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({args: ['--no-sandbox'], headless: false})
  const page = await browser.newPage()
  await page.goto('https://hendry.iki.fi')

  const p = '/about'

  const result = await page.evaluate((p) => {
    return fetch(p)
    .then((response) => {
      if (response.ok) {
        return response.text()
      }
    })
  })

  console.log(result)

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

javascript async-await puppeteer

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

在 facebook messenger 上使用 puppeteer 时没有选择器节点

我正在使用 Puppeteer 为我的家庭项目制作 Facebook Messenger api(有点)。

到目前为止,我可以成功使用 puppeteer 登录我的帐户。

当我想在登录后自动化时,真正的问题就开始了。

我无法点击任何元素。


例如

我想点击小“我”图标

在此处输入图片说明

然后我复制了选择器,如

在此处输入图片说明

我得到的CONSO以下错误文件

(node:4771) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): AssertionError [ERR_ASSERTION]: No node found for selector: #cch_feb64f1b00e628 > div._5742 > ul > li:nth-child(4) > a > div > svg
(node:4771) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Run Code Online (Sandbox Code Playgroud)

代码

const puppeteer = …
Run Code Online (Sandbox Code Playgroud)

javascript automation facebook node.js puppeteer

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

在Heroku上无头执行Chrome时出错

我目前正在研究一个项目,在该项目中,我需要构建一个应用程序,该应用程序需要在浏览器中打开URL才能使用其中的某些功能。
为此,我用的木偶,以打开在服务器端的浏览器,所以我可以使用它像一个API一个脚本的NodeJS里面。

这是代码(nodejs):

app.get('/do', (req, res) => {
    console.log("ok");
    (async() => {
        var browser = await puppeteer.launch(
            { args: ['--no-sandbox','--disable-setuid-sandbox'], headless: false });
        var page = await browser.newPage();
        await page.goto('https://url.com');//i hid the url for personal reason
        await page.waitFor(1000); // to wait for 1000ms
        await page.waitFor('body div'); // to wait for the 'body div' selector in body
        await page.waitFor(() => Math.random() < 0.5); // to wait for the predicate
        await page.screenshot({
            path: 'public/photo.png'
        });

        await browser.close();
        await res.end('<html><head></title></head><body><h1><img src=photo.png …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome heroku node.js puppeteer

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

Node js Puppeteer 转到页面数组

我尝试从我的数组中逐页浏览,但得到了这个:

(节点:4196)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个请求侦听器。使用 Emitter.setMaxListeners() 增加限制(节点:4196) MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。11 帧分离侦听器添加 d。使用 Emitter.setMaxListeners() 增加限制(节点:4196) MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个生命周期事件监听器。使用emitter.setMaxListeners() 增加限制(node:4196) UnhandledPromiseRejectionWarning: E​​rror: Protocol error (Page.navigate): Target closed。at Promise (D:\Kutz\irrParse\node_modules\puppeteer\lib\Connection.js:198:56) at new Promise () at CDPSession.send (D:\Kutz\irrParse\node_modules\puppeteer\lib\Connection.js :197:12) 在导航 (D: \Kutz\irrParse\node_modules\puppeteer\lib\Page.js:520:39) 在 Page.goto (D:\Kutz\irrParse\node_modules\puppeteer\lib\Page.js:500:7) 在 uniqueLinks.forEach ( D:\Kutz\irrParse\scrape.js:26:16) at Array.forEach() at D:\Kutz\irrParse\scrape.js:25:15 at process._tickCallback (internal/process/next_tick.js: 118:7) (node:4196) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误要么是因为在没有 catch 块的情况下抛出了异步函数,要么是因为拒绝了一个没有用 .catch() 处理过的承诺。(rjection id: 1) (node:4196) [DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的承诺拒绝离子将使用非零退出代码终止 Node.js 进程。(节点:4196)未处理的PromiseRejectionWarning:

const puppeteer = require("puppeteer");
var forEach = require('async-foreach').forEach;


const url = …
Run Code Online (Sandbox Code Playgroud)

javascript node.js puppeteer

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

如何使用 puppeteer 查找网页上的所有资产?

我想使用 puppeteer 搜索页面并返回所有可用资产,包括图像、pdf、任何可嵌入的内容等。

出于我们的目的,让我们简单地使用图像。img标签有一个src属性,但是通过 CSS 规则加载的图像呢?有没有办法查看加载的资产总数?

javascript node.js web-scraping express puppeteer

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

在 Chrome Puppeteer 中获取 XPath 列表的正确方法

我正在使用 Chrome Puppeteer 获取网页上的某些内容。此内容是伪表中的项目列表。我正在使用 XPath 来获取此内容。

当我测试 Xpath 表达式时 [在 Chrome 中使用 XPath Helper Extension] 它显示文本列表,所以我知道 XPath 表达式很好。

但是,我在尝试使用 Puppeteer 执行此操作时遇到了问题。下面是相关代码【我省略了开闭傀儡代码】:

var xpath_expr_str = "//div[contains(@class,'listings')]/div[4]/p/a";
var page_url_str = 'https://my-url';

await page.goto(page_url_str);
await page.waitForXPath(xpath_expr_str);

var xpath_payload_arr = await page.$x(xpath_expr_str);
var xpath_val_arr = await page.evaluate(function(payload_arr){
    var url_list_arr = [];
    for(var i = 0; i < payload_arr.length; i++)
    {
        url_list_arr.push(payload_arr[i].textContent);
    }
    return url_list_arr;
}, xpath_payload_arr);

console.log(xpath_val_arr);
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到以下错误:

UnhandledPromiseRejectionWarning: TypeError: Converting circular structure to JSON

我似乎无法进入列表。但是,问题是如果我尝试只获取列表中的单个项目,它就可以正常工作。例如,以下代码有效:

var xpath_val_str = await page.evaluate(function(payload_arr){
    return payload_arr.textContent;
}, …
Run Code Online (Sandbox Code Playgroud)

javascript xpath node.js promise puppeteer

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

将Puppeteer屏幕截图重定向到S3

我正在尝试执行与该人员所做的类似的操作,但是我很难弄清楚如何将Puppeteer屏幕截图的输出直接重定向到S3,因为屏幕截图功能仅具有用于本地目录路径的参数。将图像存储在Lambda上是一种选择,但不是首选。

amazon-s3 amazon-web-services puppeteer

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

Puppeteer:遍历URL并等待按顺序打印?

因此,我正在尝试使用puppeteer迭代一些URL,从HTML内容中获取数据,然后打印出CSV.

我被困在你打印数据的那一部分.现在我只是测试并尝试为每个数据做一个console.log().

我遇到的主要问题是循环运行非常快,打开了大量的浏览器窗口,并且日志全部乱序.

这是我的代码:

const puppeteer = require('puppeteer');

let scrape = async (i) => {
  const browser = await puppeteer.launch({
    headless: false
  });
  const page = await browser.newPage();

  await page.goto(`https://webPageURL.org/list/objects/${i}/`);
  await page.waitFor(1000);

  const result = await page.evaluate(() => {
    let data = document.querySelector('.someClass')
    if (data !== null) {
      data = data.innerText;
    }
    return {
      data
    }
  });
  await browser.close();
  return result;
};
for (var i = 0; i < 10; i++{
    scrape(i).then((value) => {
      console.log(i, ': ', value);
    });
  } …
Run Code Online (Sandbox Code Playgroud)

javascript node.js web-scraping puppeteer

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

Node.js puppeteer mysql - 使用 mysql 在循环内插入数据库中获取的值

我正在使用 node.js 和 puppeteer 来获取一些数据。...现在我想将获取的数据插入到数据库中...使用 mysql。下面似乎工作......但让我感到困惑的是在 console.log('DB 插入成功。记录:'+i); 总是落后,一段时间后它会停止......尽管仍有可用的记录表。

那是我的应用程序:

  let tableCell01;
  let tableCell01Val;
  let tableCell02;
  let tableCell02Val;

  const tableRows = await page.$$('table.tableFile2 > tbody > tr');

  for (let i=1; i < tableRows.length; i++){

    tableRow = tableRows[i];
    tableCell01 = await tableRow.$('td:nth-child(1) a');
    tableCell01Val = await page.evaluate( tableCell01 => tableCell01.innerText, tableCell01 );
    tableCell02 = await tableRow.$('td:nth-child(2)');
    tableCell02Val = await page.evaluate( tableCell02 => tableCell02.innerText, tableCell02 );

    tableCell02ValA.replace(/(^\s+|\s+$)/g,'');

    console.log('\n');
    console.log('ID: '+tableCell01Val);
    console.log('Company: '+tableCell02Val);
    console.log('Iterator: '+i);

    const insertCompanyList = "INSERT INTO companyList ( company_name, …
Run Code Online (Sandbox Code Playgroud)

javascript mysql node.js node-mysql puppeteer

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

木偶在所选页面上执行js函数

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

在此页面中,接下来几天的内容将随js动态加载,而无需更改网站的URL(您可以在表格的右上角尝试)。

使用puppeteer,并使用以下代码

await page.goto ('https://www.diretta.it/');
Run Code Online (Sandbox Code Playgroud)

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

终端更改日的js可执行文件中的功能是:

> set_calendar_date ('1')
Run Code Online (Sandbox Code Playgroud)

javascript node.js web-scraping puppeteer

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