Estoy usando puppeteer para navegar por mi sitio web. Quiero esperar por una API que a veces se llama y otras no. Estoy usando
await page.waitForResponse((response =>response.url().includes(myurl)), { timeout: 1000 });a esperar esa api. Esto funciona bien cuando se llama a la API, pero cada vez que no se llama a la API, se bloquea y la página ya no es la misma. Por lo tanto, quiero hacer una copia profunda de la página para poder verificar la API a través de su copia e incluso si esa página se daña. Tendré otro que pueda usar.
Creo que no necesitas copiar tu página. Probablemente no sea muy fácil de hacer y parezca un poco exagerado. En cambio, evitar que la página se bloquee sería un enfoque más simple.
Prueba algo como esto:
async function waitForApi(url, timeoutMs) { try { console.log('waiting ', timeoutMs+'ms for special API. url:', url); const opts = { timeout: timeoutMs || 1000 }; await page.waitForResponse(response => response.url().includes(url), opts); console.log('Special API was called!.'); return true; } catch(err) { console.log('Special Api was appearantly not called. (Or may be failed.. Error:', err); return false; } } // example call of waitForApi .. const myUrl = '...' const apiCalled = await waitForApi(myUrl, 1000) if(apiCalled) { // do stuff if you want to.. } else { // do stuff if you want to.. }Esto ahora debería registrar si se llamó o no a la API y, cuando sea necesario, puede manejar los casos de manera diferente.