Défis de PhantomJS avec la détection de chargement de page complète
Lorsque vous utilisez PhantomJS pour charger des pages Web, vous pouvez être confronté au problème du déclenchement anticipé de onLoadFinished rappel en raison du chargement asynchrone du contenu. Pour résoudre ce problème et garantir que tous les éléments dynamiques, tels que les publicités, sont correctement capturés dans les captures d'écran, une approche consiste à introduire un délai avant d'effectuer l'opération de rendu.
Comme le démontre l'exemple rasterize.js standard, PhantomJS fournit la possibilité de retarder le processus de rendu à l'aide de window.setTimeout(). Cela permet à JavaScript de terminer le chargement des ressources supplémentaires avant de déclencher l'action de capture d'écran.
Le code modifié ci-dessous intègre un délai de 1 000 millisecondes, ce qui devrait laisser suffisamment de temps pour que la plupart des pages Web se chargent complètement :
page.open(address, function (status) { if (status !== 'success') { console.log('Unable to load the address!'); phantom.exit(); } else { window.setTimeout(function () { page.render(output); phantom.exit(); }, 1000); // Change timeout as required to allow sufficient time } });
En ajustant la valeur du délai d'attente si nécessaire, vous pouvez vous assurer que PhantomJS capture l'état complet de la page Web, y compris tout contenu asynchrone.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!