La fonction "htmlcodepage" retourne -1 sur certains sites web

Bonjour,

J'utilise depuis un moment la fonction "htmlcodepage" pour récupérer le code html de sites web notamment TopAchat. Ça fonctionne bien mais sur certains sites web notamment LeDenicheur, ça me renvoi "-1"...

Savez-vous pourquoi j'ai -1 sur certains sites ? et savez-vous surtout comment régler/contourner ce problème ?

Je vous remercie,

Bonsoir,

-1 indique une erreur sur la procédure, reste à savoir qu'elle erreur !
Faites un test entre les deux site en récupérant le code html par un autre moyen afin de les comparer. Ou bien écrivez à Sébastien qui a conçu cette fonction, il saura peut-être vous dire les "limitations" ou autre problème liés à cette dernière.

@ bientôt

LouReeD

Bonsoir,

J'ai trouvé un autre code permettant d'avoir le code HTML d'une page web (ref : Excel Malin). Je viens d'essayer avec le lien TopAchat et LeDenicheur. Sur TopAchat ça fonctionne bien mais avec le lien LeDenicheur ça me renvoie l'erreur 2042.

Est-ce que certains sites ne bloqueraient pas ces requêtes automatiquement ?

Merci,

re

Bonsoir

si la fonction est basée sur la librairie IE c'est mort

car 95% des sites on migrés vers des protocoles chromium et PHP

donc il y aura des sites qui tourneront encore et dautre il faudra voir avec power query

Bonsoir,

Je ne sais pas si la fonction est basée sur la librairie IE ... (le lien de la fonction : sur Excel-Malin : obtenir-code-source-html-page-web). Je n'ai pas vu de citation de la librairie IE dans l'explication.

Que voulez-vous dire par voir avec PowerQuery ?

Merci

re

on peut la voir cette fonction ?

du moins le code ?

Bonjour, voici le code Excel-Malin pour récupérer le code HTML :

Public Function ExtraireSourceHTML(LienURL As String)
'par: Excel-Malin
On Error GoTo ExtraireSourceHTMLErreur

  With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", LienURL, False
    .Send
      If .ReadyState = 4 Then
        If .Status <> 200 Then
            ExtraireSourceHTML = CVErr(xlErrNA)
        Else
            ExtraireSourceHTML = .ResponseText
        End If
      Else
        ExtraireSourceHTML = CVErr(xlErrNA)
      End If
  End With

Exit Function
ExtraireSourceHTMLErreur:
ExtraireSourceHTML = CVErr(xlErrNA)
End Function

Voici mon code (où j'ai essayé les deux fonctions pour les deux sites web, les liens sont impossibles à envoyer) :

Private Sub cmd_MajPrixDenicheur_Click()

'Récupérer le lien
LigneProduit = 3
monURL = Cells(LigneProduit, 4).Value
ColonneMagasin = 5
monMagasin = Cells(2, ColonneMagasin).Value

Do While (monURL <> "") 'Boucle de la ligne. c'est a dire pour un produit. Ensuite boucle pour les magasins.
    Do While (monMagasin <> "")
        htmlDeLaPage = ExtraireSourceHTML("Lien Dénicheur") 'NOK
        htmlDeLaPage = ExtraireSourceHTML("Lien TopAchat pour Test") 'OK
        htmlDeLaPage = htmlCodePage("Lien TopAchat pour Test") 'OK
        htmlDeLaPage = htmlCodePage("Lien Dénicheur") 'NOK
        htmlDeLaPagePrix = regexExtract(htmlDeLaPage, "LDLC .+ \d+.\d+") ' On recherche la magasin et son prix
        htmlDeLaPagePrix = regexExtract(htmlDeLaPagePrix, "\d+.\d+")     ' On ne garde que la prix
        htmlDeLaPagePrix = Replace(htmlDeLaPagePrix, ".", ",")           ' On remplace le point par une virgule
        Cells(LigneProduit, ColonneMagasin).NumberFormat = "#,##0 $"     ' On change le format de la case en Prix
        Cells(LigneProduit, ColonneMagasin).Value = htmlDeLaPagePrix     ' On affiche le prix sur la case

        ColonneMagasin = ColonneMagasin + 1           ' On passe a la colonne suivante = magasin suivant
        monMagasin = Cells(2, ColonneMagasin).Value
    Loop
    LigneProduit = LigneProduit + 1                   ' On passe à la ligne suivante = produit suivant
    monURL = Cells(LigneProduit, 4).Value
Loop

End Sub

Merci

Les liens (avec espaces pour pouvoir envoyer) :

Lien LeDenicheur (non fonctionnel) : https : // ledenicheur . fr/product.php?p=7280301

Lien TopAchat (Fonctionnel) : https : // www . Topachat . com/pages/detail2_cat_est_micro_puis_rubrique_est_w_ssd_puis_ref_est_in20013794 . html

re

Bonjour

c'est bien ce que je dis

CreateObject("MSXML2.XMLHTTP") est issue de la librairie IE de microsoft

quand c'est mort c'est mort 

Ok ..

Connaissez-vous d'autres fonctions / outils / moyens de récupérer le code html sur Excel ?

non mais je crois savoir que PQ peut le faire si le protocole get du site l'accepte après sinon c'est mort pour excel

re

je viens de regarder le denicheur il me parrait encore accéssible mis a part un PHP "collect" et c'est peut être lui
qui fout le boxon

image

donne moi une addresse (url d'article sur le denicheur je vais voir

Merci Patrick d'avoir regardé.

Voici un URL d'un produit dont j'aimerai télécharger le code HTML : https : // ledenicheur . fr/product.php?p=7280301

Il y a des espaces car sinon je ne peux pas partager le lien. Le produit c'est un SSD Crucial P3 4To. Mais tu peux prendre n'importe quel produit ça ne devrait pas différer de beaucoup. Une fois que j'ai accès au html, je réussirai à faire ce que je veux !

re

Bonjour

pour moi c'est OK
lis bien les commentaire
et laisse tomber les regex avec les pages de ce site
Bien lire les commentaires

'*****************************************************************************************************
'    ___     _     _______  __      _   ____  _   _  _______  ___     _   _   _    ___     _     _.
'   //  \\  /\\      //    // \\   //  //    //  //    //    //  \\  //  //  //   //  \\  //|   //
'  //___// //__\    //    //__//  //  //    //__//    //    //   // //  //  //   //   // // |  //
' //      //   \\  //    //  \\  //  //    //  \\    //    //   // //  //  //   //   // //  | //
'//      //    // //    //   // //  //___ //    \\  //     \\__// //__//  //___ \\__// //   |//
'****************************************************************************************************'                                     REQUETE SUR PAGE WEB
'modèle Ledenicheur.fr  ex:'https://ledenicheur.fr/product.php?p=7280301
'auteur patricktoulon
'date 20/01/2024
'**************************************************************************************************
Sub test()
   Dim code
   code = GetCodeHtmlLedenicheurVpat("https://ledenicheur.fr/product.php?p=7280301")

    With CreateObject("htmlfile") 'creation d'un DOMdocument en memoire
        .body.innerhtml = code 'on lui injecte le code complet  récupéré de la page web
        For Each elem In .all 'boucle sur les Nodes  sur All (tout element dans l'arborescence
            'If elem.innertext Like "*€" Then MsgBox elem.innertext: Exit For                               'LE PRIX TOUT COURT
            If Len(elem.innertext) > 30 And elem.innertext Like "*€" Then MsgBox elem.innertext: Exit For   'LA DESCRIPTION + LE PRIX + LE DISTRIBUTEUR

        'SI TU N'EXIT PAS DU FOR TU AURA TOUTES LES PROPOSITIONS DE LA PAGE WEB

        Next
    End With

End Sub

Function GetCodeHtmlLedenicheurVpat(url)
    Dim req As Object
    Set req = CreateObject("microsoft.xmlhttp")
    req.Open "get", url, False
    req.SetRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
    req.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0"
    req.SetRequestHeader "Accept-Language", "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3"
    req.SetRequestHeader "Accept-Encoding", "gzip, deflate, br"
    req.SetRequestHeader "Host", "ledenicheur.fr"
    req.SetRequestHeader "Connection", "Keep - Alive"
    req.SetRequestHeader "Cache-Control", "no-cache"
     req.send
   If req.ReadyState = 4 Then
        If req.Status <> 200 Then
            GetCodeHtmlLedenicheurVpat = ""
        Else
            GetCodeHtmlLedenicheurVpat = req.ResponseText
        End If
      Else
        GetCodeHtmlLedenicheurVpat = ""
      End If
End Function

Merci Patrick, je vais essayer ça !

Partrick, de mon coté je tombe toujours ici.

J'ai mis un msgbox pour savoir le type de statut et j'ai erreur 403. Apparement c'est "Fordidden".

Sais-tu d'ou ca peut venir ?

image

Merci encore

re

je n'avais pas bien lu la charte du site denicheur

je me vois dans l'obligation d'arrêter là

4.2. Tous les droits de propriété intellectuelle (tels que notamment droits d'auteur, droits voisins, droits des marques, droits des producteurs de bases de données) portant tant sur la structure que sur les contenus du Site Internet, à l’exclusion des droits de propriété intellectuelle des Marchands, et notamment les images, sons, vidéos, photographies, logos, marques, éléments graphiques, textuels, visuels, outils, logiciels, documents, données, etc. (ci-après désignés dans leur ensemble " Eléments ") sont réservés. Ces Eléments sont la propriété de Schibsted Market. Ces Eléments sont mis à disposition des Utilisateurs, à titre gracieux, pour la seule utilisation du Service leDénicheur et dans le cadre d'une utilisation normale de ce dernier. Les Utilisateurs s'engagent à ne modifier en aucune manière les Eléments.

Toute utilisation non expressément autorisée des Eléments du Site Internet entraîne une violation des droits de propriété intellectuelle de Schibsted Market et constitue une contrefaçon. Elle peut aussi entraîner une violation des droits à l'image, droits des personnes ou de tous autres droits et réglementations en vigueur. Elle peut donc engager la responsabilité civile et/ou pénale de son auteur.

4.3. Il est interdit à tout Utilisateur de copier, modifier, créer une œuvre dérivée, inverser la conception ou l'assemblage ou de toute autre manière tenter de trouver le code source, vendre, attribuer, sous licencier ou transférer de quelque manière que ce soit tout droit afférent aux Eléments.

Tout Utilisateur du Service leDénicheur s'engage notamment à ne pas :

a) Utiliser ou interroger le Service leDénicheur pour le compte ou au profit d'autrui ;

b) Extraire, à des fins commerciales ou non, tout ou partie des informations présentes sur le Site Internet ;

c) Reproduire sur tout autre support, à des fins commerciales ou non, tout ou partie des informations présentes sur le Site Internet ;

d) Utiliser un robot, notamment d'exploration (spider), une application de recherche ou récupération de sites Internet ou tout autre moyen permettant de récupérer ou d'indexer tout ou partie du contenu du Site Internet, excepté en cas d'autorisation expresse et préalable de Schibsted Market ;

e) Copier les informations sur des supports de toute nature permettant de reconstituer tout ou partie des fichiers d'origine.

Toute reproduction, représentation, publication, transmission, utilisation, modification ou extraction de tout ou partie des Eléments et ce de quelque manière que ce soit, faite sans l'autorisation préalable et écrite de Schibsted Market est illicite. Ces actes illicites engagent la responsabilité de ses auteurs et sont susceptibles d'entraîner des poursuites judiciaires à leur encontre et notamment pour contrefaçon.

ah... eh bien on va s'arrêter là alors...

En tout cas, merci d'avoir pris du temps pour essayer de m'aider.

Bonjour @ vous deux !

Et pourquoi ne pas continuer le développement en prenant comme "exemple" un site qui n'interdit pas son aspiration ?
D'ailleurs que sont devenus ces applications d'aspiration de site pour les consulter hors ligne ?

C'qui m'fait doucement rigoler, ce sont ce type de règlement, alors que beaucoup de site, à notre insu, nous surveille ! Ok, c'est "un peu mieux" avec les choix personnels sur les cookies, mais en sommes nous sur ?

@ bientôt

LouReeD

Bonsoir LouReed

je suis parfaitement d'accords avec toi
mais nous savons tres bien qui va gagner si cela devait partir en bataille judiciaire
perso si Sébastien ne sensure pas je veux bien continuer

et je mettrais peut être a jour mon app geny coursepar la même occasion

Rechercher des sujets similaires à "fonction htmlcodepage retourne certains sites web"