Кукольник / Nodejs, как ждать выполнения условий события - PullRequest
0 голосов
/ 10 октября 2018

Я довольно новичок в nodejs и использую puppeteer для автоматизации просмотра, но я немного теряюсь из-за сложности определенного сценария.

Я нажимаю кнопку, и она будетискать некоторые записи (используя ajax) и поместить результат на страницу.

Ожидание ответа / запроса на самом деле не подходит, потому что я жду 2-3 запроса в зависимости от типа поиска - и URL-адреса ответов одинаковы для каждого.Итак, я думаю, я хочу дождаться 3-х URL-ответов по этому конкретному URL, чтобы завершить.

Может быть, мне нужно переосмыслить это, или, может быть, я близок?Обещание всегда истекает, хотя кажется, что оно увеличивает откликCount

async function intercepted(resp) {
  if (resp.url().includes('/ajaxpro/')) {
    return 1
  }
  return 0
}

let responseCount = 0
page.on('response', async resp => {
  responseCount += await intercepted(resp)
})
const getResponse = await new Promise((resolve, reject) => {
  setTimeout(() => resolve(responseCount > 3), 60000)
})

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Может быть, вам не нужно ждать, пока определенное количество ответов будет перехвачено, но подождите, пока результаты этих вызовов AJAX отобразят что-то на странице (дождитесь визуального Результаты).В этом случае вы выполняете page.waitForSelector(selector), где селектор - это информация, которую результат вызова отображает на экране.

При работе с Puppeteer я обычно нахожу ожидание улучшения видимых результатов...

0 голосов
/ 10 октября 2018

Попробуйте проверить условие после получения каждого ответа.

async function intercepted(resp) {
  if (resp.url().includes('/ajaxpro/')) {
    return 1
  }
  return 0
}

let responseCount = 0
page.on('response', async resp => {
  let isTargetSearch = await intercepted(resp);
  responseCount += isTargetSearch;

  // - The current response is what we are looking for
  // - and reached 3 times.
  if(isTargetSearch && responseCount == 3) {
    // Do what you need to do here
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...