[Ex] Récupération infos page WEB (Dates forum)

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

[Ex] Récupération infos page WEB (Dates forum)

#1

Message par Tlem »

Je ne suis pas très familier avec la manipulation des pages Web ainsi que des objets, mais voici un code qui permet de se logger sur le forum; de récupérer la date du forum ainsi que la date de la dernière visite.

Il est sans doute possible de faire plus simple, mais cela permettra de donner des idées à ceux qui en aurait besoin. ;)

Évidement il vous faudra remplacer les valeurs des variables $Login et $Passwd par vos paramètres de connexion au forum. 8)

Code : Tout sélectionner

#include <IE.au3>

$Login = "Name"
$Passwd = "password"
$VoirLaPage = 0
$Res = ""


$oIE = _IECreate("http://www.autoitscript.fr/forum/index.php", 0, $VoirLaPage)

; Les 2 lignes qui suivent permettent de vérifier si on est déjà loggé ou non
$oDiv = _IEGetObjById($oIE, "wrapcentre") ; Recherche objet DIV avec ID wrapcentre
If StringInStr(_IEPropertyGet($oDiv, "innertext"), "Nom d’utilisateur") Then

    $oForm = _IEFormGetCollection($oIE, 0) ; Récupération de la collection d'objets
    $oLogin = _IEFormElementGetCollection($oForm, 0) ; Remplit l'objet N°0
    _IEFormElementSetValue($oLogin, $Login) ; On envoi le login
    $oPasswd = _IEFormElementGetCollection($oForm, 1) ; Remplit l'objet N°1
    _IEFormElementSetValue($oPasswd, $Passwd) ; On envoi le passwd

    $oSubmit = _IEFormElementGetCollection($oForm, 3) ; Clique l'objet N°3
    _IEAction($oSubmit, "click") ; On clique sur l'objet
    Sleep(1000) ; Pause de 1s

    ; Boucle d'attente du chargement de la page d'index
    While 1
        $Res = _IEPropertyGet($oIE, "title") ; Récupère le titre de la page
        If StringInStr($Res, "Page d’index") Then ExitLoop ; Si Page d'index on sort de la boucle
    WEnd
EndIf
Sleep(500) ; Pause 500 ms

; ######################## Récupération de la date courante du forum ########################
$oDiv = _IEGetObjById($oIE, "menubar") ; Recherche objet DIV avec ID menubar
$Res = _IEPropertyGet($oDiv, "innertext") ; Récupère le texte de l'objet

$Res = StringSplit($Res, "Nous sommes le ", 1) ; Découpe la chaine

MsgBox(64, "Info", "La date du forum est : " & @CRLF & $Res[2]) ; Affiche la date du forum
; ###########################################################################################


; #################### Récupération de la date de la dernière connexion #####################
$oDiv = _IEGetObjById($oIE, "datebar") ; Recherche objet DIV avec ID menubar
$Res = _IEPropertyGet($oDiv, "innertext") ; Récupère le texte de l'objet

$Res = StringSplit($Res, "Dernière visite le ", 1) ; Découpe la chaine
$Res = StringSplit($Res[2], "Voir les messages", 1) ; Découpe la chaine

MsgBox(64, "Info", "La date de la dernière visite est : " & @CRLF & $Res[1]) ; Affiche la date de la dernière visite
; ###########################################################################################


_IEQuit($oIE) ; On Ferme la page
Exit
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Ex] Récupération infos page WEB (Dates forum)

#2

Message par timmalos »

Me revoilà everybody: Quelques petites suggestions:
Je remplacerai :

Code : Tout sélectionner

Sleep(1000) ; Pause de 1s

    ; Boucle d'attente du chargement de la page d'index
    While 1
        $Res = _IEPropertyGet($oIE, "title") ; Récupère le titre de la page
        If StringInStr($Res, "Page d’index") Then ExitLoop ; Si Page d'index on sort de la boucle
    WEnd
Par un _IELoadWait()
et

_IEAction($oSubmit, "click")
Par un _IEFormSubmit($oForm) si ca marche.(Plus rapide)
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [Ex] Récupération infos page WEB (Dates forum)

#3

Message par ani »

le post fut vu 28 fois et personne ne réagit ?

le premier msgbox retournera 0 , pour la simple et bonne raison que l'objet menubar n'existe plus lors de la connection elle est remplacé par datebar

et me semble que cette ligne ne doit pas figurer dans cette exemple
$Res = StringSplit($Res[2], "Voir les messages", 1)
on peut passer aussi par les noms de l'objet exemple

Code : Tout sélectionner

$oName = _IEGetObjByName($oIE, "username")
$oPass = _IEGetObjByName($oIE, "password")
$oClick = _IEGetObjByName($oIE, "login")
_IEFormElementSetValue($oName,$login )
_IEFormElementSetValue($oPass, $passwd)
_IEAction($oClick,"click")
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Récupération infos page WEB (Dates forum)

#4

Message par Tlem »

Le _IELoadWait() est intéressent, mais selon la durée de chargement de la page, cela peut ne pas fonctionner puisqu'il faut attendre que la page loggée soit affichée et donc selon la pause qui à été mise, il peut y avoir dépassement.

Pour _IEFormSubmit($oForm), j'avais voulu passer comme ça au début, mais ça ne fonctionne pas.
Donc je m'était rabattu sur le _IEAction($oSubmit, "click") de l'objet Connexion. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Récupération infos page WEB (Dates forum)

#5

Message par Tlem »

ani a écrit :le premier msgbox retournera 0 , pour la simple et bonne raison que l'objet menubar n'existe plus lors de la connection elle est remplacé par datebar
C'est bien pour ca que je fait

Code : Tout sélectionner

If StringInStr(_IEPropertyGet($oDiv, "innertext"), "Nom d’utilisateur")
en début de script. C'est pour vérifier si on est connecté ou non.

Pour l'utilisation des noms d'objets, c'est une très bonne idée (je n'avais pas trouvé comment faire).
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [Ex] Récupération infos page WEB (Dates forum)

#6

Message par ani »

ok, en faite j'ai pas testé le script, y a un caractère a retirer dans le dernier msgbox
MsgBox(64, "Info", "La date de la dernière visite est : " & _@CRLF

je vais tester, mais je suis sur que la premiere msgbox va me sortir une erreur ;)
la msgbox se trouve en dehors de la boucle ?

JE RE
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Récupération infos page WEB (Dates forum)

#7

Message par Tlem »

Pour le caractère parasite c'est corrigé (c'était un saut de ligne).

Pour l'erreur de la MsgBox, c'est effectivement une possibilité, mais seulement si la première condition n'est pas exécutée, car sinon on est loggé et donc les objets sont récupérés.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Max5
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 11 sept. 2007 19:20
Status : Hors ligne

Re: [Ex] Récupération infos page WEB (Dates forum)

#8

Message par Max5 »

Script intéressant.

Pour ma part, j'aurais utilisé le nom des inputs directement plutôt que de passer par des collections, c'est plus sur.

De même, j'aurais récupéré les dates (actuelle et dernière visite) par expressions régulières c'est la aussi plus sur et qui plus est rapide et efficace. ;)

Voici un exemple de comment je m'y serais pris : (mettre vos propre identifiant évidemment ^^)

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

Opt("GUIOnEventMode", 1)

$fenetre = GUICreate("Connexion Autoitscript.fr", 793, 574, 193, 115)
GUISetOnEvent($GUI_EVENT_CLOSE, "fenetre_fermer")
$oIE = ObjCreate("Shell.Explorer.2")
$oIE_ctrl = GUICtrlCreateObj($oIE, 8, 8, 778, 556)
GUISetState(@SW_SHOW)

Connexion("toto", "123456789")

While 1
    Sleep(100)
WEnd

Func fenetre_fermer()
    Exit
EndFunc

Func Connexion($sLogin, $sPswd)
    
    _IENavigate($oIE, "http://www.autoitscript.fr/forum/", 0)
    Do
        Sleep(100)
    Until $oIE.Busy = False
    
    If StringInStr(_IEDocReadHTML($oIE), "Déconnexion") = 0 Then
        
        $Formulaire = _IEFormGetCollection($oIE, 0)
        
        $Input_Username = _IEFormElementGetObjByName($Formulaire, "username")
        _IEFormElementSetValue($Input_Username, $sLogin)
        
        $Input_Password = _IEFormElementGetObjByName($Formulaire, "password")
        _IEFormElementSetValue($Input_Password, $sPswd)
        
        $Login_Button = _IEFormElementGetObjByName($Formulaire, "login")
        _IEAction($Login_Button, "click")
        Sleep(250)
        Do
            Sleep(100)
        Until $oIE.Busy = False
        
        If Not StringInStr(_IEDocReadHTML($oIE), "Déconnexion") =0 Then
            
            $source_htnl = _IEDocReadHTML($oIE)
            
            $Time_Regex = StringRegExp($source_htnl, "(Nous sommes.*?)<", 3)
            If Not @error Then
                $Temps = $Time_Regex[0]
            Else
                $Temps = "erreur en parsant la date"
            EndIf
            
            $LastVisit_Regex = StringRegExp($source_htnl, "(Dernière visite.*?)<", 3)
            If Not @error Then
                $derniere_visite = $LastVisit_Regex[0]
            Else
                $derniere_visite = "erreur en parsant la date de dernière visite"
            EndIf
            
            
            MsgBox(64, "Connexion OK", "Loggé en tant que " & $sLogin & @CRLF & $Temps & @CRLF & $derniere_visite)
            
        Else
            MsgBox(16, "Pas loggé", "echec connexion")
        EndIf
    Else
        MsgBox(64, "Pas besoin", "Déjà loggé")
    EndIf
    
EndFunc
 
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Récupération infos page WEB (Dates forum)

#9

Message par Tlem »

Ça m'a tout l'air impeccable. Image
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre