#include <StringConstants.au3>
#include <WinHttp.au3>
Local $aArray = 0, _
$iOffset = 1
$source = '<form name="turlututu" action="go_laba"><input name="tutu"><input name="toto"></form><form name="youyou" action="go_ici"><input name="titi"></form>'
;$source = HttpPost("http://www.enseignement.polytechnique.fr/informatique/profs/Olivier.Serre/Memos/Formulaires_CSS/index.html", "")
Func recup($choix)
While 1
$FORM = StringRegExp($source, '<form (.*?)>', $STR_REGEXPARRAYMATCH, $iOffset)
If @error Then ExitLoop
$iOffset = @extended
For $a = 0 To UBound($FORM) - 1
$FORM_NAME = StringRegExp($FORM[$a], 'name="(.*?)"', $STR_REGEXPARRAYGLOBALMATCH)
If UBound($FORM_NAME) <> 0 Then
$FORM_NAME = StringRegExp($FORM[$a], 'name="(.*?)"', $STR_REGEXPARRAYGLOBALMATCH)
Else
$FORM_NAME = StringRegExp($FORM[$a], 'action="(.*?)"', $STR_REGEXPARRAYGLOBALMATCH)
EndIf
For $b = 0 To UBound($FORM_NAME) - 1
If $choix == "" Then
; NOM DU FORMULAIRE
MsgBox(0, "", $FORM_NAME[$a])
ElseIf $FORM_NAME[$b]==$choix Then
$FORM_CONTENT = StringRegExp($source, '<form(.*?)</form>', $STR_REGEXPARRAYGLOBALMATCH)
MsgBox(0, "", UBound($FORM_CONTENT))
For $c = 0 To UBound($FORM_CONTENT) - 1
$INPUT_CONTENT = StringRegExp($FORM_CONTENT[$c], '<input(.*?)>', $STR_REGEXPARRAYGLOBALMATCH)
$tutu = StringInStr ( $FORM_CONTENT[$c], $choix)
If StringInStr ( $FORM_CONTENT[$c], $choix) then
For $d = 0 To UBound($INPUT_CONTENT) - 1
$INPUT_NAME = StringRegExp($INPUT_CONTENT[$d], 'name="(.*?)"', $STR_REGEXPARRAYGLOBALMATCH)
For $e = 0 To UBound($INPUT_NAME) - 1
; NOM DES INPUTS
MsgBox(0, "", $INPUT_NAME[$e])
Next
Next
EndIf
Next
EndIf
Next
Next
WEnd
EndFunc
recup('')
recup('turlututu')
Le script si dessus fonctionne comme je le souhaite avec la source qui n'est pas commenté. Par contre lorsque je le test avec la source commenté les regex ne font pas leur travaille.
Une idée sur le pourquoi ?
Réponse de mikell : Mauvaise regex
Quelqu'un pourrais m'aider pour corriger mes regex?
Je souhaiterais capturer le nom des formulaires ou leur action dans un premier temps puis le nom des input.
(.*?) sinifie pourtant bien : un caractére (.) trouvé 0 ou plusieurs fois (*) qui peut ou non étre présent (?) ?
Modifié en dernier par Sepular le dim. 09 août 2015 23:45, modifié 5 fois.
D'où elle sort cette fonction HttpPost() ?
Un coup d'oeil rapide à la source montre que le problème vient des regex (la string de test n'est pas représentative)
Ha mais en plus les input ne sont pas nommé.
Ha les regex sont pas bonne et vu que je suis une .... sur le sujet je suis pas sortit de l'auberge.
Merci.
PS: le httpost viens du WinHttp.au3
Modifié en dernier par Sepular le sam. 08 août 2015 23:29, modifié 1 fois.
#include-once
Global Const $HTTP_STATUS_OK = 200
Func HttpPost($sURL, $sData = "")
Local $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("POST", $sURL, False)
If (@error) Then Return SetError(1, 0, 0)
$oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oHTTP.Send($sData)
If (@error) Then Return SetError(2, 0, 0)
If ($oHTTP.Status <> $HTTP_STATUS_OK) Then Return SetError(3, 0, 0)
Return SetError(0, 0, $oHTTP.ResponseText)
EndFunc
Func HttpGet($sURL, $sData = "")
Local $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", $sURL & "?" & $sData, False)
If (@error) Then Return SetError(1, 0, 0)
$oHTTP.Send()
If (@error) Then Return SetError(2, 0, 0)
If ($oHTTP.Status <> $HTTP_STATUS_OK) Then Return SetError(3, 0, 0)
Return SetError(0, 0, $oHTTP.ResponseText)
EndFunc
et pour les regex je souhaiterais récupérer tout ce qu'il se trouve entre les balises que j'indique mais sans aide je n'y arriverais pas.
J'ai essayé plusieurs fois mais je me suis démotivé.
Oui il est vrai mais j'ai l'intention de poster le formulaire après avoir fait mon petit micmac que je pourrais faire a la main en affichant le code source.
J'avais déjà terminer mon projet final il tourné bien mais n'ayant rien a faire et aimant me compliqué la vie je me suis dis "et pourquoi je le rendrait pas un peu plus flexible" et me voila partit lol.
Il y a de retours à la ligne donc tu dois utiliser l'option (?s)
Voilà un exemple de base adapté à ton url mais je vois pas bien à quoi ça peut te servir, du moins sur ce site ^^
Bon alors votre code me sors bien les actions, mais je ne comprend toujours pas les regex utilisées et pourtant je viens de me manger une pataraphe de tuto dessus mais y'a pas moyen je pige pas tout.
Bon bref cela étant merci pour m'avoir aidé un peu même si le code n'a plus la "fonction" pour me sortir les input une fois les formulaires identifié et choisi par l'utilisateur.
Je regarde a ça mais ne passe pas encore en résolu.
PS: j'aimerai vraiment faire abstraction des fieldset et des legend pour n'utiliser que les form et les input dans le code. histoire de faire plus compatible a n'importe quel formulaire. Je ne cherche pas a utiliser la source donner, c'était juste un exemple pour moi tester le script.
j'ai visiter et testé plein de chose dessus http://regex101.com
parfait d'ailleurs pour tester mais pas simple du coup lorsque l'on tâtonne
Et je ne possède pas StringRegAxp dans le fichier d'aide de autoit en tout cas.
je v m'instruire dessus car les regex sont vraiment très puissante, et je suis presque sur de pouvoir encore réduire ma fonction même si elle fonctionne très bien désormais.