Невозможно определить, существует ли элемент на странице или нет в Puppeteer - PullRequest
0 голосов
/ 02 октября 2019

Я пишу бота для MMORPG-игры про покемонов. Я написал скрипт для входа в свою учетную запись и перемещения, проблема в том, что когда я перемещаюсь, я иногда нахожу покемона, а затем создается новый div с данными покемона. Я также получаю кнопку (с идентификатором «#catch»), чтобы поймать покемона. Поэтому я написал скрипт так, чтобы он проверял наличие кнопки #catch. Вот мой код

while (true) {
    await page.waitFor(500);
    await page.keyboard.press("ArrowDown");
    if ((await page.$("input#catch")) != null) {
      console.log("Pokemon Found!");
    } else {
      console.log("No Pokemon Found");
    }

, однако, я получаю 'No Pokemon Found' каждый раз, даже если он есть.

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Я обнаружил, что размещение WaitFor в коде не очень надежно или эффективно. Если вы сделаете их слишком маленькими, если есть задержка из-за сетевых или других причин, у вас возникнут сбои. Если вы сделаете их огромными, то ваш код будет длиться вечно. В моем коде я был waitForSelector . Он имеет время ожидания / ожидания, которое может быть увеличено.

Пример:

async clickSomeButton(cssSelector) {
    if (await page.waitForSelector(cssSelector, 10000)) {
        await page.click(cssSelector);
        return;
    }
    return fail;
}
0 голосов
/ 02 октября 2019

Вы можете проверить, существует ли элемент, используя vanilla javascript

if(document.getElementById('catch').length > 0){
    console.log("Pokemon Found!");
}else{
    console.log("No Pokemon Found");
}
...