Récupérer une page web
#1
Débutant XLPages

Inscription: 20/09/2009

Messages: 11

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 22-09-2009 01h29

Re tout le monde,

Voila un bout de code pour récupérer une page web. Maintenant ce j'aurais voulu faire, c'est remplir le champ adresse, et simuler un clic sur "Aller, hop c'est parti", voir même si c'est aussi possible de récupérer l'URL de la nouvelle page chargée, j'ai essayé de tremper ma machine dans l'eau bénite, mais elle n'a pas aimé.
Si quelqu'un connait les formules magiques...Reconnaissance éternelle...

Option Explicit
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal lpszAgent As String, ByVal dwAccessType As Long, ByVal lpszProxyName As String, _
ByVal lpszProxyBypass As String, ByVal dwFlags As Long) As Long

   Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
   Public Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" _
(ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, _
ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long

   Public Declare Function InternetReadFile Lib "wininet.dll" _
(ByVal hFile As Long, ByVal lpBuffer As String, ByVal dwNumberOfBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer

   Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0 ' utiliser info de config de la base de registre
   Public Const INTERNET_FLAG_EXISITING_CONNECT = &H20000000
   Public Const INTERNET_FLAG_RELOAD = &H80000000 'Lire �artir de fil, m� si mis en cache localement
   Public MonDocument
   Public pointeur


Function GetHTTPFile(ByVal URL As String, ByVal StrUserAgent As String) As String


' URL correspond au chemin complet du document exemple: http://www.domaine.ext/r�rtoire/ document.pl?Param=Exemple&Param2=test
' StrUserAgent correspond �a d�nition du navigateur exemple: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Dim hSession As Long
Dim hUrlFile As Long
Dim bBoucle As Boolean
Dim sReadBuf As String * 4096
Dim Buffer As String
Dim OctetsLus As Long


pointeur = Application.Cursor
Application.Cursor = xlWait

' Ouverture de la session
hSession = InternetOpen(StrUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
' Envoi de la demande
hUrlFile = InternetOpenUrl(hSession, URL, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)

' La r�nse arrive par paquet, empilage

Buffer = ""
bBoucle = True
While bBoucle And hUrlFile > 0


DoEvents
sReadBuf = ""
bBoucle = InternetReadFile(hUrlFile, sReadBuf, 4096&, OctetsLus)
Buffer = Buffer + Left$(sReadBuf, OctetsLus)
If OctetsLus = 0 Then bBoucle = False

Wend

InternetCloseHandle (hUrlFile)
InternetCloseHandle (hSession)

Application.Cursor = pointeur  ' Recup pointeur.


GetHTTPFile = Buffer


End Function
Sub demar()


MonDocument = GetHTTPFile("http://fr.mappy.com/", _
"Internet Explorer 8.0.6001.18702")

Cells(1, 1) = MonDocument
   Columns("A").Select
    Selection.ColumnWidth = 200
 'Selection.Columns.AutoFit
End Sub
 



PADEMOI


♫ Merci



Edité par S☼leil le 22/09/2009 17:00:50
Hors Ligne
Rapport   Haut 

Re: Récupérer une page web
#2
Débutant XLPages

Inscription: 20/09/2009

Messages: 11

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 22-09-2009 16h55

 


Merci pour votre aide précieuse (Ouarf! c'est un clin d')

Voila une chose qui fonctionne pour ceux que ça peut intérresser, basée sur une page pour les turfistes

Option Explicit
Dim x, y
    Dim IE As Object
    Dim dct
    Dim Num
    Dim k

    Declare Function GetSystemMetrics32 Lib "user32" _
     Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long


Sub azer()


    Set IE = CreateObject("internetexplorer.application")
            'Pour le jour
            IE.Navigate ("http://www.zeturf.com/fr/resultats")
            IE.Visible = True
            IE.Top = 0
            IE.Left = 0
            'Obtention en nombre de points de la largeur d'�an
            IE.Width = GetSystemMetrics32(0)
            IE.Height = GetSystemMetrics32(1)
           
 ' chargement
Do While IE.ReadyState <> 4
Application.Wait (Now + 0.1 / 3600 / 24)
Loop

            Set dct = IE.Document
            For Num = 0 To IE.Document.getElementsByTagName("select").Length - 1
            If dct.getElementsByTagName("select").Item(Num).Name = "recherche_jour" Then
                For k = 0 To dct.getElementsByTagName("select").Item(Num).Options.Length Step 1
                If dct.getElementsByTagName("select").Item(Num).Options(k).Text = Trim(Day(Now())) Then
                dct.getElementsByTagName("select").Item(Num).Options(k).Selected = dct.getElementsByTagName("select").Item(Num).Options(k).Value
                GoTo mois
                End If
                Next
            End If
            Next
            'Pour le mois
mois:     For Num = 0 To IE.Document.getElementsByTagName("select").Length - 1
          If dct.getElementsByTagName("select").Item(Num).Name = "recherche_mois" Then
               For k = 0 To dct.getElementsByTagName("select").Item(Num).Options.Length Step 1
               If dct.getElementsByTagName("select").Item(Num).Options(k).Text = Trim(Month(Now())) Then
               dct.getElementsByTagName("select").Item(Num).Options(k).Selected = dct.getElementsByTagName("select").Item(Num).Options(k).Value
               GoTo annee
               End If
               Next
          End If
          Next
            'Pour l'ann�/span>
annee:     For Num = 0 To IE.Document.getElementsByTagName("select").Length - 1
           If dct.getElementsByTagName("select").Item(Num).Name = "recherche_annee" Then
               For k = 0 To dct.getElementsByTagName("select").Item(Num).Options.Length Step 1
               If dct.getElementsByTagName("select").Item(Num).Options(k).Text = Trim(Year(Now())) Then
               dct.getElementsByTagName("select").Item(Num).Options(k).Selected = dct.getElementsByTagName("select").Item(Num).Options(k).Value
               GoTo valide
               End If
               Next
                End If
            Next
valide:     For Num = 0 To IE.Document.getElementsByTagName("input").Length - 1
                Debug.Print dct.getElementsByTagName("input").Item(Num).Name
                If dct.getElementsByTagName("input").Item(Num).Name = "tpl.credit.confirm" Then
                dct.getElementsByTagName("input").Item(Num).Click
                End If
            Next

End Sub
 

patoudemoi

♫Bonne fin de journée☼


Hors Ligne
Rapport   Haut 

Re: Récupérer une page web
#3
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 22-09-2009 22h08
Bonsoir S☼leil,

Je ne sais pas si l'aide qu'on peut apporter ici est précieuse, mais en tout cas, elle est généralement à la hauteur des questions posées. J'ajoute que l'aide fournie est aussi fonction de la disponibilité de chacun.

Pour ma part, je n'ai pas compris ta question et je ne comprends pas franchement le rapport entre le premier et le deuxième morceau de code postés par tes soins. (Au premier abord, je dirais que le premier extrait relève de l'usine à API Windows pour... pas grand chose au final).

Par ailleurs, lorsqu'on expose un code récupéré ailleurs, la bonne attitude a adopter par respect pour l'auteur (à qui tu accordes tout de même une "reconnaissance éternelle" ), c'est de mettre un lien sur l'original ou, à défaut, d'en citer la source...

Si tu souhaites donc une réponse claire à ton problème, alors précise exactement ce que tu veux faire : URL de la page web à traiter, liens ou zone précise à activer, etc...

Cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Récupérer une page web
#4
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 23-09-2009 01h34
 Au http://www.devparadise.com/download/code/vb/f81.php

«Cette article est consacré à la récupération de documents via internet.

   Je ne parle pas de téléchargement, mais d'un script PERL et d'un Source Visual Basic qui permetent de mettre le contenu d'un document dont vous connaissez l'URL dans une variable, à vous d'en faire ce que vous voulez.

   Vous souhaitez récupérer sur internet un document pour pouvoir le traité de façon automatique.
   Rien de plus simple, les codes suivants interrogent le serveur, sur lequel se trouve le document, en se faisant passer pour Microsoft Internet Explorer sous Windows 98 ou autres.
   Le serveur renvoi donc une page comme si vous naviguiez sur le net, et pas une page spécifique pour les robots.
   Le résultat est stocké dans une variable, après c'est à vous de jouer.

   Vous pouvez récupérer n'importe quel document, HTML, Image, Une feuille de calcul Excel... (du moment qu'il est accessible pour un navigateur, il l'est pour ces codes)»

Citation de S☼leil dans le premier message :
' URL correspond au chemin complet du document exemple: http://www.domaine.ext/r�rtoire/ document.pl?Param=Exemple&Param2=test
' StrUserAgent correspond �a d�nition du navigateur exemple: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)


Citation dans la page web donnée plus haut :
' URL correspond au chemin complet du document exemple: http://www.domaine.ext/répertoire/ document.pl?Param=Exemple&Param2=test
' StrUserAgent correspond à la définition du navigateur exemple: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)

La seule différence tient aux caractères utilisés dans deux navigateurs différents (Firefox et IE) qui ne peuvent pas les rendre correctement (FireFox est conforme w3c, pas IE). Du iso-8859-1 passé en utf-8 c'est toujours la galère. Bref, sauf cet incongruité c'est identique.

C.Q.F.D.

Et, en passant, y'a quelqu'un dans les parages qui pige quelque chose aux scripts Perl?

Oui, moi, j'en ai bricolé il y a longtemps. Très beau langage; méprisé par les fanas de PHP qui s'amusent à passer l'acronyme PHP pour Php Hate Perl.

Passons et bref et bien qu'il n'ait aucunement besoin de mon imprimatur, Didier à tout à fait raison de coller un zéro pointé au S☼leil.

Enfin s'il n'allait pas jusque là, moi, j'y suis déjà.


Guy


Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes