Так что я довольно новичок в изучении веб-страниц и использую для этого библиотеку кукловодов. Мне удается заставить большинство вещей работать, но когда я пытаюсь обещать обещание .all и запускать вторую функцию на расстоянии go на двух отдельных страницах, это всегда последняя страница на карте promise.all, которая идет двумя, хотя в Отладчик должен был перейти на страницу, о которой идет речь.
Функция, которая запускает выборку данных, выглядит как пример кода ниже
const fetchSeasonUrls = async () => {
const driver = await configuration.getDriver(baseUrl);
const watchList = await fetchWatchList(driver);
// When the function below is hit the end result looks like example result one below
const watchListSeasons = await Promise.all(
watchList.map(async show => {
await tvSplurgeio.getSeasonData(driver, show);
})
);
// When the function below is hit the end result looks like example result two below
const showOne = await tvSplurgeio.getSeasonData(driver, watchList[0]);
const showTwo = await tvSplurgeio.getSeasonData(driver, watchList[1]);
}
Example-Result-One
[
[S01, S02, ..., S31],
[S01, S02, ..., S31]
]
Example-Result-Two
const showOne = [S01, S02, ..., S10];
const showTwo = [S01, S02, ..., S31];
Второй результат верен, поскольку он перемещается на правильную страницу показа и тянет с собой данные сезона, но когда он в обещании, кажется, вернуть последнюю вещь в массиве x количество раз.
Код кукловода, который возвращает эти данные, выглядит следующим образом.
const tvSplurgeio = {
getSeasonData: async (driver, show) => {
let navigationPromise = driver.page.waitForNavigation();
await driver.page.goto(show.url);
await navigationPromise;
await driver.page.waitForSelector(".sidebar-seasons");
const seasonData = await driver.page.evaluate(() => {
const allSeasons = document.querySelectorAll(
'li[class*="sidebar-season"]'
);
let data = [];
Array.prototype.forEach.call(allSeasons, season => {
Array.prototype.forEach.call(season.children, child => {
const seasonNumber = parseInt(child.innerText.split(" ")[1], 10);
data.push(
seasonNumber < 10 ? `S0${seasonNumber}` : `S${seasonNumber}`
);
});
});
return data;
});
await navigationPromise;
return seasonData;
},
}
Я пробовал целую кучу вещей со страницы .waitFor () в ожидании навигационных обещаний, и я не совсем уверен, что это просто неправильное понимание того, что можно сделать с этой библиотекой в promise.alls.
Любая помощь будет признателен, Крис.