Я очищаю сайт .NET, и мне нужно выполнить одну общую операцию:
- установить форму, отправить
- открыть страницу с данными результатов
- извлечь значения из таблицы
- вернуться к форме, повторить с другими параметрами формы
Я вижу, как открыть страницу, дождаться ее через 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");
}