[R] StringRegExp simple qui ne fonctionne pas

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Utilisateur 3309 supprimé
Status : Hors ligne

[R] StringRegExp simple qui ne fonctionne pas

#1

Message 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
Modifié en dernier par Utilisateur 3309 supprimé le mer. 02 juil. 2014 11:08, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] StringRegExp simple qui ne fonctionne pas

#2

Message par mikell »

Attention aux retours à la ligne

Code : Tout sélectionner

<span itemprop="name">
        Bécome     &nbsp;(SA)      </span>
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*&nbsp;', " ")
   Next
    _ArrayDisplay($res)
  ;  msgbox (0,"Résultat","Trouvé = " & ubound($res))
Else
    msgbox (0,"Résultat","Rien trouvé")
EndIf
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [..] StringRegExp simple qui ne fonctionne pas  

#3

Message par Utilisateur 3309 supprimé »

Super ca marche ! :wink:
mikell a écrit : Utilise Inet plutôt que IE, et "if IsArray($res) then"
peux-tu expliquer STP pourquoi ? c'est plus rapide ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] StringRegExp simple qui ne fonctionne pas

#4

Message 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)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#5

Message par Utilisateur 3309 supprimé »

OK j'ai compris pour INET 8)
et pour ce qui est du "if IsArray($res) then" par rapport à "if ubound($res)>0 then" ??
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#6

Message 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))
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#7

Message par Utilisateur 3309 supprimé »

c'est compris, merci pour l'aide ! 8)
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#8

Message 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:
Image

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)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#9

Message par mikell »

Ah les humeurs de IE :roll:
Essaie ProcessClose("iexplore.exe") en fin de script
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#10

Message 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 :lol:
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#11

Message par orax »

Je ne comprends pas le processClose(). L'erreur se produit avant.
► Afficher le texte
Modifié en dernier par orax le sam. 19 juil. 2014 18:16, modifié 1 fois.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#12

Message par mikell »

orax a écrit :Je ne comprends pas le processClose()
orax, je vais être parfaitement honnête avec toi : moi non plus :mrgreen:

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 ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#13

Message 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.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#14

Message 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 ! Image
J'ai modifié mon code.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#15

Message par mikell »

cetipabo a écrit :... et ensuite j'ai le message d'erreur sans qu'IE ne s'ouvre
Hum hum... :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#16

Message par Utilisateur 3309 supprimé »

ben avec le code modifié j'ai:
erreur: 3
extended : 1
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#17

Message par mikell »

[mode pure curiosité malsaine ON]
Tu pourrais essayer de rajouter ça juste sous le _IECreate ?

Code : Tout sélectionner

While $oIE.Busy
   Sleep(10)
Wend
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#18

Message 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 ?
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#19

Message par Utilisateur 3309 supprimé »

mikell a écrit :[mode pure curiosité malsaine ON]
Tu pourrais essayer de rajouter ça juste sous le _IECreate ?

Code : Tout sélectionner

While $oIE.Busy
   Sleep(10)
Wend
Au 1er coup ca marche, ensuite j'ai cette erreur systématique:

Image

si j'attend 30 secondes et que je relance le script ca marche...sinon même erreur à chaque fois, c'est fou ça !!
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] StringRegExp simple qui ne fonctionne pas

#20

Message par mikell »

Arf
OK ça se précise, autre essai : mettre ça en tout début de script (juste sous l'include)

Code : Tout sélectionner

While ProcessExists("iexplore.exe")
   Sleep(10)
Wend
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre