Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Puppeter始终未定义,但devtools适用于嵌套节点列表_Javascript_Node.js_Dom_Web Scraping_Puppeteer - Fatal编程技术网

Javascript Puppeter始终未定义,但devtools适用于嵌套节点列表

Javascript Puppeter始终未定义,但devtools适用于嵌套节点列表,javascript,node.js,dom,web-scraping,puppeteer,Javascript,Node.js,Dom,Web Scraping,Puppeteer,我是木偶演员的新手,不太确定我在这里做错了什么,但在开发工具中,我得到了正确的输出。然而,我希望用这些值创建一个文件,并继续得到未定义的 我认为这与节点列表和无法返回它们有关,但我不知道如何修复它 这在DevTools中起作用: let arr2 = Array.from(document.querySelectorAll( "#data > div.data-wrapper > div > div > table > tbody tr")) .map(row

我是木偶演员的新手,不太确定我在这里做错了什么,但在开发工具中,我得到了正确的输出。然而,我希望用这些值创建一个文件,并继续得到未定义的

我认为这与节点列表和无法返回它们有关,但我不知道如何修复它

这在DevTools中起作用:

let arr2 = Array.from(document.querySelectorAll(
  "#data > div.data-wrapper > div > div > table > tbody  tr"))
.map(row => (
  {site:row.querySelector('td:nth- child(2)').innerText,
  pass:row.querySelector('td:nth- child(10)').innerText,
  user:row.querySelector('td:nth-child(9)').innerText
  }))
  //with a console.log()
我还尝试了
row.evaluate(()=>)
,但这对我不起作用

以下是我的代码,它不起作用:

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
    await page.authenticate({ username: "username", password: "password" });
    await page.goto("https://website/.../all");
    await page.waitFor(120000); // beacuse It loads everything slowly and times out the default 30000

    console.log("started evalating");
    var data = await page.evaluate(() => {
      Array.from(
        document.querySelectorAll(
          "#data > div.data-wrapper > div > div > table > tbody  tr"
        )
      ).map(row => {
        return {
          site: row.querySelector("td:nth-child(2)").innerText,
          pass: row.querySelector("td:nth-child(10)").innerText,
          user: row.querySelector("td:nth-child(9)").innerText
        };
      });
    });
  console.log(data);
})();

//I want an array of objects but the result throws errors or comes back with [undefined,......]

传递给的page函数缺少语句,因此不返回值。因此,变量
数据

有两个额外的细节需要注意:

  • 具有内置功能

    Array.from(arrayLike, mapFn)     // good
    Array.from(arrayLike).map(mapFn) // bad
    
  • 只要可能,您应该使用或代替

    let data = ... // good
    var data = ... // bad
    
  • 以下是代码的修订版,可以正常工作:

    'use strict';
    
    const puppeteer = require('puppeteer');
    
    (async () => {
      const browser = await puppeteer.launch({
        headless: false,
      });
    
      const page = await browser.newPage();
    
      await page.authenticate({
        username: 'username',
        password: 'password',
      });
    
      await page.goto('https://website/.../all');
    
      await page.waitFor(120000);
    
      console.log('started evalating');
    
      let data = await page.evaluate(() => {
        return Array.from(
          document.querySelectorAll('#data > div.data-wrapper > div > div > table > tbody tr'),
          row => ({
            site: row.querySelector('td:nth-child(2)').innerText,
            pass: row.querySelector('td:nth-child(10)').innerText,
            user: row.querySelector('td:nth-child(9)').innerText,
          })
        );
      });
    
      console.log(data);
    })();
    

    传递给的page函数缺少语句,因此不返回值。因此,变量
    数据

    有两个额外的细节需要注意:

  • 具有内置功能

    Array.from(arrayLike, mapFn)     // good
    Array.from(arrayLike).map(mapFn) // bad
    
  • 只要可能,您应该使用或代替

    let data = ... // good
    var data = ... // bad
    
  • 以下是代码的修订版,可以正常工作:

    'use strict';
    
    const puppeteer = require('puppeteer');
    
    (async () => {
      const browser = await puppeteer.launch({
        headless: false,
      });
    
      const page = await browser.newPage();
    
      await page.authenticate({
        username: 'username',
        password: 'password',
      });
    
      await page.goto('https://website/.../all');
    
      await page.waitFor(120000);
    
      console.log('started evalating');
    
      let data = await page.evaluate(() => {
        return Array.from(
          document.querySelectorAll('#data > div.data-wrapper > div > div > table > tbody tr'),
          row => ({
            site: row.querySelector('td:nth-child(2)').innerText,
            pass: row.querySelector('td:nth-child(10)').innerText,
            user: row.querySelector('td:nth-child(9)').innerText,
          })
        );
      });
    
      console.log(data);
    })();