OVH Cloud OVH Cloud

Capturer le contenu d'une page affichée dans Internet Explorer 6 ??

28 réponses
Avatar
teddy
Bonjour à tous,

J'aurais besoin de capturer une page affichée dans Internet Explorer 6 par script VBS si possible.

Cette page occupe tout l'écran (pas de bandeau avec le menu horizontal ni les icônes) et utilise des
frames.
De plus, un script javascript interdit la touche droite de la souris et il n'y a pas de raccourci
dans IE6 pour faire "Enregistrer sous" en utilisant des SendKeys().

J'ai déjà essayé avec un WebBrowser sous VB et je n'arrive pas à sauvegarder la page entière :
' Récupération du Code Source du document chargé dans WebBrowser
Dim s As String
s = WebBrowser1.Document.All.tags("html").Item.innerHTML
Je ne récupère qu'une partie de la page affichée dans le WebBrowser.

J'ai aussi fouillé dans les fichiers de \Local Settings\Temporary Internet Files mais on ne récupère
que des bribes.

Si vous avez une idée pour résoudre ce genre de problème en VB, VBS, ou autre je suis preneur !


Teddy

8 réponses

1 2 3
Avatar
MC
Bonsoir !

FireFox ne dispose d'aucun objet scriptable documenté ...
En fait, si il y a, pour FF.

Il y a quelques temps, je suis tombé sur un truc, appelé MozLab. C'est
un plug-in, en version bêta.
Cela permet de piloter FF un peu comme OLE-automation.

J'ai expérimenté. C'est jouable. Mais on reste encore largement
en-dessous des possibilités du vrai COM/Ole-automation.

MAIS : ce n'est qu'une bêta. Et, par expérience, j'ai des doutes sur la
perennité du truc. Il y a de nombreux trucs, qui sont sortis pour FF,
et n'ont plus été suivis (XPcom, AtiveMoz, etc.)

Conclusion : pour s'amuser, OK ; mais je ne risquerais pas une
utilisation professionnelle là-dessus...

--
@-salutations

Michel Claveau

Avatar
MC
Bonsoir !

Je viens de tester, avec succès, la solution que j'avais proposé
précédemment.

J'ai même fait un petit batch qui ouvre IE, sur la page voule, attend
un peu (que la page soit chargée), lance la sauvegarde, et, enfin,
ferme IE.

Détail de la sauvegarde : Alt-F R c:dataweb.mht Alt-E

--
@-salutations

Michel Claveau
Avatar
Ripley
" teddy" a écrit dans le message de
news:
Je suis en entreprise. Le navigateur utilisé est IE6.

Je veux capturer une page d'une application intranet pour en exploiter les
données (tableaux HTML)

dans le cadre d'un projet, pas pour capturer les images (quelques petits
pictogrammes sans aucun

intérêt !)

La capture des données peut se faire en récupérant les fichiers
temporaires de IE6 mais c'est une

méthode "crade" et pas forcément fiable si on ne nettoie pas au préalable
les vieux fichiers.


Je voudrais faire ce que l'on fait avec le menu "Fichier/Enregistrer
sous..." de IE6 qui est

inaccessible (même en faisant <ALT>< F> pour le faire apparaître, bloqué à
cause du type de

fenêtrage de l'application). D'autre part, il n'y a pas de raccourci
clavier pour Enregistrer

sous...

Si vous avez une idée... :-|

Ted



Bonsoir,

avec ceci celà devrait fonctionner ( je m'en sers pour récupérer le niveau
des consommables d'une Imp. )

----------------------------------------------------------------------------
------------------------------
Set objExplorer = CreateObject("InternetExplorer.Application")

objExplorer.Navigate(http://Mon_URL)
'objExplorer.Visible= 1

Do Until objExplorer.readystate = 4

WScript.sleep 10

Loop

Toto = objExplorer.Document.Body.InnerText

objExplorer.Quit

Set objExplorer = Nothing

WScript.Echo Toto
----------------------------------------------------------------------------
--------------------------------

Evidemment, on peut effectuer un traitement sur la chaine récupérée pour
extraire les infows qui nous interessent

Cdt

Laurent

Avatar
teddy
Ca ne marche pas.
Pour accèder à la page à capturer, il faut appeler obligatoirement la page d'accueil sinon elle ne
s'affiche pas (présence du cookie immédiatement délivré par la page d'accueil, un cookie récupéré ne
convient pas).
Donc, toujours pas de soluce...
Ted

"Karl3i" a écrit dans le message de news:

Par hasard, est-ce que le bouton menu "contextuel" de Windows, entre la
touche Control et le logo Windows vers la droite du clavier ne marcherait pas
?

Autre piste : si tu as l'URL, pourquoi ne pas ouvrir IE6 toi-même et la
coller dans la barre d'adresse, ainsi tu récupérerais les menus traditionnels.




Je suis en entreprise. Le navigateur utilisé est IE6.

Je veux capturer une page d'une application intranet pour en exploiter les données (tableaux
HTML)
dans le cadre d'un projet, pas pour capturer les images (quelques petits pictogrammes sans aucun
intérêt !)

La capture des données peut se faire en récupérant les fichiers temporaires de IE6 mais c'est une
méthode "crade" et pas forcément fiable si on ne nettoie pas au préalable les vieux fichiers.

Je voudrais faire ce que l'on fait avec le menu "Fichier/Enregistrer sous..." de IE6 qui est
inaccessible (même en faisant <ALT>< F> pour le faire apparaître, bloqué à cause du type de
fenêtrage de l'application). D'autre part, il n'y a pas de raccourci clavier pour Enregistrer
sous...

Si vous avez une idée... :-|

Ted


" teddy" a écrit dans le message de news:
%23jWjb%
Bonjour à tous,

J'aurais besoin de capturer une page affichée dans Internet Explorer 6 par script VBS si
possible.

Cette page occupe tout l'écran (pas de bandeau avec le menu horizontal ni les icônes) et
utilise
des frames.
De plus, un script javascript interdit la touche droite de la souris et il n'y a pas de
raccourci
dans IE6 pour faire "Enregistrer sous" en utilisant des SendKeys().

J'ai déjà essayé avec un WebBrowser sous VB et je n'arrive pas à sauvegarder la page entière :
' Récupération du Code Source du document chargé dans WebBrowser
Dim s As String
s = WebBrowser1.Document.All.tags("html").Item.innerHTML
Je ne récupère qu'une partie de la page affichée dans le WebBrowser.

J'ai aussi fouillé dans les fichiers de Local SettingsTemporary Internet Files mais on ne
récupère que des bribes.

Si vous avez une idée pour résoudre ce genre de problème en VB, VBS, ou autre je suis preneur !


Teddy














Avatar
teddy
Je vais essayer cela mais je pense être "coincé" parce que ma page à capturer doit être appelée par
la page d'accueil qui envoie un cookie.

Ma page à capturer se trouve ainsi dans une nouvelle fenêtre sans bandeau d'un nouvelle instance
IE6.



"Ripley" a écrit dans le message de news: 45be2767$0$16359$

" teddy" a écrit dans le message de
news:
Je suis en entreprise. Le navigateur utilisé est IE6.

Je veux capturer une page d'une application intranet pour en exploiter les
données (tableaux HTML)

dans le cadre d'un projet, pas pour capturer les images (quelques petits
pictogrammes sans aucun

intérêt !)

La capture des données peut se faire en récupérant les fichiers
temporaires de IE6 mais c'est une

méthode "crade" et pas forcément fiable si on ne nettoie pas au préalable
les vieux fichiers.


Je voudrais faire ce que l'on fait avec le menu "Fichier/Enregistrer
sous..." de IE6 qui est

inaccessible (même en faisant <ALT>< F> pour le faire apparaître, bloqué à
cause du type de

fenêtrage de l'application). D'autre part, il n'y a pas de raccourci
clavier pour Enregistrer

sous...

Si vous avez une idée... :-|

Ted



Bonsoir,

avec ceci celà devrait fonctionner ( je m'en sers pour récupérer le niveau
des consommables d'une Imp. )

----------------------------------------------------------------------------
------------------------------
Set objExplorer = CreateObject("InternetExplorer.Application")

objExplorer.Navigate(http://Mon_URL)
'objExplorer.Visible= 1

Do Until objExplorer.readystate = 4

WScript.sleep 10

Loop

Toto = objExplorer.Document.Body.InnerText

objExplorer.Quit

Set objExplorer = Nothing

WScript.Echo Toto
----------------------------------------------------------------------------
--------------------------------

Evidemment, on peut effectuer un traitement sur la chaine récupérée pour
extraire les infows qui nous interessent

Cdt

Laurent





Avatar
Jean
Bonjour à tous,



Bonjour,

je pensais essayer de vous répondre à titre posthume mais apparement
vous vivez toujours :-)

J'aurais besoin de capturer une page affichée dans Internet Explorer 6 par
script VBS si possible.

Cette page occupe tout l'écran (pas de bandeau avec le menu horizontal ni
les icônes) et utilise des frames.
De plus, un script javascript interdit la touche droite de la souris et il
n'y a pas de raccourci dans IE6 pour faire "Enregistrer sous" en utilisant
des SendKeys().



Pas besoin de cette horreur de SendKeys :-) pour faire ça, vous pouvez
le faire via le DOM, avec la méthode execCommand, par exemple :

<!---8<---Sauvez_Moi.HTA---Jean-JMST-Belgium--->
<script language="vbs" defer>
document.execCommand "SaveAs",False,"c:fichier.htm"
</script>
<b>test</b>
<!---8<---Sauvez_Moi.HTA---Jean-JMST-Belgium--->

Comme j'ai lu plus loin que vous étiez en Intranet je vous conseille de
le faire dans un fichier HTA plutôt que HTM pour éviter les dialogues
d'alerte et autres restrictions du contexte Internet.

C'est le mode "silencieux" pour les HTA.
En mettant le second paramètre sur True vous affichez la boîte de
dialogue de "Enregistrer sous ...".
(Dans un HTM, True ou False affichera la boîte de dialogue)

J'ai déjà essayé avec un WebBrowser sous VB et je n'arrive pas à
sauvegarder la page entière :
' Récupération du Code Source du document chargé dans WebBrowser
Dim s As String
s = WebBrowser1.Document.All.tags("html").Item.innerHTML
Je ne récupère qu'une partie de la page affichée dans le WebBrowser.



Vous devriez obtenir le reste en utilisant outerHTML au lieu de
innerHTML.

Pour assurer un peu j'utiliserais la propriété "documentElement" de
l'objet "document" qui retourne le plus haut élément de la hiérarchie
HTML du document.

Au total un truc du genre :

s=WebBrowser1.Document.documentElement.outerHTML

(en admettant que vous récupérez cette valeur dans l'événement
OnDocumentComplete du WebBrowser par exemple).

Maintenant vous parlez aussi de cadres : avec votre code ou celui
ci-dessus vous ne récupérerez que la page de cadres normalement.

Soit vous chargez la cible du cadre dans le WebBrowser (le plus simple)
et vous faites comme ci dessus en VB (on pourrait aussi utiliser
xmlhttp / ADO dans ce cas mais je ne vais pas faire trop long, voir ces
liens :
http://groups.google.com/group/microsoft.public.fr.scripting/msg/b4429459c08cbec5?dmode=source&hl=fr

http://groups.google.com/group/microsoft.public.fr.scripting/msg/bf1b2ec21a100ec3?dmode=source&hl=fr
)

Soit vous accédez au document du cadre en itérant la collection des
cadres de la page de cadres avec la collection frames (plus complexe
parceque vous devrez vous assurez que la pages de cadre soit chargée,
puis que le document du cadre soit chargé avant de pouvoir récupérer
son contenu), ce qui semble être votre cas.

Ca donne un truc comme ceci en HTA / VBS :

°on charge la page de cadres (v:frames.htm) dans une iframe et on
accède au contenu des cadres via un script.
On accède ici au *deuxième* cadre et son contenu sera sauvé dans le
fichier o:fichier.htm (changez le chemin en fonction)°

<!---Sauver_Cadre.HTA---Jean-JMST-Belgium--->
<script language="vbs">
Sub Document_OnReadyStateChange
If LCase(Document.ReadyState)="complete" Then
Set docIframe=window.frames(0).document
While Not LCase(docIframe.readystate)="complete":Wend
Set docFrame=docIframe.frames(1).document
While Not LCase(docFrame.readystate)="complete":Wend
docFrame.execCommand "SaveAs",False,"o:fichier.htm"
Alert docFrame.documentElement.outerHTML
End If
End Sub
</script>

<iframe src='v:frames.htm' />
<!---Sauver_Cadre.HTA---Jean-JMST-Belgium--->

Je spécifie juste au passage que le premier test readyState pourrait
être évité en ajoutant l'attribut defer dans la balise script.

Voilà en gros pour le principe.

On pourrait aussi imaginer récupérer directement le contenu du tableau
(ou les données qui vous intéressent) et sauver les données dans un
fichier à l'aide de FSO, mais j'ai assez blablaté pour l'instant :-)


J'ai aussi fouillé dans les fichiers de Local SettingsTemporary Internet
Files mais on ne récupère que des bribes.



Ca on oublie : le TIF c'est pas TOP :-)

Si vous avez une idée pour résoudre ce genre de problème en VB, VBS, ou
autre je suis preneur !


Teddy


Amicalement,

--
Jean - JMST
Belgium

Avatar
teddy
Voilà une réponse très complète !
Je vais tester les différentes méthodes avec VB6 et VBScript.
Je reviendrai ASAP sur ce forum pour donner les résultats.
Merci encore.

Teddy


"Jean" a écrit dans le message de news:
Bonjour à tous,



Bonjour,

je pensais essayer de vous répondre à titre posthume mais apparement vous vivez toujours :-)

J'aurais besoin de capturer une page affichée dans Internet Explorer 6 par script VBS si
possible.

Cette page occupe tout l'écran (pas de bandeau avec le menu horizontal ni les icônes) et utilise
des frames.
De plus, un script javascript interdit la touche droite de la souris et il n'y a pas de raccourci
dans IE6 pour faire "Enregistrer sous" en utilisant des SendKeys().



Pas besoin de cette horreur de SendKeys :-) pour faire ça, vous pouvez le faire via le DOM, avec
la méthode execCommand, par exemple :

<!---8<---Sauvez_Moi.HTA---Jean-JMST-Belgium--->
<script language="vbs" defer>
document.execCommand "SaveAs",False,"c:fichier.htm"
</script>
<b>test</b>
<!---8<---Sauvez_Moi.HTA---Jean-JMST-Belgium--->

Comme j'ai lu plus loin que vous étiez en Intranet je vous conseille de le faire dans un fichier
HTA plutôt que HTM pour éviter les dialogues d'alerte et autres restrictions du contexte Internet.

C'est le mode "silencieux" pour les HTA.
En mettant le second paramètre sur True vous affichez la boîte de dialogue de "Enregistrer sous
...".
(Dans un HTM, True ou False affichera la boîte de dialogue)

J'ai déjà essayé avec un WebBrowser sous VB et je n'arrive pas à sauvegarder la page entière :
' Récupération du Code Source du document chargé dans WebBrowser
Dim s As String
s = WebBrowser1.Document.All.tags("html").Item.innerHTML
Je ne récupère qu'une partie de la page affichée dans le WebBrowser.



Vous devriez obtenir le reste en utilisant outerHTML au lieu de innerHTML.

Pour assurer un peu j'utiliserais la propriété "documentElement" de l'objet "document" qui
retourne le plus haut élément de la hiérarchie HTML du document.

Au total un truc du genre :

s=WebBrowser1.Document.documentElement.outerHTML

(en admettant que vous récupérez cette valeur dans l'événement OnDocumentComplete du WebBrowser
par exemple).

Maintenant vous parlez aussi de cadres : avec votre code ou celui ci-dessus vous ne récupérerez
que la page de cadres normalement.

Soit vous chargez la cible du cadre dans le WebBrowser (le plus simple) et vous faites comme ci
dessus en VB (on pourrait aussi utiliser xmlhttp / ADO dans ce cas mais je ne vais pas faire trop
long, voir ces liens :
http://groups.google.com/group/microsoft.public.fr.scripting/msg/b4429459c08cbec5?dmode=source&hl=fr

http://groups.google.com/group/microsoft.public.fr.scripting/msg/bf1b2ec21a100ec3?dmode=source&hl=fr
)

Soit vous accédez au document du cadre en itérant la collection des cadres de la page de cadres
avec la collection frames (plus complexe parceque vous devrez vous assurez que la pages de cadre
soit chargée, puis que le document du cadre soit chargé avant de pouvoir récupérer son contenu),
ce qui semble être votre cas.

Ca donne un truc comme ceci en HTA / VBS :

°on charge la page de cadres (v:frames.htm) dans une iframe et on accède au contenu des cadres
via un script.
On accède ici au *deuxième* cadre et son contenu sera sauvé dans le fichier o:fichier.htm
(changez le chemin en fonction)°

<!---Sauver_Cadre.HTA---Jean-JMST-Belgium--->
<script language="vbs">
Sub Document_OnReadyStateChange
If LCase(Document.ReadyState)="complete" Then
Set docIframe=window.frames(0).document
While Not LCase(docIframe.readystate)="complete":Wend
Set docFrame=docIframe.frames(1).document
While Not LCase(docFrame.readystate)="complete":Wend
docFrame.execCommand "SaveAs",False,"o:fichier.htm"
Alert docFrame.documentElement.outerHTML
End If
End Sub
</script>

<iframe src='v:frames.htm' />
<!---Sauver_Cadre.HTA---Jean-JMST-Belgium--->

Je spécifie juste au passage que le premier test readyState pourrait être évité en ajoutant
l'attribut defer dans la balise script.

Voilà en gros pour le principe.

On pourrait aussi imaginer récupérer directement le contenu du tableau (ou les données qui vous
intéressent) et sauver les données dans un fichier à l'aide de FSO, mais j'ai assez blablaté pour
l'instant :-)


J'ai aussi fouillé dans les fichiers de Local SettingsTemporary Internet Files mais on ne
récupère que des bribes.



Ca on oublie : le TIF c'est pas TOP :-)

Si vous avez une idée pour résoudre ce genre de problème en VB, VBS, ou autre je suis preneur !


Teddy


Amicalement,

--
Jean - JMST
Belgium





Avatar
MC
Bonsoir !

HTA execCommand


J'avais oublié de penser à utiliser execCommand sous HTA, pour échapper
aux boîtes de dialogues et autres confirmations ; ça ouvre qq
perspectives...

--
@-salutations

Michel Claveau

1 2 3