Page 1 sur 2
[R] StringRegExp simple qui ne fonctionne pas
Posté : mar. 01 juil. 2014 21:50
par Utilisateur 3309 supprimé
Bonjour,
j'essaie de récupérer les noms des sociétés issues de cette page HTML:
http://www.pagespro.com/resultats/trans ... e-du-beton
j'ai déjà fait plein de programmes avec StringRegExp sans aucun problème, et la je ne vois vraiment pas pourquoi je ne récupère rien du tout...
il y a 10 résultats dans la page, et le nom de la société se trouve entre les 2 balises HTML:
<span itemprop="name"> et
</span>
Quelqu'un peut-il m'eclairer ???
Merci
Code : Tout sélectionner
#include <IE.au3>
Local $oIE = _IECreate("http://www.pagespro.com/resultats/transport-et-mise-en-oeuvre-du-beton")
Local $sHTML = _IEBodyReadHTML($oIE)
$res = StringRegExp($sHTML, '<span itemprop="name">(.*)</span>', 3)
_IEQuit($oIE)
if ubound($res)>0 then
msgbox (0,"Résultat","Trouvé = " & ubound($res))
Else
msgbox (0,"Résultat","Rien trouvé")
EndIf
Re: [..] StringRegExp simple qui ne fonctionne pas
Posté : mar. 01 juil. 2014 22:27
par mikell
Attention aux retours à la ligne
Utilise Inet plutôt que IE, et "if IsArray($res) then"
Code : Tout sélectionner
#Include <Array.au3>
$txt = BinaryToString(InetRead("http://www.pagespro.com/resultats/transport-et-mise-en-oeuvre-du-beton"))
$res = StringRegExp($txt, '(?s)<span itemprop="name">\s*(.*?)\s*</span>', 3)
if IsArray($res) then
For $i = 0 to ubound($res)-1
$res[$i] = StringRegExpReplace($res[$i], '\h* ', " ")
Next
_ArrayDisplay($res)
; msgbox (0,"Résultat","Trouvé = " & ubound($res))
Else
msgbox (0,"Résultat","Rien trouvé")
EndIf
Re: [..] StringRegExp simple qui ne fonctionne pas
Posté : mar. 01 juil. 2014 23:17
par Utilisateur 3309 supprimé
Super ca marche !
mikell a écrit :
Utilise Inet plutôt que IE, et "if IsArray($res) then"
peux-tu expliquer STP pourquoi ? c'est plus rapide ?
Re: [..] StringRegExp simple qui ne fonctionne pas
Posté : mer. 02 juil. 2014 09:27
par mikell
Si tu tries le contenu de ta page au regex INet est beaucoup plus rapide pour récupérer le code source, et plus léger puisque tu n'as pas à lancer IE
Choisir les fonctions _IE* c'est choisir une solution plus lourde et plus lente mais plus sûre, qui te met davantage à l'abri de certaines variations éventuelles dans le code source
Code : Tout sélectionner
#include <IE.au3>
Local $oIE = _IECreate("http://www.pagespro.com/resultats/transport-et-mise-en-oeuvre-du-beton")
$oSpans = _IETagNameGetCollection($oIE, "span")
Local $txt
For $oSpan in $oSpans
If $oSpan.getattribute("itemprop") = "name" Then $txt &= $oSpan.innertext & @crlf
Next
_IEQuit($oIE)
msgbox (0,"Résultat",$txt)
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : mer. 02 juil. 2014 11:11
par Utilisateur 3309 supprimé
OK j'ai compris pour INET
et pour ce qui est du "if IsArray($res) then" par rapport à "if ubound($res)>0 then" ??
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : mer. 02 juil. 2014 14:25
par mikell
ça dépend de ce que tu veux vérifier (erreur ou array vide)
Dans ce cas pour un résultat de regex il se trouve que ça revient au même, mais sinon un UBound($res)=0 ne veut pas forcément dire erreur d'array
Code : Tout sélectionner
Dim $res[0]
Msgbox(0,"", Execute(IsArray($res)=1))
Msgbox(0,"", Execute(UBound($res)>0))
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : mer. 02 juil. 2014 16:46
par Utilisateur 3309 supprimé
c'est compris, merci pour l'aide !

Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : ven. 18 juil. 2014 09:47
par Utilisateur 3309 supprimé
Mikell, j'essaie le code ci-dessous et je ne comprends pas pourquoi mais il fonctionne 1x sur 10...
la 1ere fois il marche, je click OK dans le msgbox puis je relance le script et là j'ai une erreur:
j'ai remarqué que quand j'ai un Internet explorer d'ouvert je n'ai pas d'erreur. par contre quand je n'ai aucune fenêtre internet explorer d'ouvert, j'ai le message d'erreur dès la 2eme lancement du script et l'erreur apparait sans que la page internet n'ai été ouverte...
J'utilise la version du 3.3.12 du pack FR de Tlem, et je viens d'installer la dernière beta d'autoit et le problème apparait toujours...
je ne comprends pas pourquoi il y a cette erreur aléatoire...
Code : Tout sélectionner
#include <IE.au3>
Local $oIE = _IECreate("http://www.pagespro.com/resultats/transport-et-mise-en-oeuvre-du-beton")
$oSpans = _IETagNameGetCollection($oIE, "span")
Local $txt
For $oSpan in $oSpans
If $oSpan.getattribute("itemprop") = "name" Then $txt &= $oSpan.innertext & @crlf
Next
_IEQuit($oIE)
msgbox (0,"Résultat",$txt)
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : ven. 18 juil. 2014 13:35
par mikell
Ah les humeurs de IE
Essaie ProcessClose("iexplore.exe") en fin de script
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : ven. 18 juil. 2014 14:20
par Utilisateur 3309 supprimé
ca marche ! merci !
par contre quand j'ouvre internet explorer après ca, j'ai droit a un message comme quoi IE ne s'est pas fermé correctement et si je veux restaurer la session. donc ca marche mais on a vu "plus propre" lol

Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : ven. 18 juil. 2014 14:57
par orax
Je ne comprends pas le processClose(). L'erreur se produit avant.
► Afficher le texte
Code : Tout sélectionner
#include <MsgBoxConstants.au3>
#include <IE.au3>
Local $oIE = _IECreate("http://www.pagespro.com/resultats/transport-et-mise-en-oeuvre-du-beton")
$oSpans = _IETagNameGetCollection($oIE, "span")
; SetError(1) désolé, j'avais oublié de l'enlever !!
If @error Then
MsgBox($MB_ICONERROR, Default, StringFormat("%s\r\n@error : %s\r\n@extended : %s", "Impossible de récupérer les éléments sur la page.", @error, @extended))
;~ _IEQuit($oIE)
Exit -1
EndIf
Local $txt
For $oSpan in $oSpans
If $oSpan.getattribute("itemprop") = "name" Then $txt &= $oSpan.innertext & @crlf
Next
_IEQuit($oIE)
MsgBox($MB_OK, "Résultat", $txt)
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : ven. 18 juil. 2014 20:15
par mikell
orax a écrit :Je ne comprends pas le processClose()
orax, je vais être parfaitement honnête avec toi : moi non plus
J'avais peu de temps entre midi et 2 alors j'ai raisonné de manière bassement empirique en me basant sur le message de cetipabo :
"j'ai remarqué que quand j'ai un Internet explorer d'ouvert je n'ai pas d'erreur"
"j'ai le message d'erreur dès la 2eme lancement du script"
"l'erreur apparait sans que la page internet n'ai été ouverte"
Tout ça sent le processus mal refermé, mais pas moyen de tester avec mes XP et IE 8 vu que le code fonctionnait sans pb chez moi ^^
@cetipabo
Je suis d'accord c'est pas très propre... elle te plait pas ma solution d'avant avec InetRead ?
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : sam. 19 juil. 2014 17:39
par Utilisateur 3309 supprimé
les 2 solutions me plaisent. la 1ere parce qu'elle marche parfaitement. la 2eme parce qu'elle est tres interessante et j'étaits justement en train de l'étudier mais avec ces erreurs étranges ca saoul un peu...
@orax
j'ai essayé ton script, mais j'ai systematiquement le message d'erreur "impossible de récupéré les éléments sur la page".
la 1ere fois IE s'ouvre, puis j'ai le message d'erreur. et ensuite j'ai le message d'erreur sans qu'IE ne s'ouvre...
Je suis sous WIN7 64 avec IE11 à jour.
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : sam. 19 juil. 2014 18:21
par orax
C'est normal, j'avais piégé mon code ! J'avais laissé un SetError(1). Mais ce n'était pas volontaire, c'était pour tester un truc et j'avais complètement oublié de l'enlever !

J'ai modifié mon code.
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : sam. 19 juil. 2014 19:28
par mikell
cetipabo a écrit :... et ensuite j'ai le message d'erreur sans qu'IE ne s'ouvre
Hum hum...

Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : dim. 20 juil. 2014 20:51
par Utilisateur 3309 supprimé
ben avec le code modifié j'ai:
erreur: 3
extended : 1
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : dim. 20 juil. 2014 21:41
par mikell
[mode pure curiosité malsaine ON]
Tu pourrais essayer de rajouter ça juste sous le _IECreate ?
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : lun. 21 juil. 2014 10:58
par Utilisateur 3309 supprimé
ok je fais ca dès que je suis chez mio.
Par contre avez vous pu reproduire le problème chez vous ? ou je suis le seul ?
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : lun. 21 juil. 2014 21:20
par Utilisateur 3309 supprimé
mikell a écrit :[mode pure curiosité malsaine ON]
Tu pourrais essayer de rajouter ça juste sous le _IECreate ?
Au 1er coup ca marche, ensuite j'ai cette erreur systématique:
si j'attend 30 secondes et que je relance le script ca marche...sinon même erreur à chaque fois, c'est fou ça !!
Re: [R] StringRegExp simple qui ne fonctionne pas
Posté : lun. 21 juil. 2014 22:20
par mikell
Arf
OK ça se précise, autre essai : mettre ça en tout début de script (juste sous l'include)