Как обновить базу данных до пустой? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь очистить веб-сайт, и мне нужно очистить количество комментариев и самую раннюю дату комментария. Тем не менее, когда нет комментариев, он вернется в качестве даты и времени, которые я удалил, которые также появляются в базе данных. Но я хотел, чтобы, поскольку комментариев нет, самое раннее поле даты должно быть пустым. Что-то не так с моими кодами? Очень признателен за помощь, пытался в течение недели. Спасибо!

// go to comment area
await page.waitForSelector("div.ivu-table-wrapper");
await page.waitFor(3000);

// get number of comments
const noOfComments = await page.$eval("#app-comment > div.comment-details > div:nth-child(4) > p", p => p.innerText.slice(16,-3));

// get the number of li 
let len = await page.$$eval(".comment-details .ivu-page-item", e => {
    return e.length;
});

// if there is only 2 pages 
if (len == 2) {
    len -= 1;
}
else if (len == 1) {
    len -= 1;
}

// click on the last page (eg: len = 4, 4+2)
await page.click(".comment-details .ivu-page-item:nth-child(" + (len + 2) + ") > a").catch(async (err) => {
    await page.click(".comment-details .ivu-page-item:nth-child(" + (len + 1) + ") > a");
});

await page.waitFor(7000);

// get the earliest comment date
const dates = await page.$eval("div.ivu-table-body > table > tbody > tr:last-child > td:nth-child(3)", td => td.innerText.trim()).catch(async (err) => {
    console.log("");
});                 
const eDate = moment(dates).format('YYYY-MM-DD HH:mm:ss');

console.log("Rank: ", count); //int
console.log("Name: ", name); //string
console.log("Release Date: ", relDate); //date
console.log("Developer: ", developer); //string
console.log("Rating: ", rating); //float
console.log("Size: ", storage); //float
console.log("No. of Comments: ", noOfComments); //int
console.log("Earliest date: ", eDate); //datetime
console.log("Scrape date: ", today); //date
console.log("\n");

const data_values = [count, name, relDate, developer, rating, storage, noOfComments, eDate, today];
console.log(data_values);

connection.connect(function(err) {
   var sql = "INSERT INTO Qimai_BS (ranking, name, release_date, developer, rating, storage_size, no_of_comments, earliest_date, scrape_date) VALUES ?";
   var values = [data_values];
   connection.query(sql, [values], function (err, result) {
      if (err) throw err;
      console.log("Rows Inserted: " + result.affectedRows);
   });
});

1 Ответ

0 голосов
/ 10 апреля 2019

dates будет неопределенным, если ваш скрипт не может найти дату.Следовательно, проблема заключается в следующей строке:

const eDate = moment(dates).format('YYYY-MM-DD HH:mm:ss'); 

Когда вы вызываете moment() без аргументов (или undefined в качестве аргумента), вместо этого будет принята текущая дата.Так что вам нужно сначала проверить, установлен ли dates, например:

const eDate = (!dates) ? null : moment(dates).format('YYYY-MM-DD HH:mm:ss'); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...