Maison  >  Article  >  interface Web  >  Comment récupérer du code HTML généré dynamiquement à partir des contrôles du navigateur Web ?

Comment récupérer du code HTML généré dynamiquement à partir des contrôles du navigateur Web ?

DDD
DDDoriginal
2024-10-18 08:35:03354parcourir

How to Retrieve Dynamically Generated HTML Code from Web Browser Controls?

Comment générer dynamiquement du code HTML à l'aide du navigateur Web .NET ou de mshtml.HTMLDocument ?

Problème :

Récupérer du code HTML généré dynamiquement à partir d'une page Web à l'aide de la classe WebBrowser ou de l'interface mshtml.HTMLDocument peut être un défi. La classe WebBrowser ne parvient pas à capturer le HTML rendu et mshtml.HTMLDocument renvoie du HTML brut qui diffère du contenu réel de la page.

Solution :

Utilisation de WebBrowser Classe :

Bien que la classe WebBrowser ne fournisse pas de méthode directe pour obtenir le HTML rendu, il est possible d'implémenter une solution de contournement. Ajoutez un contrôle WebBrowser à un formulaire, faites-le accéder à l'URL souhaitée, puis suivez les étapes suivantes pour récupérer le code HTML :

  1. Envoyez les touches "CTRL A" pour sélectionner tout le contenu.
  2. Utilisez la méthode Copy pour copier la sélection dans le presse-papiers.
  3. Collez le code HTML du presse-papiers et analysez-le si nécessaire.

Utilisation de l'interface mshtml.HTMLDocument :

  1. Créez une instance de mshtml.HTMLDocument et transmettez-lui le HTML téléchargé en utilisant write.
  2. Vérifiez les modifications dans l'instantané HTML en interrogeant la propriété all et IsBusy propriété du contrôle WebBrowser.
  3. Une fois que la propriété IsBusy devient fausse et qu'il n'y a aucun changement dans l'instantané HTML, considérez que la page est entièrement rendue et récupérez le HTML.

Considérations supplémentaires :

  • Assurez-vous que le rendu HTML5 est activé à l'aide du contrôle des fonctionnalités du navigateur.
  • Utilisez un délai d'attente pour empêcher le rendu infini.
  • Async/await peut simplifier la mise en œuvre de la logique d'interrogation.

Exemple de code :

<code class="C#">using Microsoft.Win32;
using System;
using System.Threading;
using System.Threading.Tasks;
using mshtml;

public async Task<string> LoadDynamicPage(string url, CancellationToken token)
{
    var doc = new HTMLDocument();
    doc.write(new System.Net.WebClient().DownloadString(url));

    // Poll for changes in HTML snapshot
    var html = doc.documentElement.outerHTML;
    while (true)
    {
        await Task.Delay(500, token);
        var htmlNow = doc.documentElement.outerHTML;
        if (html == htmlNow)
            break;

        html = htmlNow;
    }

    return html;
}</code>

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn