Я пытаюсь очистить сайт с Кукольником. Я хочу выбрать дату последнего поста, вставленного в мою базу данных, и сравнить его с датами, взятыми скребком, чтобы я мог видеть, есть ли пост в базе данных (используя дату в качестве ссылки, чтобы увидеть, была ли она изменена) ).
Вот мой код:
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'db_webcrawler_coches'
});
connection.connect((err) => {
if (err) throw err;
console.log('Connected!');
});
let lastpublishedDate;
let idCoches;
connection.query("SELECT id_coches, publish_date FROM coches ORDER BY publish_date DESC limit 1", function (err, row) {
if (err) throw err;
lastPublishedDate = row[0].publish_date;
idCoches = row[0].id_cochesNet;
console.log("Published in", lastPublishedDate);
console.log("Id Coches", idCoches);
});
const run = async () => {
try {
const options = {
headless: false,
};
...
const news = await page.evaluate(() => {
const idsList = [...document.querySelectorAll('div.mt-SerpList-item')].map(elem => elem.getAttribute("id")).filter(elem => elem.includes("#"))
const datePost = [...document.querySelectorAll('span.mt-CardAd-date')].map(elem => elem.innerText);
for(let i = 0; i < titlesCar.length; i++){
const finalDate = parsedDates[i];
if (finalDate > lastPublishedDate || idCoches !== idsList[i]){
console.log("Not repeated");
const carsList[i] = [
idsList[i],
parsedDates[i]
]
} else {
console.log("Repeated")
}
}
return carsList;
});
...
} catch (err) {
console.log(err);
await browser.close();
console.log("Browser Closed");
}
};
run();
Как вы можете видеть, я хочу видеть, совпадает ли дата с идентификатором, взятым из запроса. Тем не менее, появляется ошибка, которая говорит Оценка не удалась: ReferenceError: переменная "lastPublishedDate" не определена , и я думаю, что это будет то же самое с "idCoches". Я написал несколько console.logs, чтобы увидеть, когда он падает, и кажется, что это происходит, когда достигает функция "news" . Я не уверен, если это потому, что это объем или из-за функции. Как вы думаете, что я должен сделать, чтобы это работало?
Может ли это быть сферой? Спасибо!
РЕДАКТИРОВАТЬ: РЕШЕНО! Я публикую его на тот случай, если кто-нибудь столкнется с подобной проблемой. Действительно, это была сфера, это проблема, связанная с кукловодом. Кажется, что функция с page.evaluate () не может взять какую-либо переменную за ее пределами. Чтобы изменить его, нужно добавить page.evaluate следующим образом: await page.evaluate ((variable_1, variable_2) => {/ * ... * /}, variable_1, variable_2);