Récupérer le contenu d'une page web

Signaler
Messages postés
823
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
20 septembre 2020
-
Messages postés
116
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
28 septembre 2020
-
Bonjour,
Si j'affiche une page web dans mon navigateur, que je sélectionne tout, que je copie dans le presse papier et colle dans une textbox je peux lire et analyser le contenu.
Exemple de code source
<td>Chloride</td><td>19508 mg/l</td><td>19481 mg/l</td><td>+27.30 mg/l</td>

si je copie le résultat affiché dans le presse papier j'obtiens
Chloride(9)19508 mg/l(9)19481 mg/l(9)+27.30 mg/l
les (9) étant des tabulations Chr$(9) càd des séparateurs qui me permettent de décortiquer le contenu

Je voudrais faire la même chose sans devoir copier/coller, j'ai essayé comme ceci
WebBrowser.Navigate ("https://lab.atiaquaristik.com/share/65e040aec9b375e95c8e")
Page.Text = WebBrowser.Document.Body.InnerText

résultat
Chloride19508 mg/l19481 mg/l+27.30 mg/l
c'est-à-dire que je n'ai aucun séparateur : comment obtenir la même chose qu'un copier/coller ?

9 réponses

Messages postés
2236
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 septembre 2020
114
Bonjour
Teste ceci à tout hasard
Il y a longtemps que je ne fais plus de VB6
WebBrowser.Navigate ("https://lab.atiaquaristik.com/share/65e040aec9b375e95c8e")
Page.Text = WebBrowser.Document.documentElement.outerHTML

Messages postés
823
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
20 septembre 2020
2
Là je n'ai plus du tout les données qui m'intéressent, seulement le code html qui devrait générer les données.

J'ai essayé aussi de simuler les touches Ctrl+A Ctrl+C mais le presse papier est vide, voici ce code
Clipboard.Clear
WebBrowser.Navigate ("https://lab.atiaquaristik.com/share/65e040aec9b375e95c8e")
WebBrowser.SetFocus
keybd_event VK_CONTROL, 0, 0, 0
DoEvents
keybd_event VK_A, 1, 0, 0
DoEvents
keybd_event VK_CONTROL, 0, 0, 0
DoEvents
keybd_event VK_C, 1, 0, 0
DoEvents
keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0
DoEvents
Page.Text = Clipboard.GetText
Messages postés
2236
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 septembre 2020
114
bonjour !
A voir : https://codes-sources.commentcamarche.net/forum/affich-1067255-sendkey-webbrowser
A tout hasard avec
Clipboard.Clear
WebBrowser.Navigate ("https://lab.atiaquaristik.com/share/65e040aec9b375e95c8e")
WebBrowser.SetFocus
SendKeys "^A"  ' Ctrl A
DoEvents
SendKeys "^C"  ' Ctrl C
DoEvents
Page.Text = Clipboard.GetText


Messages postés
823
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
20 septembre 2020
2
Merci mais j'ai compris pourquoi le presse papier est vide avec mon dernier exemple :
il faut attendre que WebBrowser.Navigate soit terminé !
Private Sub WebBrowser_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
    Imported = True
End Sub
...
WebBrowser.Navigate ("https://www.triton-lab.de/en/showroom/icp-oes/96461")
Imported = False
Do
    DoEvents
Loop Until Imported
Là c'est bon, le presse-papier contient bien le texte de la page telle que je la vois et je peux la décoder.


Mais j'ai un autre problème :
la page web est une analyse venant d'un laboratoire, avec certains ça fonctionne très bien
mais avec celui-ci https://www.triton-lab.de/en/showroom/icp-oes/96461 j'ai le message ci-dessous que je n'ai pas quand je consulte la page avec un navigateur;
que je réponde oui ou non le presse-papier est vide; une idée ?

Messages postés
823
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
20 septembre 2020
2
J'ai oublié de dire que si je mets Webbrowser en mode Silent je n'ai plus le message mais le presse-papier est quand même vide.
Messages postés
116
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
28 septembre 2020
1
Bonjour Herve_be et tous mes vœux !

J'ai été confronté au même problème de script. Le problème est que le WebBrowser fait appel à IE, pas un autre navigateur. J'utilise FireFox, et j'avais le même souci. J'ai donc utilisé une autre méthode qui fonctionne avec tous les navigateurs. Mon programme lit une page Web, crée un fichier URL.TXT que je dois modifier pour 2 raisons :
1 - les fins de lignes sont incomplètes (LF et non CRLF)
2 - les caractères spéciaux ne sont pas traduits
Mon programme lit le fichier URL.TXT et crée CRLF.TXT. Après, c'est à toi de voir comment traiter ce dernier fichier (mon programme définitif (ici, c'est un extrait) lit ligne par ligne et recherche ce dont j'ai besoin.

Dans un nouveau projet, créer un module BAS :
Option Explicit
Global sURL As String
Global sfilename As String
Global bRet As Boolean
Global zone As String
Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szUrl As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Function DownloadPage(ByVal url As String, ByVal FileName As String) As Boolean
Dim done As Boolean
Dim value As Long

    On Error Resume Next
    
    done = True
    If Dir$(FileName) <> "" Then
        Kill FileName
    End If
    value = URLDownloadToFile(0, url, FileName, 0, 0)
    If Dir$(FileName) = "" Then
        done = False
    End If
    DownloadPage = done
End Function


Le projet ne contient qu'une form et un bouton : cmd_load:

Public Sub cmd_load_Click()

sURL = "https://codes-sources.commentcamarche.net/forum/affich-10099325-recuperer-le-contenu-d-une-page-web"
    sfilename = App.Path & "\url.txt"
    bRet = DownloadPage(sURL, sfilename)
    If bRet Then
        MsgBox "Téléchargement réussi."
    Else
        MsgBox "Erreur lors du télécharegement"
        Exit Sub
    End If
skip_load:


conv_lf:
Open App.Path & "\url.txt" For Input As #1
Open App.Path & "\crlf.txt" For Output As #2
zone = Input(LOF(1), #1)
zone = Replace$(zone, vbLf, vbCrLf)
zone = Replace(zone, "\u00e0", "à")
zone = Replace(zone, "\u00e2", "â")
zone = Replace(zone, "\u00e9", "é")
zone = Replace(zone, "\u00e8", "è")
zone = Replace(zone, "\u00ea", "ê")
zone = Replace(zone, "\u00eb", "ë")
zone = Replace(zone, "\u00f9", "ù")
zone = Replace(zone, "\u00e7", "ç")
zone = Replace(zone, "\u0026", "")
zone = Replace(zone, "\u2026", "")
zone = Replace(zone, "\u0027", "'")
zone = Replace(zone, "\u0153", Chr(156))
zone = Replace(zone, "\u00fb", "û")
zone = Replace(zone, "\u00f4", "ô")
zone = Replace(zone, "\u00ef", "ï")
zone = Replace(zone, "\u00f6", "ö")
zone = Replace(zone, "\u00fc", "ü")
zone = Replace(zone, "\u00e4", "ä")
zone = Replace(zone, "\u00f1", "ñ")
zone = Replace(zone, "\u00ee", "î")
zone = Replace(zone, "\u00c9", "É")
zone = Replace(zone, "\u00c0", "À")
zone = Replace(zone, "\u00ab", "!")
zone = Replace(zone, "\u00c0", "&")
zone = Replace(zone, "\u00c7", "Ç")
zone = Replace(zone, "\u00ed", "í")
zone = Replace(zone, "\u00e1", "á")
zone = Replace(zone, "\u00f3", "ó")
zone = Replace(zone, "\u00bf", "¿")
zone = Replace(zone, "\u0028", "(")
zone = Replace(zone, "\u0029", ")")
zone = Replace(zone, "amp;", "")

Print #2, zone
Close #2
Close #1
End Sub


Il ne te reste plus qu'à traiter le fichier CRLF.TXT comme il te convient.

En espérant t'avoir aidé...

Cordialement

Notpa
Messages postés
823
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
20 septembre 2020
2
Bonjour,
Merci pour ton astuce qui me paraissait séduisante.
Cependant le résultat n'est pas ce que je vois à l'écran
mais le code source html qui permet d'afficher ce que je vois à l'écran.

Exemple de page que je voudrais capturer
https://lab.atiaquaristik.com/share/65e040aec9b375e95c8e
Résultat avec ton code
<script>
        var dataTable = {
            data: {"quality_index":[{"percentage_value":85,"name_de":"Mengenelemente","name_en":"Major elements","name_es":"Major elements","name_it":"Major elements","name_fr":"Major 

... j'abrège ...

<script src="https://lab.atiaquaristik.com/js/vendor/liquid-fill-gauge.min.js"></script>
<script src="https://lab.atiaquaristik.com/js/general.js?v=84"></script>
<script src="https://lab.atiaquaristik.com/js/frontend.js?v=84"></script>
</body>
</html>
Je voudrais obtenir ce que j'ai dans le presse papier en affichant la page dans un navigateur puis en faisant Ctrl+A Ctrl+C

Merci quand même
Messages postés
116
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
28 septembre 2020
1
Re,

Si j'ai bien compris, tu veux récupérer le contenu d'une page Web, format HTML ? Avec FireFox, si tu fais un clic droit sur la page et sélectionne Code source de la page, c'est ça que tu veux comme données ? Évidemment, ce n'est pas très automatisé !

Si ce n'est pas, ça, peux-tu m'expliquer ? Je suis peut-être parti sur une mauvaise piste.
Messages postés
823
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
20 septembre 2020
2
Non, je veux récupérer ce que je vois à l'écran.
Par exemple sur la page que tu lis actuellement fais Ctrl+A puis Ctrl+C et colle le presse-papier dans le bloc notes, c'est ce que je veux obtenir.
Avec cette méthode copier/coller tout fonctionne parfaitement mais je voudrais obtenir la même chose en donnant l'URL de la page sans devoir la copier/coller.
Messages postés
116
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
28 septembre 2020
1
OK, je vois. C'est une capture d'écran pas en image, mais en format texte via une URL donnée.
Pas d'idée pour le moment. Si je trouve qq chose, je reviens.

Bonne chance !