PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Activex + ole automation + html + maudits <div....
Activex + ole automation + html + maudits <div....
Débuté par HERVE, 14 sep. 2017 10:42 - 5 réponses
Membre enregistré
14 messages
Posté le 14 septembre 2017 - 10:42
Bonjour à vous,

Je suis en train de travailler sur le remplissage automatique de champ html sur un principe de champ activex qui contient le contenu d'une URL,
un

HTMLDocument est un objet OLE dynamique
HTMLDocument=AX_web>>Document

mhtmInputBox est OLE dynamique
mhtmInputBox = HTMLDocument>>getElementById("ce que je recherche")

L'élément recherché est une zone en saisie, donc, une fois trouvée

mhtmInputBox>>Value = "ce que je veux mettre dedans"

Sur le papier, très simple, mais ou cela se corse, c'est quand cette zone se trouve dans des <div... imbriqués, comme ceci :

<div id="page">
<"div id=content">
<div...>bla bla </div>
<div...>bla bla </div>
<div class "tac">
<form id = "toto name="toto .... method="get">
<input id="listsearchmin" type="text" name="q" title="Rechercher" value="Rechercher une Commune..." onfocus="this.value='';" maxlength="100" autocomplete="off" style="width:190px;"/>


c'est ce dernier (name="q") que je souhaite atteindre pour y mettre une valeur, et là, j'avoue coincer.

Comment faire ?
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 14 septembre 2017 - 13:01
Bonjour,
N'ayant pas votre code HTML au complet je n'ai pu faire un véritable test, mais en passant par un «WebBrowser» cela semble fonctionner.
CodeHTML est une chaîne UNICODE
// https://msdn.microsoft.com/fr-fr/library/system.windows.forms.webbrowser(v=vs.110).aspx
myWebBrowser est un WebBrowser dynamic

CodeHTML = [
<html>
<body>
<div class="page">
<p class="skiplink"><a href="#content">Aller au contenu</a> | <a href="#nav">Aller au menu</a></p>
<div class="header">En-tête</div>
<div class="nav" id="nav">Navigation</div>
<div class="main">
<div class="wrapper">
<div class="content" id="content">Contenu</div>
<p id="data">data one</p>
</div>
<div class="aside">Contexte</div>
</div>
<div class="footer">Pied de page</div>
</div>
</body>
</html>
]

myWebBrowser = allouer un WebBrowser
myWebBrowser:DocumentText = CodeHTML
//----- Très important -->> On attend le chargement du code HTML
WHILE myWebBrowser:DocumentText <> CodeHTML
Multitâche(1)
END
IF myWebBrowser:Document <> Null THEN
// see : https://msdn.microsoft.com/fr-fr/library/system.windows.forms.htmldocument.getelementbyid(v=vs.110).aspx
Trace(myWebBrowser:Document:GetElementById("data"):InnerText)
myWebBrowser:Document:GetElementById("data"):InnerText = "new data"
Trace(myWebBrowser:Document:GetElementById("data"):InnerText)
END
Libérer myWebBrowser
Membre enregistré
14 messages
Posté le 14 septembre 2017 - 14:14
Bonjour,

Merci pour votre réponse.

Je n'ai pas mis l'ensemble du code, qui fait partie d'une page web "http://www.annuaire-mairie.fr/departement-eure.html"

Ce que j'ai mis était simplement pour montrer un champ à remplir, se trouvant dans divers "div" imbriqués.

Le projet étant de prendre cette page, y entrer automatiquement le nom d'une commune, cliquer automatiquement sur le bouton existant également dans cette page , et récupérer des infos dans la page de résultats qui apparaitra ensuite.

Dans le cahier des charges, il est prévu de le faire en activeX et javascript, sous windev 22, sous windows 10.

au passage, "myWebBrowser est un WebBrowser dynamic" ne fonctionne pas, "WebBrowser " n'est pas un type reconnu ici.
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 14 septembre 2017 - 14:31
WebBrowser est une classe .NET, Il faut l'ajouter au projet en ajoutant l'assemblage «System.Windows.Forms»
Membre enregistré
14 messages
Posté le 15 septembre 2017 - 08:24
Encore merci. J'ai suivi les conseils, ajouté l'assemblage nécessaire, et commencé à "triturer" la classe WebBrowser dont, finalement, les propriétés sont similaires en bien des points à l'activeX "shell.explorer"-javascript, syntaxe mise à part

Cela ne résout pas mon problème, je vais fouiller encore plus loin.
Membre enregistré
14 messages
Posté le 20 septembre 2017 - 11:07
Bonjour, voici un retour.

J'ai drastiquement réduit le code HTML que je récupère du site, ne laissant que les arborescences.

<!DOCTYPE html>
<html lang="fr" dir="ltr" itemscope itemtype="http://schema.org/WebPage">
<head>
</head>
<body>
<header>
</header>
<div id="page">
<div id="content">
<div itemscope itemtype="http://schema.org/AdministrativeArea">
</div>
<h1>Villes et mairies du Département de l'Eure (27)</h1>
<div id="path2">
</div>
<p class="intro">
</p>
<div class="tac">
<form name="flistsearchmin" action="/" method="get" id="flistsearchmin">
<input id="listsearchmin" type="text" name="q" title="Rechercher" value="Rechercher une Commune..." onfocus="this.value='';" maxlength="100" autocomplete="off" style="width:190px;"/>
<input class="sub" type="submit" name="sa" value="Rechercher"/>
<input type="hidden" name="cx" value="partner-pub-9358454219275145:6365751691"/>
<input type="hidden" name="cof" value="FORID:10"/>
<input type="hidden" name="ie" value="UTF-8"/>
</form>
</div>
<h2>Liste des communes</h2>
<div id="annuaire">
</div>
<div class="block">
</div>
</div>
</div>
<div id="sideleft">
</div>
<div id="footer">
</div>
</div>
</body>
</html>


Dans ce code, il y a un champ id "listsearchmin" qui est une zone remplissable, avec un tag "value" qui doit être modifié, l'autre est un bouton classe "sub", name "sa" sue lequel un click doit être fait.

Comme vous pouvez voir, "div" à part, la description des zones à remplir ou cliquer est différente de votre exemple de code, qui fonctionne très bien d'ailleurs.

J'ai essayé bien des choses, mais pas de résultat, du coup, me voici encore coincé.