se connecter au site en utilisant HTMLAgilityPack

c# html-agility-pack login login-script

Question

Dans le code ci-dessous, je peux définir la valeur du nom d'utilisateur et du mot de passe à l'aide de HTMLAgilitypack, mais je ne peux pas appeler l'événement click du bouton de connexion (l'id dans le code source du bouton est "s1").

Y a-t-il un moyen de faire cela? La raison pour laquelle je n'utilise pas WebBrowser est parce que j'aurai besoin de HTMLAgilityPack pour récupérer des données de la page sans identifiants dans le code source.

var doc = new HtmlWeb().Load("http://MYURL.com");
doc.DocumentNode.SelectSingleNode("name").SetAttributeValue("value", "MyUsername");
doc.DocumentNode.SelectSingleNode("password").SetAttributeValue("value", "MyPassword");

Réponse acceptée

Y a-t-il un moyen de faire cela?

Pas avec ce que la bibliothèque HTML Agility Pack (HAP) fournit - pas directement.

HAP est idéal pour obtenir une seule page et l’analyser, mais il n’est pas conçu pour des interactions continues. Ce qui manque, c'est la gestion des cookies, l'interaction JavaScript et plus encore.

Pour vous connecter, vous devez probablement envoyer un HTTP POST au serveur, y compris les données que vous souhaitez. Le HAP ne peut rien y faire.

Vous devrez utiliser une classe telle que WebRequest pour créer le post. Je suggère de regarder fiddler et de l’utiliser pour voir à quoi la requête devrait ressembler et de la construire en conséquence, bien que cela puisse être la première étape.

Vous voudrez peut- être plutôt utiliser des outils d'automatisation Web tels que le sélénium ou WatiN .


Réponse populaire

Vous devez observer la requête POST via le violoniste et voir comment elle est structurée. par exemple :

    {"userName":"you","password":"pwd"}

Généralement, un site reconnaît que vous êtes connecté en recevant son cookie dans vos demandes.

HttpClient envoie par défaut les cookies reçus d'un domaine spécifique avec chaque demande séquentielle à ce domaine (jusqu'à ce que vous disposiez de cette instance HttpClient)

1) Créez un conteneur de cookies et affectez-le à votre instance HttpClient.

2) Utilisez HttpClient pour effectuer la demande de connexion POST.

3) Utilisez HttpClient pour effectuer la demande de données GET.

4) Lire la chaîne HTML à partir de la réponse.

5) Utilisez HtmlAgilityPack HtmlDocument pour charger le document à partir de la chaîne HTML et non du Web (comme le montrent la plupart des exemples).

    {"userName":"you","password":"pwd"}



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi