Кукловод: открытие страницы, извлечение данных, закрытие и продолжение

Я очищаю сайт .NET, и мне нужно выполнить одну общую операцию:

  1. установить форму, отправить
  2. открыть страницу с данными результатов
  3. извлечь значения из таблицы
  4. вернуться к форме, повторить с другими параметрами формы

Я вижу, как открыть страницу, дождаться ее через browser.on('targetcreated'), затем извлечь данные, однако как заставить предыдущий код ждать закрытия вкладки перед отправкой формы со следующим набором параметров? Страница результатов должна быть проанализирована перед отправкой следующей операции, поскольку она использует тот же URL-адрес.

Возможно, это более общий вопрос JS.

Это мой текущий код, который проверяет, нужно ли открывать страницу, а затем щелкает ссылку.

 async function fetchAnalysis(page, eventBandId, x, y) {
     const ANALYSIS_TIMEOUT = 90000; // 90 seconds
     const xElem = await page.$(SELECTORS.event_band_analysis_x_axis);
     await xElem.type(x[1])
     const yElem = await page.$(SELECTORS.event_band_analysis_y_axis);
     await yElem.type(y[1])
     await page.click(SELECTORS.event_band_analysis_calculate);
     await page.waitForSelector(SELECTORS.spinner, { timeout:ANALYSIS_TIMEOUT, hidden: true });

     // check if grid is presented straightaway
     var dataTableSelector = null;

     if (await page.$(SELECTORS.event_band_immediate_grid) !== null) {
         console.log("Got data immediatly");
         await page.screenshot({ path: './screenshots/Analysis: '+x[1]+' VS '+y[1]+'.png' });
         var dataTableSelector = SELECTORS.event_band_immediate_grid;
     } else {
         console.log("Need to open page for data");
         // await page.waitForSelector(SELECTORS.event_band_open_data_page);
         await page.click(SELECTORS.event_band_open_data_page);
         console.log("Clicked");
         return;
     }

     const tableData = await utils.getTableDataAsJson(page, dataTableSelector);
     await db.query('INSERT INTO vs_coding.event_band_result ( event_band_id, x_axis, y_axis, json_data ) VALUES (?,?,?,?)', [ eventBandId, x[1], y[1], JSON.stringify    (tableData) ], function (error, results, fields) {
         if (error) throw error;
     });
     console.log("Saved");
 }

person Alasdair    schedule 21.01.2018    source источник


Ответы (1)


Это мое решение для открытия страницы, захвата данных и продолжения: не используйте событие on.('targetcreated'), вместо этого просто работайте со страницей перед вами.

[..snip..]
            await fetchAnalysis(page, eventBandId, mode.name, x, y);
            resultPage = await browser.newPage();
            await utils.navigate(resultPage, 'analysisViewData.aspx');
            await captureTableData(eventBandId, mode, x, y, resultPage, SELECTORS.event_band_analysis_results_grid);
            await resultPage.close();
person Alasdair    schedule 22.01.2018