Javascript 傀儡程序通过URL数组循环访问下一页不起作用

Javascript 傀儡程序通过URL数组循环访问下一页不起作用,javascript,arrays,loops,web-scraping,puppeteer,Javascript,Arrays,Loops,Web Scraping,Puppeteer,我试图让Puppeter在一个数组中访问多个URL,但它似乎不起作用。它永远挂着 这是一个似乎不起作用的片段。注意使用模板文本的URL。 这是完整的代码 当转到完成时,您将已经导航,因此等待页面;从不检测导航事件 在您的情况下,您可以在goto呼叫中添加一个,以决定等待策略 替换这个 等待页面。转到“${url}”; wait page.waitForNavigation{waitUntil:networkidle2}; 用这个 wait page.goto`${url}`,{waitUntil

我试图让Puppeter在一个数组中访问多个URL,但它似乎不起作用。它永远挂着

这是一个似乎不起作用的片段。注意使用模板文本的URL。 这是完整的代码
当转到完成时,您将已经导航,因此等待页面;从不检测导航事件

在您的情况下,您可以在goto呼叫中添加一个,以决定等待策略

替换这个

等待页面。转到“${url}”; wait page.waitForNavigation{waitUntil:networkidle2}; 用这个

wait page.goto`${url}`,{waitUntil:networkidle2}; 最简单的例子: 请注意,我为每个URL创建了一个新页面,以避免您在这个特定网站的goto中遇到的问题

const木偶演员=需要额外演员; //启用隐藏插件和所有规避 puppeter.userequirepuppeteer-extra-plugin-steavy; 异步函数{ const browser=wait puppeter.launch{headless:false}; const page=await browser.newPage; //创建URL数组 设urlist=[]; 常量pageNumberToNumber=3;//由我插入 console.logurlist; //将URL添加到数组
对于let i=1;我感谢您,浏览器现在只是无限期地位于第一页,从未导航到下一页。您从哪里获得了您提供的url?我在代码中没有看到它。很抱歉,从模板字符串粘贴了错误的url…我更新了示例以使用您的url。让我知道它是如何运行的,现在我情绪激动:不幸的是,没有幸运的是,我的朋友。根据您最初发布的完整代码示例,it控制台记录了3个URL。第一个是第0页,没有结果。您可能有一个一次性错误。您需要修复计数器。但是,即使添加了这一点,您的完整代码示例实际上也没有像您前面提到的那样转到。我不确定您示例中的转到为什么会这样做es似乎不起作用…点击页面并收集数据是一种选择吗?否则我今晚晚些时候再看:
  //create array of urls
  let urlList = [];

  //add urls to array

  for (let i = 0; i < pageNumberToNumber; i++) {
    urlList.push(
      `https://www.realtor.ca/map#ZoomLevel=14&Center=43.771556%2C-79.427630&LatitudeMax=43.78395&LongitudeMax=-79.38710&LatitudeMin=43.75916&LongitudeMin=-79.46816&view=list&CurrentPage=${i}&Sort=6-D&PGeoIds=g10_dpz90869&GeoName=Willowdale%2C%20Toronto%2C%20ON&PropertyTypeGroupID=1&PropertySearchTypeId=1&TransactionTypeId=2&PriceMax=1500000&BuildingTypeId=1&Currency=CAD`
    );
  }

  console.log(urlList);
  console.log(urlList.length);

  for (let i = 0; i < urlList.length; i++) {
    const url = urlList[i];
    await page.goto(`${url}`);
    await page.waitForNavigation({ waitUntil: "networkidle2" });
  }
const puppeteer = require("puppeteer-extra");
// Enable stealth plugin with all evasions
puppeteer.use(require("puppeteer-extra-plugin-stealth")());

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

  let url =
    "https://www.realtor.ca/map#ZoomLevel=14&Center=43.771556%2C-79.427630&LatitudeMax=43.78395&LongitudeMax=-79.38710&LatitudeMin=43.75916&LongitudeMin=-79.46816&view=list&CurrentPage=1&Sort=6-D&PGeoIds=g10_dpz90869&GeoName=Willowdale%2C%20Toronto%2C%20ON&PropertyTypeGroupID=1&PropertySearchTypeId=1&TransactionTypeId=2&PriceMax=1500000&BuildingTypeId=1&Currency=CAD";

  await page.goto(url);
  await page.waitFor(10000);

  //page.evaluate lets you use JavaScript as it was being used in the developer console on the page
  const result = await page.evaluate(() => {
    let data = []; // Create an empty array that will store our data
    let elements = document.querySelectorAll(".cardCon"); // Select all Products

    for (var element of elements) {
      // Loop through each product
      let price =
        element.children[0].children[1].childNodes[1].children[1].childNodes[1]
          .childNodes[3].innerText; // Select the price
      let address =
        element.children[0].children[1].childNodes[1].children[1].childNodes[1]
          .childNodes[5].innerText; // Select the address
      let details = element.children[0].children[1].childNodes[1].children[1].childNodes[3].innerText.replace(
        /\n/g,
        " "
      ); // Select the details
      let url = element.children[0].childNodes[3].href; // Select the address

      data.push({ price, details, address, url }); // Push an object with the data onto our array
    }

    return data; // Return our data array
  });

  console.log(result);

  //get total page number
  let totalPageNumber = await page.$eval(
    "#ListViewPagination_Bottom > div > div > div > span.paginationTotalPagesNum",
    (element) => element.innerText
  );

  console.log(totalPageNumber);

  //convert total page number from string to number
  let pageNumberToNumber = parseInt(totalPageNumber);

  //create array of urls
  let urlList = [];

  //add urls to array

  for (let i = 0; i < pageNumberToNumber; i++) {
    urlList.push(
      `https://www.realtor.ca/map#ZoomLevel=14&Center=43.771556%2C-79.427630&LatitudeMax=43.78395&LongitudeMax=-79.38710&LatitudeMin=43.75916&LongitudeMin=-79.46816&view=list&CurrentPage=${i}&Sort=6-D&PGeoIds=g10_dpz90869&GeoName=Willowdale%2C%20Toronto%2C%20ON&PropertyTypeGroupID=1&PropertySearchTypeId=1&TransactionTypeId=2&PriceMax=1500000&BuildingTypeId=1&Currency=CAD`
    );
  }

  console.log(urlList);
  console.log(urlList.length);

  for (let i = 0; i < urlList.length; i++) {
    const url = urlList[i];
    await page.goto(`${url}`);
    await page.waitForNavigation({ waitUntil: "networkidle2" });
  }
})();