首页 > 解决方案 > 如何将元素推送到异步函数内的数组?

问题描述

如何在异步函数(木偶)内推送数组中的元素?

该页面被结构化为严重的级别。只有通过单击具有特定 ID 的单元元素内的链接才能显示级别。

我已经实现了选择当前显示的 ID,将它们推入数组以循环并单击具有该 ID 的元素内的链接以打开下一个 hiracy。在此之后,我重复这个过程,通过循环遍历新选择的 ID 数组(旧 ID + 新 ID)减去前一个循环的 ID 数组(旧 ID)的差异。

执行第二个循环时出现问题。似乎我在异步函数内部将元素推入数组时犯了一个错误......有些链接没有被点击,但没有方案,所以我认为问题是由异步引起的。

谢谢!对不起,如果那不是一个正确的描述,那是我的第一个问题,我是这个异步世界的新手。

(async function main() {
   try {

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

     await page.goto('---url---');
     await page.waitForSelector('.cotable');

     const arrIDMaster = [];

     await levelLoop(page, arrIDMaster);
     await levelLoop(page, arrIDMaster);

   } catch (e) {

   }

})();



async function levelLoop(page, arrIDMaster) {

   const rows = await page.$$('.coRow.hi.coTableR');
   const arrIDLocalGet = [];

   //Get all ID's
   for (const row of rows) {
      const rowID = await page.evaluate(el => el.id, row);
      await arrIDLocalGet.push(rowID);
   }

   // First one needs to be removed
   arrIDLocalGet.shift();

   //Create Local ID-Array - difference
   const arrIDLocal = await differenceOf2Arrays(arrIDMaster,arrIDLocalGet);

   // Loop through local ID-Array and Click
   for (const id of arrIDLocal) {
     const rows = await page.$('#' + id);
     const link = await rows.$('a.KnotenLink');
     await link.click();
   }
   //push only new ID's to global array
   for (const id of arrIDLocal) {
     await arrIDMaster.push(id);
   }

   };

function differenceOf2Arrays (array1, array2) {
     return new Promise(resolve => {
       let arrdiff = array2.filter(x => !array1.includes(x));
       resolve(arrdiff);
     });
};

希望有人可以帮助我,也许这只是generell的一个错误,因为我对这些东西很陌生。除此之外,我确信这不是最完美的解决方案,我也很高兴对此提出建议!

标签: javascriptasynchronouspuppeteer

解决方案


推荐阅读