C# contrôle WebBrowser — Obtenir des Éléments d'un Document Après l'AJAX?
Je suis en train d'écrire une application qui utilise le contrôle WebBrowser pour afficher du contenu web qui peut changer avec l'AJAX qui ajoute un nouveau contenu/éléments.
Je n'arrive pas à obtenir de nouveaux éléments de toute façon j'ai essayé. BrowserCtl.DocumentText n'a pas la mise à jour de la page et bien sûr, il n'est pas dans "afficher la source", soit.
Est-il un moyen d'obtenir de nouvelles données à l'aide de cette commande? 🙁
S'il vous plaît aider. Merci!
IE:
Browser.Navigate("www.somewebpagewithAJAX.com");
//Code that waits for browser to finish...
...
//WebBrowser control has loaded content and AJAX has loaded new content
//(is visible at runtime on form) but can't see them in Browser.Document.All
//or Browser.DocumentText :(
Vous devez vous connecter pour publier un commentaire.
J'ai résolu le problème pour moi.
la clé est, en joignant un gestionnaire pour
onPropertyChanged
cas de l'élément div qui est remplie par appel ajax.et enfin,
Vous aurez besoin d'utiliser DOM pour elle. Cast WebBrowser.Document.DomDocument pour IHTMLDocument?. Vous aurez à l'importation de certaines interfaces COM ou Microsoft.mshtml assemblée.
Ont un look à http://msdn.microsoft.com/en-us/library/aa752641(SV.85).aspx pour plus de détails.
Je suppose que, puisque vous êtes en train de lire le contenu qui est généré à partir de requêtes Ajax que vous avez besoin de l'utilisateur pour les progrès de l'application à un point où les données sont chargées, à quel point l'exécution de code pour lire les données.
Si ce n'est pas le cas, vous aurez besoin d'automatiser ce processus, la génération de la sur les événements qui permettent de construire les nœuds DOM vous êtes intéressés par la lecture. Je le fais assez souvent avec le contrôle WebBrowser et ont tendance à écrire que la couche de fonctionnalités en Javascript et de l'appeler avec .InvokeScript(). Une autre voie serait de trouver les nœuds qui le feu de la fonctionnalité Ajax du C# et de déclencher manuellement leurs événements de clic:
Un aspect important de noter dans le script ci-dessus est le fait que vous pouvez interagir avec les nœuds DOM naïvement en C# si vous accepter et de contourner les limitations de la HtmlElement type d'objet.
Comment sur l'exécution de javascript à la légende de l'élément et de les afficher dans une nouvelle fenêtre?
Je ne l'ai pas testé, mais ça peut fonctionner.
Le véritable attribut pour ouvrir le retour dans un nouveau windows. (Ou d'un cadre ou peut-être vous pouvez trouver une meilleure façon d')
Pour capturer l'événement NewWindow, vous aurez besoin de faire référence à la SHDocVw.dll qui est dans votre dossier Windows/System32. Ensuite, vous pouvez lancer votre Contrôle WebBrowser comme ceci:
Vous pouvez le fermer tout de suite après le stockage de la réponse. Eh bien bonne chance et laissez-moi savoir comment ça se passe.
L'information est-elle pas dans le WebBrowser.DocumentText? http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documenttext.aspx
Contrôlez-vous la page web?
Si oui, voici un post de blog qui explique comment:
http://www.palladiumconsulting.com/blog/sebastian/2007/04/ultimate-intranet-toy.html
Sinon, il y a sans doute une solution, mais je ne peux pas vous aider, désolé.