Playwright 在循环期间转到另一个页面时会导致空数组

问题描述 投票:0回答:1

我正在尝试使用 Playwright 解析页面。

该页面有一个表,每行都包含数据,其中包括我想让剧作家转到的 URL,获取额外信息,然后将其添加到我要保存的行对象中。

它工作正常,直到我添加代码来访问 newPage,在这种情况下我得到一个空数组。

我有一种感觉,这与在地图函数中使用

await
有关?有人可以提供一些指导吗?

const browserType = "chromium";
const url = "https://page-with-table.html";
const browser = await playwright[browserType].launch();
const context = await browser.newContext();
const page = await context.newPage();

await page.goto(url);

const tableRowsLocator = page.locator("table tr");

const tableData = await tableRowsLocator.evaluateAll(async (tableRows) => {
  const data = [];

  tableRows.map(async (tableRow) => {
    const rowObject = {};

    const rowData = tableRow.querySelector('td[data="rowData"]');

    const url = tableRow.querySelector('td[data="url"] a');

    // --- Problem code begins

    const newPage = await context.newPage();

    await newPage.goto(url);

    const contentLocator = newPage.locator("#content");

    const contentData = await contentLocator.evaluate(async (content) => {
      return content.textContent;
    });

    rowObject.content = newPageData;

    await newPageData.waitForTimeout(1000);
    await newPageData.close();

    // --- Problem code ends

    rowObject.rowData = rowData.textContent;
    rowObject.url = url.getAttribute("href");

    data.push(rowObject);
  });

  return data;
});

await page.waitForTimeout(1000);
await browser.close();

console.log(gamesData);
typescript playwright
1个回答
0
投票

不要在 Playwright 中将 mapforEach 等与 async 一起使用。

  const tableRowsLocator = page.locator("table tr");
  const tableData = await tableRowsLocator.all();
  for (const tableRow of tableData) {
    const rowData = tableRow.locator('td[data="rowData"]');
    const url = tableRow.locator('td[data="url"] a');
    // your code
  }
© www.soinside.com 2019 - 2024. All rights reserved.