Несколько для циклов в кукловоде JS для динамического выпадающего скребка - PullRequest
0 голосов
/ 25 сентября 2018

В настоящее время я очищаю веб-страницу с несколькими раскрывающимися списками, и каждый раскрывающийся список зависит от раскрывающегося родительского элемента.

У меня есть три переменные, которые дают мне длину каждого раскрывающегося списка.

sizeLength, turnaroundLength, quantityLength

sizeLength = 32, turanroundlength = 2, amountLength = 30

Сначала мне нужно установить sizeLength на 1, а затем после этой длины оборота на 1, а затем мне нужно перебрать каждую величину Lengthвсего 30.

Для этого я сделал несколько вложенных циклов:

for (let i = 1; i <= sizeLength; i++) {

  await page.evaluate( () => {
    document.querySelector( '#size > option:nth-child('+i+')' ).selected = true} );

  for (let x = 1; x <= turnaroundLength; x++) {

    await page.evaluate( () => {
      document.querySelector( '#turnaround > option:nth-child('+x+')' ).selected = true} );
  }

    for (let y = 1; y <= quantityLength; y++) {

      await page.evaluate( () => {
        document.querySelector( '#quantity > option:nth-child('+y+')' ).selected = true} );
    }
    console.log('this is in quantity');
    }

}

Используя этот метод, я получаю сообщение об ошибке: ожидание допустимо только в асинхронной функции.Я не уверен, как обойти это, так как я новичок в кукловоде.Любой совет будет оценен, спасибо!

1 Ответ

0 голосов
/ 26 сентября 2018

Оператор await используется для ожидания Promise, а может использоваться только внутри async function.

Функция Puppeteer page.evaluate() возвращает обещание, поэтому вы должны дождаться обещания до resolve или reject перед продолжением следующей итерации вашего цикла.

В результате вы должны обернуть свой код в асинхронную функцию для правильной работы кода.

Кроме того, поскольку ваши циклытеперь написано, что вы не добьетесь ожидаемого поведения, поскольку счетчики не передаются в page.evaluate().

Вместо этого ваш код должен выглядеть примерно так:

( async () =>
{
    const sizeLength       = 32;
    const turanroundlength = 2;
    const quantityLength   = 30;

    for ( let i = 1; i <= sizeLength; i++ )
    {
        await page.evaluate( i =>
        {
            document.querySelector( '#size > option:nth-child(' + i + ')' ).selected = true;

        }, i );

        for ( let x = 1; x <= turnaroundLength; x++ )
        {
            await page.evaluate( x =>
            {
                document.querySelector( '#turnaround > option:nth-child(' + x + ')' ).selected = true;

            }, x );
        }

        for ( let y = 1; y <= quantityLength; y++ )
        {
            await page.evaluate( y =>
            {
                document.querySelector( '#quantity > option:nth-child(' + y + ')' ).selected = true;

            }, y );
        }

        console.log( 'this is in quantity' );
    }
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...