[R] Ne pas afficher les images avec IE /parser une page HTML

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
SurPriseS
Niveau 6
Niveau 6
Messages : 289
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

[R] Ne pas afficher les images avec IE /parser une page HTML

#1

Message 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 :D)

Pour ce qui est de parser les informations, j'avoue na pas encore avoir chercher :oops: 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 8)
Modifié en dernier par SurPriseS le dim. 09 sept. 2007 16:38, modifié 2 fois.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#2

Message 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
SurPriseS
Niveau 6
Niveau 6
Messages : 289
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

#3

Message par SurPriseS »

Ok, sa revient a désactiver l'affichage complet des images ;) mais bon c'est déjà sa :D 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 :D

Merci beaucoup :D
Plus qu'a parsé :D
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#4

Message par ani »

excuse je n'ai pas encore le jargon que veux tu dire par parser ?
SurPriseS
Niveau 6
Niveau 6
Messages : 289
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

#5

Message 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 :oops: )
Je sais pas trop si je suis clair dans se que je dit :x

Définition de wikipédia :
http://fr.wikipedia.org/wiki/Analyse_syntaxique
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#6

Message 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>
SurPriseS
Niveau 6
Niveau 6
Messages : 289
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

#7

Message par SurPriseS »

Un peu de tout enfaite ;) aussi bien du texte, que des balises...
Et oui tu as bien compris :)
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

#8

Message 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

 
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
SurPriseS
Niveau 6
Niveau 6
Messages : 289
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

#9

Message par SurPriseS »

Je te remercie pour ton code ;) ce seras plus simple pour comprendre :)
Merci beaucoup je vais continuer a étudier sa ;)
SurPriseS
Niveau 6
Niveau 6
Messages : 289
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

#10

Message 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 ;)
Max5
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 11 sept. 2007 19:20
Status : Hors ligne

#11

Message 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. ;)
SurPriseS
Niveau 6
Niveau 6
Messages : 289
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

#12

Message 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.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#13

Message 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 :(
SurPriseS
Niveau 6
Niveau 6
Messages : 289
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

#14

Message 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 :D et oui il y'a beaucoup de fonction intéressante avec les librairies IE faut juste les maitriser :D

edit : j'avais pas tout lu, enfaite le problème c'est que c'est justement le name qu'on cherche ;)
Max5
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 11 sept. 2007 19:20
Status : Hors ligne

#15

Message 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. ;)
SurPriseS
Niveau 6
Niveau 6
Messages : 289
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

#16

Message 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)
Max5
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 11 sept. 2007 19:20
Status : Hors ligne

#17

Message 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.
Modifié en dernier par Max5 le jeu. 13 sept. 2007 11:08, modifié 1 fois.
SurPriseS
Niveau 6
Niveau 6
Messages : 289
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

#18

Message 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 :)
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#19

Message 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 :D
maintenant code snippet ^^'

j'ai ouvert un post sur le sujet merci de participer ;)

merci :;-)
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#20

Message 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 :/
Répondre