Page 1 sur 1
[R] Ne pas afficher les images avec IE /parser une page HTML
Posté : sam. 08 sept. 2007 18:28
par SurPriseS
Bonjour,
Bon le titre peut surprendre mais bon ^^, je taff sur un script qui doit se connecter a un site pour faire diverses actions. Bref le script récupère juste des infos pour les ressortir ensuite, j'ai réussi a me loger sur le site sans trop de difficulté avec la librairie IE, mais n'étant pas en haut débit j'aurais préférer ne pas lui faire télécharger les images (surtout qu'on ne vois pas la page donc les images ne servent a rien...), j'ai fouillé mais j'ai rien vu la dessus dans la description des fonction IE donc j'ai peur que cela soit impossible (sauf a bloqué directement les images dans ie mais bon y'a plus pratique j'espère

)
Pour ce qui est de parser les informations, j'avoue na pas encore avoir chercher

je profitais du topic pour posé la question en même temps (mais je vais me mettre en quête d'information des maintenant). Si je la met en même temps c'est parce qu'il s'agit du même projet

. Ici le but est donc de récupéré les infos directement dans la pages HTML, pour le moment j'arrive juste a lui faire afficher le contenu entier de la page mais pas encore a lui faire récupéré les info qui m'intéresse. Donc si quelqu'un a une fonction ou un exemple a me montrer
Voila voila
Merci d'avance

Posté : sam. 08 sept. 2007 18:51
par ani
oui y a une astuce faut lire dans le regedit la clé imagedisplay
de de explorer et de l'indiquer sur no
j'ai un exemple donc je le tape tel quel

toggle_image(1) indique a explorer de ne pas indiquer les images
juste après la boucle while 1 le toggle_image() reviend indiquer ON
Code : Tout sélectionner
#include <IE.au3>
Opt("WinTitleMatchMode", 2)
Toggle_Images(1)
$oIE = _IECreate ()
_IENavigate ($oIE, "http:\\www.google.com")
While WinExists("Internet Explorer")
Sleep(250)
WEnd
Toggle_Images()
Func Toggle_Images($On_Off=0)
If $On_Off == 0 Then
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", "Display Inline Images", "REG_SZ", "yes")
Else
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", "Display Inline Images", "REG_SZ", "no")
EndIf
EndFunc ;==>Toggle_Images
Posté : sam. 08 sept. 2007 18:57
par SurPriseS
Ok, sa revient a désactiver l'affichage complet des images

mais bon c'est déjà sa

mais j'avais pas penser que cette valeur étais dans la base de registre... c'étais pourtant logique ^^ Merci en tout cas
Bon j'ai testé sa marche nikel, beaucoup plus rapide a ressortir les info maintenant
Merci beaucoup
Plus qu'a parsé

Posté : sam. 08 sept. 2007 19:41
par ani
excuse je n'ai pas encore le jargon que veux tu dire par parser ?
Posté : sam. 08 sept. 2007 19:46
par SurPriseS
Euh, ranger la page pour en ressortir les infos, enfin c'est comme sa que je le connais (mais bon je suis plutôt orienté réseau, la prog c'est pas trop mon fort donc j'utilise peut être se mot a tord

)
Je sais pas trop si je suis clair dans se que je dit
Définition de wikipédia :
http://fr.wikipedia.org/wiki/Analyse_syntaxique
Posté : sam. 08 sept. 2007 20:08
par ani
ok
une analyse de text (format html) que sa soit le text ou la source
extraire des partie (des block)
j'ai compris çà ?
tu veux recup quoi ? balise html ? text ? css ?
titre <h1> h6 |>
le<head>
Posté : sam. 08 sept. 2007 20:10
par SurPriseS
Un peu de tout enfaite

aussi bien du texte, que des balises...
Et oui tu as bien compris

Posté : sam. 08 sept. 2007 20:45
par sylvanie
pour les extractions d'info, va falloir passer par les fonctions de type stringinstr, stringregexp ...
par exemple en voici un que j'ai fait, qui retrouve le nombre de messages postés sur ce forum, et qui me fait un popu si il y a du nouveau :
Code : Tout sélectionner
If FileExists ( @tempdir& " \indexautoit.txt " ) = = 0 Then
$fic = FileOpen ( @tempdir& " \indexautoit.txt " , 2 )
$index = 0
Else
$fic = FileOpen ( @tempdir& " \indexautoit.txt " , 0 )
$index = FileReadLine ( $fic )
EndIf
FileClose ( $fic )
$line = " "
while 1
InetGet ( " http://www.autoitscript.fr/index.php " , @TempDir& " \autoit.htm " , 1 , 0 )
If ( @error ) Then
MsgBox ( 16 , " Erreur " , " Impossible de joindre l'url " )
Exit 1
EndIf
$fic = FileOpen ( @TempDir& " \autoit.htm " , 0 )
$line = FileRead ( $fic , FileGetSize ( @TempDir& " \autoit.htm " ) )
FileClose ( $fic )
$nOffset = 1
$nb = StringRegExp ( $line , 'posté un total de <b> ( [\d] + ) <' , 1 , $nOffset )
If @error = 2 Then
MsgBox ( 0 , " Erreur " , " Problème lors de la lecture du nbr de messages " )
Exit 1
EndIf
$nb = $nb[0]
If $nb <> $index Then
MsgBox ( 48 , " Autoit " , " Nouveau ( x ) Message ( s ) " )
$fic = FileOpen ( @tempdir& " \indexautoit.txt " , 2 )
FileWrite ( $fic , $nb )
FileClose ( $fic )
$index = $nb
EndIf
sleep ( 60000 )
WEnd
Posté : sam. 08 sept. 2007 20:53
par SurPriseS
Je te remercie pour ton code

ce seras plus simple pour comprendre
Merci beaucoup je vais continuer a étudier sa

Posté : dim. 09 sept. 2007 16:37
par SurPriseS
Bon j'ai réussi a parser mes info comme je le voulais :p et avec une autre méthode que celle proposé par sylvanie donc je la post ici :
Code : Tout sélectionner
$oInputs = _IETagNameGetCollection ( $oIE , " input " )
For $oInput In $oInputs
if $oInput.maxlength = 15 then
$oologin = $oInput.name
ElseIf $oInput.maxlength = 20 then
$oopassword = $oInput.name
endif
Next
Pour résumé :
- On cherche les tag Input
- On boucle dessus et on cherche ceux qui on un maxlenght = 15 et = 20
- On place ensuite le name de l'input trouvé dans la bonne variable
Vala

Posté : mar. 11 sept. 2007 19:50
par Max5
SurPriseS a écrit :
Pour résumé :
- On cherche les tag Input
- On boucle dessus et on cherche ceux qui on un maxlenght = 15 et = 20
- On place ensuite le name de l'input trouvé dans la bonne variable
Vala

Ca marche peut-etre dans ton cas mais si plusieur input avec le meme nombre de
maxlenght se trouve dans une page ce que tu récupere est érronné.
Pour parser un document (text, source html...etc), il faut travailler avec les expression régulières qui sont hyper puissante pour cela quand on les maitrise.

Posté : mer. 12 sept. 2007 13:12
par SurPriseS
Oui oui je sais bien que sa marche au moins dans mon cas

pour les regex je galère a les utiliser sous autoit, sa marche jamais comme je veux et je comprend jamais pourquoi sa marche pas =( Donc si tu as des documents qui détails plus l'utilisation des regex que dans l'aide d'autoit, je suis preneur

bref pour au moins la partie qui m'intéresse, j'avais la chance d'avoir des value différentes dans les 2 valeurs que je voulais récupéré

donc tout bénef pour moi.
Posté : mer. 12 sept. 2007 13:21
par ani
on va ouvrir un post special regex moi aussi ca m'interresse et il vrai que c'est hyper puissant (plus rapide).
mais sa serai bien d'avoir plus d'exemple que du jargon à rien comprendre ^^'
dans l'include d'ie t'a un peu de tout iedochtml iereadhtml (je fait çà de mémoire sa doit etre erroné ^^')
je fait pas avancer le chmilblik ^__^
le code ci dessous avec maxlengt c'est pourquoi ?
en faite tu recherche juste les case name et password ?
comme pour une connection automatique ?
IEFormGetObjByName et la tu recherche name et password enfin je crois sa fait un bail que j'ai plus fait un truc avec ie

Posté : mer. 12 sept. 2007 13:32
par SurPriseS
C'est exactement sa

c'est une connexion automatique a un site presque sécurisé

, il change le nom des champs toutes les 24H donc il faut les récupéré pour pouvoir se loguer

vala

Et par chance il utilise pas le même maxlenght pour la partie login et password donc super simple a récupérer même pour un boulay comme moi

et oui il y'a beaucoup de fonction intéressante avec les librairies IE faut juste les maitriser
edit : j'avais pas tout lu, enfaite le problème c'est que c'est justement le name qu'on cherche

Posté : mer. 12 sept. 2007 20:34
par Max5
SurPriseS a écrit :Donc si tu as des documents qui détails plus l'utilisation des regex que dans l'aide d'autoit, je suis preneur

L'aide d'autoit est trés complete et trés bien expliquer je trouve et c'est avec elle que j'ai appri a les maitriser, bon c'est sur que pour ceux qui parle pas anglais... c'est moyen.
Il y a cet article sur les forum de ccm qui explique pas trop mal sinon :
http://www.commentcamarche.net/php/phpreg.php3
C'est pour du php mais les regexp sont les meme que ça soit sous php, autoit... python...etc
Et c'est expliqué en français.

Posté : jeu. 13 sept. 2007 10:35
par SurPriseS
Je te remercie pour le lien, je crois que je l'avais déjà trouvé quand je mettais mis au php

pour se qui est de l'aide d'autoit :s c'est pas quelle soit en anglais le problème c'est que je trouve que sa manque d'exemple :\
Mon problème reste que je sais jamais si je fait correctement ma regex :
exemple :
Code : Tout sélectionner
For $oInput In $oInputs
if StringCompare ($oInput.href , "URL" & "^.{6}$" ) = 0 then
GUICtrlCreateLabel($oInput.innerHTML ,20,$y)
$y = $y + 20
EndIf
Next
L'url du site resemble a un un truc comme sa :
http://machin.com/plop.php?test=123456
Enfaite je veux testé qu'après le = de l'url on est bien une série de 6 chiffre et si oui d'afficher le titre du lien. Mais enfaite j'ai l'impression que sa marche pas avec stringcompare, j'ai essayer plein de méthode différente pour le regex (et même avec celle plus haut sa ne fonctionne pas)
Posté : jeu. 13 sept. 2007 11:03
par Max5
SurPriseS a écrit :
Enfaite je veux testé qu'après le = de l'url on est bien une série de 6 chiffre
A ce moment là pour bien ciblé tes 6 chiffre :
Exemple:
Code : Tout sélectionner
$URL = "http://machin.com/plop.php?test=123456"
$Test6Chiffre = StringRegExp($URL, "(?:http://.*?=)([0-9]{6})", 3)
MsgBox(0, "", $Test6Chiffre[0])
Le msgbox affichera les 6 chifre présent aprés le "=". Si aprés le = il n'y a pas de suite de 6 chiffre alors il y aura une erreur "
Subscript used with non-Array variable". Aprés a toi de l'adapter avec tes conditions "If".
Meme si c'est payant, il te faudrais Regexbuddy :
http://www.regexbuddy.com/
On peut avoir une version d'essai et il est trés bien pour apprendre les expression reguliere.
Posté : jeu. 13 sept. 2007 11:05
par SurPriseS
Ok donc c'est bien ma fonction qui étais pas bonne

et qui ne gère visiblement pas les regex

Je te remercie je vais testé sa dessuite

Posté : jeu. 13 sept. 2007 13:10
par ani
est-ce juste = (?:http://.*?=)(\d{6})
\d = digit (tout ce qui sera chiffre)
{} nombre de caractère en répetition ?
pas mal l'outils que tu propose max5, je visionne les video et c'est justement ce qui me faudrait (l'outils qui simplifie mais faut bien maitriser l'outils apparement

))
alternative
C:\Program Files\AutoIt3\Examples\Helpfile\StringRegExpGUI.au3
seul parttern : (.*?)
je dispose de la version v3.2.4.2 (oui toujours pas à jour)
fonctionnant avec un fichier ini pour le rajout de parttern()
avec des exemple on comprend un peu mieux

maintenant code snippet ^^'
j'ai ouvert un post sur le sujet merci de participer
merci :;-)
Posté : mer. 19 sept. 2007 16:10
par ani
si ca ne va pas, n'hésite surtout pas.
a la place de ce soft qui est payant tu as la possibilité de trouver regulator sur sourceforge projet gratuit /ou textcrawler ou encore le script stringregexpGui
je tesst regulator :/