Puppteer: waitForResponse возвращает объект запроса при false в callback обработчике
Имеется авторизация на сайте, перед нажатием кнопки создаю promise с waitForResponse на ожидание запроса с ошибкой (если она будет) и ожидаю его решения или решения promise с waitFornavigation:
let waitPasswordError = page.waitForResponse(async (response) => {
console.log(response.request().url())
if(response.request().url().includes('login.do') && response.status() === 200) {
const {content: {data}} = await response.json();
if(data){
let result = data.titleMsg !== undefined;
console.log('Error:', result);
return result;
}
} else return false;
});
let waitLoginRedirect = page.waitForNavigation( {timeout: 0, 'waitUntil' : 'networkidle0' } );
await page.click('#signin');
await Promise.any([waitLoginRedirect, waitPasswordError])...
Promise waitPasswordError должен решится при условии что url содержит login.do, запрос получил статус 200, а объект ответа полученного с response.json(), в свойстве data содержит поле titleMsg. и не смотря на то, что console.log('Error:', result); пишет в консоль Error: false, Promise возвращает объект запроса на login.do,при этом если вывести его в консоль то видно что он естественно не содержит требуемого поля:
{
content: {
data: {
loginResult: 'success',
loginSucResultAction: 'loginResult',
loginType: 'pwd',
loginScene: 'normal',
resultCode: 100,
},
status: 0,
success: true
},
hasError: false
}
Ответы (1 шт):
Mожет быть так, что у вас устаревшая версия puppteer. Поддержка колбеков этого метода, возвращающих промисы, была добавлена недавно, до этого промисы воспринимались как truthy-значения.