Upload vos images Canard du PC utiliser le WebBrowser & HttpWebRequest

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Ben

Master Chief
V
Ancien staff
Mar 3, 2011
4,069
3
944
Un peut partout.
Salut, j'ai codé pour m’amuser si ont peut dire ça même si c'est plus pour apprendre et m'entrainer que je le fait ^^'
Et bon comme cette section est littéralement VIDE je l'encombre d'un petit sujets...

Pour cette exemple je vais utiliser WebBrowser & HttpWebRequest.

Je vais commencer donc pour l’exemple j'ai utilisé Canard du PC ici : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!

Alors ont doit se reporter sur la source de la page et voir quel élément est utiliser pour choisir sur le PC l'image à uploader.



Dans la source je récupère l’élément qui sert à chercher l'image sur le PC :
Code:
<input type="file" name="[COLOR=Red]fichier[/COLOR]" tabindex="1" size="60" />
Voila en occurrence l'élément clé que je cherche est "fichier".


Dans la source je récupère l’élément qui sert à uploader l'image :
Code:
<input type="submit" id="bouton" accesskey="e" tabindex="2" name="[COLOR=Red]envoyer[/COLOR]" value="" />
Voila en occurrence l'élément clé que je cherche est "envoyer".


Pour pouvoir m'en servir en VB.Net il me faut :
Créer une nouvelle application Windows forms et Ajoutez :

\\- Un WebBrowser.
\\- Deux boutton (Button1 ,Button2)
\\- Une TexBox.
\\- Une RichTexBox.
\\- Une PictureBox.

Bon alors c'est partie.

Lancement de la form :
Code:
       Button1.Enabled = False
       Button2.Enabled = False
       [COLOR=SeaGreen]'Fait naviguer le WebBrowser à l'URL indiqué[/COLOR]
        WebBrowser1.Navigate("http://tof.canardpc.com/")
       [COLOR=SeaGreen] 'Désactive les érreurs de script[/COLOR]
        WebBrowser1.ScriptErrorsSuppressed = True
Bouton 1 :
Code:
[COLOR=SeaGreen]'Cherche l'élément par nom (en l’occurrence[/COLOR] "[COLOR=Red]fichier[/COLOR]"[COLOR=SeaGreen])[/COLOR] [COLOR=SeaGreen]dans la page qu'est en train de naviguer le WebBrowser et je simule un click sur l'élément avec ([B]InvokeMember("Click")[/B]).[/COLOR]
 WebBrowser1.Document.GetElementById("[COLOR=Red]fichier[/COLOR]").InvokeMember("Click")
Après ça la fenêtre pour sélectionner l'image à uploader devrais apparaitre en cliquant sur le boutton ;)

Boutton 2 :
Code:
[COLOR=SeaGreen][COLOR=black]Button1.Enabled = False
Button2.Enabled = False[/COLOR]
'Cherche l'élément par nom (en l’occurrence[/COLOR] "[COLOR=Red]envoyer[/COLOR]"[COLOR=SeaGreen])[/COLOR] [COLOR=SeaGreen]dans la page qu'est en train de naviguer le WebBrowser et je simule un click sur l'élément avec ([B]InvokeMember("Click")[/B]).[/COLOR]
 WebBrowser1.Document.GetElementById("[COLOR=Red]envoyer[/COLOR]").InvokeMember("Click")
Voila après ça l'image devrais être uploadé aux bout de quelque seconde

Vous allez me dire ouai et ??
comment ont est censé récupérer le lien de l'image ??

Je vous répond, en utilisant les HttpWebRequest et un peux de Regex ^^


Déjà il faut créer la fonction pour le Regex :
Et ne pas oublier d'importer :
"Imports System.Text.RegularExpressions"
Code:
 Private Function entre(ByVal input As String, ByVal S1 As String, ByVal S2 As String, ByVal index As Integer) As String
       [COLOR=SeaGreen] 'Déclare que projet est du texte et qu'il est égale aux fractionnement de la chaine d'entrée aux position définies par une éxpression imuable fractionné entre deux valeurs String (texte)[/COLOR]
        Dim projet As String = Regex.Split(input, S1)(index + 1)
        [COLOR=SeaGreen]'Fractionne la chaine d'entrée aux position définies par une éxpression imuable fractionné entre deux valeurs String (texte)[/COLOR]
        Return Regex.Split(projet, S2)(0)
    End Function
Après cela il faut implémenter une requête Http avec HttpWebRequest en utilisant la fonction Regex :


Alors la, pareils il me faut chercher dans la source de la page pour trouver ou et comment récupérer le lien de l'image un fois uploadé.
Pour ça je vais sur le site :Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris! j'upload une image et je regarde le code source de la page une fois l'image uploadé affiché.
Ensuite je récupère une ligne à peut près propre, mais exploitable avec la fonction Regex créé :
Code:
<p><b>Lien direct de l'image</b><br><input value="[COLOR=Red]http://tof.canardpc.com/view/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.jpg[/COLOR]" size=
Voila, avec ça ont est capable de récupérer le lien ;)


(Si je le mets dans "WebBrowser1_DocumentCompleted" c'est pour pouvoir ré-uploader plusieurs images)

Code:
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Try
            Button1.Enabled = True
            Button2.Enabled = True
           [COLOR=SeaGreen] 'Déclare que "requ" est une requète Http.[/COLOR]
            Dim requ As System.Net.HttpWebRequest
           [COLOR=SeaGreen] 'Création de la requête avec l'url (absolue) du WebBrowser.[/COLOR]
            requ = System.Net.HttpWebRequest.Create(WebBrowser1.Url.AbsoluteUri)
           [COLOR=SeaGreen] 'Déclare que "resp" est la réponse de la requète.[/COLOR]
            Dim resp As System.Net.HttpWebResponse
            [COLOR=SeaGreen]'Retourne la réponse de la requète.[/COLOR]
            resp = requ.GetResponse
            [COLOR=SeaGreen]'Déclare que "sr" va obtenir tout les caractères d'une source ou flux.[/COLOR]
            Dim sr As System.IO.StreamReader
            [COLOR=SeaGreen]'Lit tous les caractères de la réponse ("resp")[/COLOR]
            sr = New System.IO.StreamReader(resp.GetResponseStream())
            [COLOR=SeaGreen]'Déclare que "page" est du texte et est égale à tout les caractères (unicode, texte) de "sr"[/COLOR]
            Dim page As String = sr.ReadToEnd
            [COLOR=SeaGreen]'Récupère tout le texte de la page et l'affiche dans la RichTexBox1[/COLOR]
            RichTextBox1.Text = page
           [COLOR=SeaGreen] 'Utilisation de la fonction Regex pour récupérer ce qu'il y a entre deux portion de texte dans la RichTextBox1 et l'afficher dans la TextBox1[/COLOR]
            TextBox1.Text = entre(RichTextBox1.Text, "<p><b>Lien direct de l'image</b><br><input value=""", """ size=", 0).Trim
           [COLOR=SeaGreen] 'Affiche l'image dans la PictureBox.[/COLOR]
            PictureBox1.ImageLocation = TextBox1.Text
            [COLOR=SeaGreen]'Fait naviguer le WebBrowser1 vers ..[/COLOR]
            WebBrowser1.Navigate("http://tof.canardpc.com/")
        Catch ex As Exception
        End Try
    End Sub
Après petite astuce une fois l'image afficher dans la PictureBox pour pouvoir avoir l'Url juste en cliquant dessus
Code:
 Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
[COLOR=SeaGreen]'Lance dans le navigateur par défaut le lien de l'image 
 [/COLOR]System.Diagnostics.Process.Start(PictureBox1.ImageLocation)
    End Sub
[CENTER]
[/CENTER]
Tuto & codé entièrement par moi.

Si vous avez des remarques ou autre, je suis là ;)