У меня проблемы с очисткой списка URL-адресов и сохранением данных из них в массиве. Я думаю, что моя основная проблема - это контекст кукловода и браузера.
Я хочу проверить тексты привязок, но только в привязках со строкой c в атрибуте href.
Шаги:
- Инициализировать настройку хрома
- Использовать для l oop в массиве с URL-адресами
- В для l oop выберите все вхождения таких URL-адресов и удалить текст привязки
- И теперь у меня проблема с сохранением его в какой-то переменной с областью действия за пределами l oop и в контексте кукловода
Я использовал несколько методов page.evaluate()
, page.evaluateHandle()
, page.$$()
, page.$$eval()
, но мои проблемы следующие:
- Переход на новую страницу, похоже, перезаписывает предыдущее значение из-за перезагрузки Chromium
- У меня нет правильного представления, как использовать оператор распространения / pu sh для клонирования массива в марионетке. js context.
Я думаю, что идеальный способ - передавать данные каждый раз время от переменных контекста браузера до кукловода. js переменная контекста.
Был бы рад за y советы / решения :) Код ниже
Индекс. js файл:
const puppeteer = require("puppeteer");
const jsonFile = require("./example.json");
const numberOfUrls = jsonFile.urls.length;
const urlsArray = jsonFile.urls;
(async () => {
try {
// initial settings for Chromium
const browser = await puppeteer.launch({
defaultViewport: null,
headless: false,
devtools: true,
});
const page = await browser.newPage();
await page.setUserAgent(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"
);
await page.setViewport({ width: 0, height: 0, deviceScaleFactor: 1 });
// for loop on urls list
for (let i = 0; i < numberOfUrls; i++) {
await page.goto(urlsArray[i]);
await page.waitFor(1000);
const elements = await page.$$eval( `a[href*="https://mysuperdomain.com/"]`, elements => elements.map(el => el.innerText));
console.log(await {url: urlsArray[i],
urlsTexts: elements});
}
//end for loop
} catch (error) {
console.log(`Catched error: ${error}`);
}
})();
пример. json файл:
{
"urls": [
"https://exampledomain1.com/something/",
"https://exampledomain2.com/something/",
"https://exampledomain3.com/something/"
]
}
Предпочтительный вывод:
[{
url: 'https://exampledomain1.com/something/',
urlsTexts: [ 'learn more', 'go to our partner' ]
},
{
url: 'https://exampledomain2.com/something/',
urlsTexts: [ 'go to mysuperdomain', 'check on mysuperdomain.com' ]
}]