IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

Injection HTML via commande javascript par VBA (innerHTML)


Sujet :

VBA

  1. #1
    Candidat au Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Injection HTML via commande javascript par VBA (innerHTML)
    Bonjour la communauté

    Je me suis lancé le défi de réaliser un petit programme de création de dictionnaire multilingues pour intégrer dans mes fichiers.
    L'objectif sera de créer des interfaces multilinguismes dans EXCEL, WORD, POWERPOINT, et j'en passe.
    L'utilisation de la traduction via bing n'étant pas convaincante pour nos collaborateurs.

    Du coup, je me tourne vers Reverso que nous trouvons plus adapté.

    Je scrap sans souci majeur le site, et peux récupérer la traduction en ayant envoyé un mot ou une phrase à traduire.
    Mon problème est que je n'arrive pas à piloter la liste de sélection des langues pour réaliser les recherches en fonction de ma langue d'entrée et de la langue attendue en traduction.
    Je suis obligé, à ce jour de le faire manuellement. Ce qui n'est vraiment pas top.

    Aussi, le site est Reverso

    J'avoue que je suis une tanche en HTML et rencontre bien du mal à comprendre le mode de fonctionnement du site
    La liste de sélection de la langue d'entrée est gérée par ce code :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <select name="ctl00$cC$ucDirections$ddlSrc" id="cC_ucDirections_ddlSrc" style="display: none;">
    	<option value="1031">Allemand</option>
    	<option value="1033">Anglais</option>
    	<option value="1025">Arabe</option>
    	<option value="1028">Chinois</option>
    	<option selected="selected" value="1034">Espagnol</option>
    	<option value="1036">Français</option>
    	<option value="1037">Hébreu</option>
    	<option value="1040">Italien</option>
    	<option value="1041">Japonais</option>
    	<option value="1043">Néerlandais</option>
    	<option value="1045">Polonais</option>
    	<option value="2070">Portugais</option>
    	<option value="1048">Roumain</option>
    	<option value="1049">Russe</option>
    	<option value="1055">Turc</option>
     
    </select><div tabindex="0" class="nice-select"><span class="current">Espagnol</span><ul class="list"><li class="option" data-value="1031">Allemand</li><li class="option" data-value="1033">Anglais</li><li class="option" data-value="1025">Arabe</li><li class="option" data-value="1028">Chinois</li><li class="option selected" data-value="1034">Espagnol</li><li class="option" data-value="1036">Français</li><li class="option" data-value="1037">Hébreu</li><li class="option" data-value="1040">Italien</li><li class="option" data-value="1041">Japonais</li><li class="option" data-value="1043">Néerlandais</li><li class="option" data-value="1045">Polonais</li><li class="option" data-value="2070">Portugais</li><li class="option" data-value="1048">Roumain</li><li class="option" data-value="1049">Russe</li><li class="option" data-value="1055">Turc</li></ul></div>

    Si je comprends bien, il y a deux listes à proprement parlé, une en Select/Option et une en Ul/li. là déjà je bug... pourquoi ? (si quelqu'un peut m'expliquer la logique)

    Bref, revenons à nos moutons

    Sans rentrer de tout mon code, la partie qui nous intéresse (et vous aussi qui me lisent ) est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Dim oIE As Object
        Set oIE = CreateObject("InternetExplorer.Application")
     
        Dim oHTML_doc As Object
     
        oIE.Visible = True
        oIE.navigate sURLReverso
     
        ' Statusbar let's user know website is loading
        Application.StatusBar = "www.reverso.net is loading. Please wait..."
     
        'Attente que la page soit actualisée et prête
        While oIE.Busy Or oIE.READYSTATE <> 4: DoEvents: Wend
     
        Set oHTML_doc = oIE.document
     
        'Webpage Loaded
        Application.StatusBar = "www.reverso.net  Loaded"
     
        Dim LstHTML_1 As String
        'Dim sCurSelect_1 As String
        Dim LstHTML_2 As String
        'Dim sCurSelect_2 As String
     
        'Stocker les innerhtml des listes déroulantes des langues
        LstHTML_1 = oHTML_doc.getElementsByTagName("ul")(0).innerhtml
        LstHTML_2 = oHTML_doc.getElementsByTagName("ul")(1).innerhtml
     
        'Supprimer les paramètres : "focus" et "selected"
        LstHTML_1 = Replace(LstHTML_1, " focus", "")
        LstHTML_1 = Replace(LstHTML_1, " selected", "")
        LstHTML_2 = Replace(LstHTML_2, " focus", "")
        LstHTML_2 = Replace(LstHTML_2, " selected", "")
     
        'Renseigner les paramètres : "focus" et "selected" pour les langues recherchées
        LstHTML_1 = Left(LstHTML_1, InStr(1, LstHTML_1, sFrom, vbTextCompare) - 15) & " selected focus" & Right(LstHTML_1, Len(LstHTML_1) - (InStr(1, LstHTML_1, sFrom, vbTextCompare) - 15))
        LstHTML_2 = Left(LstHTML_2, InStr(1, LstHTML_2, sToLang, vbTextCompare) - 15) & " selected" & Right(LstHTML_2, Len(LstHTML_2) - (InStr(1, LstHTML_2, sToLang, vbTextCompare) - 15))
     
        'Renvoyer le code HTML
        oHTML_doc.parentwindow.execscript "javascript:document.getElementsByTagName('ul')[0].innerhtml = '" & LstHTML_1 & "';"
        oHTML_doc.parentwindow.execscript "javascript:document.getElementsByTagName('ul')[1].innerhtml = '" & LstHTML_2 & "';"
    Ce code a été établi après une analyse des données qui me semble les plus probantes à être modifier pour être prises en compte pour lancer la traduction.
    Son objectif est d'intervenir sur les "Selected" et les "focus" devant les éléments recherchés... D'où la fonction REPLACE utilisée à gogo pour modifier les innerHTML.

    Mais rien ne se passe, le code HTML de la page ne se modifie pas du tout...

    Quelqu'un comprendrait-il mon problème ? Est-ce mon approche qui est mauvaise ? Quelle technique dois-je modifier pour y parvenir ?

    Siouuuuuplé !!!!!

    Je suis sûr que des cracks du Web pourront m'expliquer la logique d'une page, car franchement après maintes et maintes recherches, je sèche !

    Merci beaucoup pour votre attention.

    Je reste disponible si vous avez besoin d'éléments complémentaires pour comprendre tout ce beau brodel

    Aller, sur ce... au taf

    VBAdialement,
    GexMan1198S

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    tu peux aussi utilisation la traduction par google voir ici

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Candidat au Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour et merci pour la réponse
    Mais Google Translate est tout de même moins performant sur les traductions, aussi je dois l'utiliser que pour les langues non disponibles sur Reverso.

    J'ai trouvé la solution à mon problème, je pilote le site web via les boutons (nice-select) que je n'avait pas su identifié.

    Bonne continuation sur le fofo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] MS Access ActiveX WebBrowser: appel de fonctions JavaScript par VBA
    Par informer dans le forum Contribuez
    Réponses: 0
    Dernier message: 06/01/2016, 18h15
  2. exécuter la commande dos cscript.exe via un javascript
    Par chichiboof dans le forum VBScript
    Réponses: 17
    Dernier message: 06/04/2011, 11h55
  3. Afficher une page HTML via un javascript?
    Par sloyvy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/07/2008, 11h19
  4. Email au format HTML via VBA
    Par DPhBxl dans le forum Access
    Réponses: 10
    Dernier message: 25/01/2007, 15h24
  5. newbie : fichier xml vers html via command-line
    Par morti dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 08/11/2005, 07h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo