[R] Detection de bug dans un script

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
JIF
Niveau 6
Niveau 6
Messages : 219
Enregistré le : mer. 04 févr. 2009 20:07
Localisation : 84
Status : Hors ligne

[R] Detection de bug dans un script

#1

Message par JIF »

Bonjour a vous tous, voilà je cherche un code de programmation qui me permettrai lorsque mon script ne bouge plus de quitté Mozilla Firefox et que le script ce relance du début. Par exemple le script pourrai procédé comme suite :
dans la zone (200, 300, 500, 600) il n'y a pas eu de changement depuis 2 minute donc je quitte toute les pages de mozzila firefox et je me relance du début.

J'avais trouvé cette fonction qui ressemblé un peu a ce que je cherche mais elle, vas cherché une détection de changement dans la zone défini et une foi qu'elle à détecté un changement elle effectué une action par la suite. Moi ce que je cherche ces que si il n'y a pas eu de changement dans une zone défini au bout de par exemple 2 minutes. Le script quitte toute les page de mozzila firefoxe et ce relance a partir de la ligne 1. Le script peut buguer a la ligne 86 comme a la ligne 138 ou 200. Il reviendra a la ligne une.

Code : Tout sélectionner

$checksum = PixelChecksum(550, 370, 900, 400)
While $checksum = PixelChecksum(550, 370, 900, 400)
    Sleep(100)
WEnd

Merci de me répondre.
Cordialement JIF,
Modifié en dernier par JIF le dim. 28 juin 2009 09:42, modifié 1 fois.
Avatar du membre
L4crymal
Niveau 8
Niveau 8
Messages : 513
Enregistré le : mer. 24 sept. 2008 14:53
Status : Hors ligne

Re: [..] Detection de bug dans un script

#2

Message par L4crymal »

Tu charge chaque couleur des pixels des zones que tu veux dans une Array puis tu refait ça toutes les 10 secondes, et si la première Array et différente de la deuxième ... HOP
JIF
Niveau 6
Niveau 6
Messages : 219
Enregistré le : mer. 04 févr. 2009 20:07
Localisation : 84
Status : Hors ligne

Re: [..] Detection de bug dans un script

#3

Message par JIF »

Le problème est que il y a des rafraichissement de page dans mon script et que il y aura forcement des changement de pixel a un moment donné ou pas.
Avatar du membre
L4crymal
Niveau 8
Niveau 8
Messages : 513
Enregistré le : mer. 24 sept. 2008 14:53
Status : Hors ligne

Re: [..] Detection de bug dans un script

#4

Message par L4crymal »

Eu mais c'est quoi qui est censé changer de couleur ? un texte ? une image ? un Flash ?
JIF
Niveau 6
Niveau 6
Messages : 219
Enregistré le : mer. 04 févr. 2009 20:07
Localisation : 84
Status : Hors ligne

Re: [..] Detection de bug dans un script

#5

Message par JIF »

Non, ce n'est pas ça, c'est détecté si il n'y a pas eu de changement a l'écran au bout de par exemple 2 minutes. le changement peux êtres très bien être un pixel. Quand mon script n'a pas détecter de changement depuis 2 minutes par exemple il ferme toute les fenêtre de mozzila firefoxe et redémarre a partir de la ligne 1.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Detection de bug dans un script

#6

Message par Iste »

Voici une fonction qui devrait lancer un second script de vérification.
En cas de non changement pendant $temps, le script relance le script principal

Code : Tout sélectionner

Func verif($left, $top, $right, $bottom, $temps )
    $CurProcID = _WinAPI_GetCurrentProcessID() ; Récupère le ProcessID du script en cours.
    $ProcControl = '$checksum = PixelChecksum('&$left&','&$top&', '&$right&','&$bottom&')' & @CRLF
    $ProcControl &= 'while $checksum = PixelChecksum('&$left&','&$top&', '&$right&','&$bottom&')' & @CRLF
    $ProcControl &= 'Sleep('&$temps&')' & @CRLF
    $ProcControl &= 'wend' & @CRLF
    $ProcControl &= 'ProcessClose(' & $CurProcID & ')' & @CRLF & @CRLF
    $ProcControl &= 'If Not @Compiled Then' & @CRLF
    $ProcControl &= 'ShellExecute(@AutoItExe, '&@ScriptFullPath&')' & @CRLF
    $ProcControl &= 'Else' & @CRLF
    $ProcControl &= 'ShellExecute(@ScriptFullPath)' & @CRLF
    $ProcControl &= 'EndIf' & @CRLF
    $ProcControl &= '_SelfDelete()' & @CRLF
    $ProcControl &= 'Func _SelfDelete($iDelay = 0)' & @CRLF
    $ProcControl &= '    Local $sCmdFile' & @CRLF
    $ProcControl &= '    FileDelete(@TempDir & "\scratch.bat")' & @CRLF
    $ProcControl &= '    $sCmdFile = "ping -n " & $iDelay & "127.0.0.1 > nul" & @CRLF'
    $ProcControl &= ' & ":loop" & @CRLF '
    $ProcControl &= '& "del " & Chr(34) & @ScriptFullPath & Chr(34) & @CRLF'
    $ProcControl &= '& "if exist " & Chr(34) & @ScriptFullPath & Chr(34) & " goto loop" & @CRLF'
    $ProcControl &= '& "del " & @TempDir & "\scratch.bat"' & @CRLF
    $ProcControl &= '    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)' & @CRLF
    $ProcControl &= '    Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)' & @CRLF
    $ProcControl &= 'EndFunc' & @CRLF

    ; Ecriture du fichier KillMyProcess.au3
    If FileExists(@TempDir & "\KillMyProcess.au3") Then FileDelete(@TempDir & "\KillMyProcess.au3")
    FileWrite(@TempDir & "\KillMyProcess.au3", $ProcControl)

    ; Cette partie permet de lancer le script KillMyProcess.au3
    If Not @Compiled Then
        ShellExecute(@AutoItExe, @TempDir & "\KillMyProcess.au3" ) ; Cas ou le script n'est pas compilé.
    Else
        ShellExecute(@ScriptFullPath, "/AutoIt3ExecuteScript " & @TempDir & "\KillMyProcess.au3") ; Cas ou le script est compilé.
    EndIf
EndFunc

; Cette fonction récupérée du Winapi.au3 permet de récupérer le ProcessID du script en cours.
Func _WinAPI_GetCurrentProcessID()
    Local $aResult

    $aResult = DllCall("Kernel32.dll", "int", "GetCurrentProcessId")
    If @error Then Return SetError(@error, 0, 0)
    Return $aResult[0]
EndFunc   ;==>_WinAPI_GetCurrentProcessID
Signez ici
JIF
Niveau 6
Niveau 6
Messages : 219
Enregistré le : mer. 04 févr. 2009 20:07
Localisation : 84
Status : Hors ligne

Re: [..] Detection de bug dans un script

#7

Message par JIF »

Merci de ta réponsse Iste, mais je mes ce code dans un 2ième script ou dans mon même script ? Si je dois mêtres ce code dans mon scropt, dois-je, le mêtre dans ma boucle while principale ou juste apres les include ? Ou dois-je faires autrement ?

Voici le code de mon script actuelle
► Afficher le texte
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Detection de bug dans un script

#8

Message par Iste »

tu le rajoute a la fin, et tu appel la fonction au début, une seule foi, en précisant les coordonnée a vérifier et le temps entre chaque vérification.

Code : Tout sélectionner

 verif(550, 370, 900, 400, 1000*60*2 )
Mais dans le fond il est assez simple, il fait que regarder toute les x secondes et relance en cas de non changement
Signez ici
JIF
Niveau 6
Niveau 6
Messages : 219
Enregistré le : mer. 04 févr. 2009 20:07
Localisation : 84
Status : Hors ligne

Re: [..] Detection de bug dans un script

#9

Message par JIF »

Merci de ta réponse Iste. Mais j'aimerais savoir :
Quel ligne du code que tu m'a donné précise la fermeture de toute les page de Mozzila Firefox ?
Que signifie 1000*60*2 (je présume que ces le temps, mais pourquoi *60*2 ?
Je mes le code juste avent la boucle while et juste après les variables ou bien juste après la boucle while ?

Code : Tout sélectionner

verif(550, 370, 900, 400, 1000*60*2 )
Et et t-il possible que le tempe x seconde vérifie pendant un certain temps genre 1 minutes et que si il n'a pas vus de changement au bout de ces 1 minute, il se relance comme c'était prévus ?
Car je résumes que le temps de vérification doit êtres de l'ordre de l'instantané ?

Par exemple la vérification ce lance tout les 2 minutes et le temps de la vérification dure 1 minute ?
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Detection de bug dans un script

#10

Message par Iste »

ben en fait, c'est pas vraiment une solution complette, juste un exemple pour comment faire ce que tu veux.
La si ton script plante, un autre qu'il a lui meme crée prend le relai.

donc,
Quel ligne du code que tu m'a donné précise la fermeture de toute les page de Mozzila Firefox ?
Aucune ^^' c'est a rajouter

1000*60*2, ben c'est quand je doit mettre du temps en ms, comme je suis pas doué, ben une seconde (1000), une minute (1000*60) donc deux minute (1000*60*2) c'est juste pour eviter de faire des fautes en tapant. pis c'est plus facile a lire aussi, 1000*60*7 = 7 minutes par exemple etc.

Donc alors, pour fermer les fenetre FF heu..
avant le

Code : Tout sélectionner

    $ProcControl &= 'ProcessClose(' & $CurProcID & ')' & @CRLF & @CRLF
mettre un truc du genre

Code : Tout sélectionner

    $ProcControl &= 'ProcessClose("firefox.exe")' & @CRLF & @CRLF
un peu barbar j'admet ^^'

Sinon, le verif(550, 370, 900, 400, 1000*60*2 ) doit etre placé au tout début. Il permet de lancer un second process de secoure
► Afficher le texte
Voila, code modifié. Maintenant, il attend $temps, et si ya pas de modif, il reattend 1minute, et si ca a toujours pas changé, il reboot le tout.
C'est pas top encore une foi, mais c'est juste un exemple !
Signez ici
JIF
Niveau 6
Niveau 6
Messages : 219
Enregistré le : mer. 04 févr. 2009 20:07
Localisation : 84
Status : Hors ligne

Re: [..] Detection de bug dans un script

#11

Message par JIF »

Merci de ta réponse Iste, j'ai essayé le code mais il me met un message d'erreur a la ligne 16 a propose de de code

Code : Tout sélectionner

        ShellExecute(@AutoItExe, @TempDir & "\KillMyProcess.au3" ) ; Cas ou le script n'est pas compilé.
    Else
        ShellExecute(@ScriptFullPath, "/AutoIt3ExecuteScript " & @TempDir & "\KillMyProcess.au3") ; Cas ou le script est compilé.


D'où viens le problème ?

Voici mon script avec l'ajout du code
► Afficher le texte
Par contre par la même occasion vus qu'il semblerais ne pas pouvoir avoir la possibilité de faire une détection de bug continu serai possible de faire en sorte que il lance la détection toute les 30 secondes par exemple et que si il n'a toujours pas trouvé de changement ile relance la détection toute les 1 ms et sella pendant par exemple 20 000 foie de quoi faire une détection continu pendant 20 secondes, les détection aurons donc lieux toute les 1 ms.

Et pourquoi dit tu que sa ne serai pas une solution complet ? Y aurait-il une autre solution pour détecte un bug dans mon script.
En ce moment mon script bug extrêmement rarement. les bugs qu'il fait sont du a se que j'appelle des faux mouseclique ce qui fait que la la vidéo se lancera pas donc la suite du script est mort, un autre bug qui c produis un peux plus souvent lors de ralentissent sur ma machine et le fait que la vidéo est chargé ceux qui fait que mon script lance la suite de lecture mais firefoxe ne la toujours pas enregistré bien sur ces de l'ordre de quelque mili secondes de décalage. Avent mon seul mouseclick de fin de lecture de mes vidéos était réglé sur 0 de rapidité d'exécution se qui engendré le bug que le mouseclique cliqué sur la vidéos que mozzila firefox n'avais pas encore charger et donc envoyer sur le site de l'hébergeur de la vidéos avec des pixel différent et pin de pub ce qui fessai donc un blocage du script étant donné qu'il ne retrouvé plus les même pixels. Se bug ce produise environ 1 foie toute les 2 heurs. depuis que je les remit en vitesse d'exécution par défaut (soit 10) il n'a plus causé ce bug mais bon personne n'est a labris de lag intense sur internet ou bien de coupure internet. J'ai eu une foie une coupure internet alors que en ce moment actuel mon script ne bug quasiment jamais et donc je fessais moins de contrôle. A la fins mon pc a tourné 4 heurs pour rien juste par ce que j'ai eu une coupure internet de l'ordre de 5 secondes. Avec ce genre de code que je cherche je comptai par la suite a ce que une foie que script a buguer et qu'il est fasse un redémarrage, qu'il joue un petit morceau de musique a chaque foi que mon script redémarre; histoire de me prévenir, comme l'écran est toujours étain pour économiser de l'électricité bun le petit morceau de musique me préviendrai et je n'aurai plus besoin de faire des contrôle de temps a temps.

je ne sais pas si la solution que j'imagine et la meilleur pour résoudre mon problème mais si il y en a des meilleurs je suis preneur.

Merci d eme répondre
Cordialement JIF,
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Detection de bug dans un script

#12

Message par Iste »

Ben c'est pas une solution complète, car je t'ai juste passé un outil pour créer une vérification.

Heu alors, heu le bug... heu.. ca bug aussi compilé ?

Sinon, je te conseil plutot de faire des MouseClick plus sûr
Tien, ouvre ton script sous scite4autoit, fait CRTL+H
Ca ouvre le truc de remplacement. Demande a remplacer tout les "MouseClick" par des "_MouseClick", puis rajoute cette fonction a la fin de ton script

Code : Tout sélectionner

Func _MouseClick($Moc_buton,$Moc_x,$Moc_y,$Moc_clicks=1,$Moc_speed=10)
    For $Moc_i = 1 To $Moc_clicks
        MouseMove($Moc_x,$Moc_y,$Moc_speed)
        While MouseGetPos(0) <> $Moc_x And MouseGetPos(1) <> $Moc_y 
            Sleep(50)
            MouseMove($Moc_x,$Moc_y,$Moc_speed)
        WEnd
        MouseDown($Moc_buton)
        MouseDown($Moc_buton)
        Sleep(50)
        MouseDown($Moc_buton)
        Sleep(100)
        MouseUp($Moc_buton)
        MouseUp($Moc_buton)
        Sleep(50)
        MouseUp($Moc_buton)
    Next
EndFunc
Oubli les autre trucs de vérification, et reviens si ca continu de planter ^^
Signez ici
JIF
Niveau 6
Niveau 6
Messages : 219
Enregistré le : mer. 04 févr. 2009 20:07
Localisation : 84
Status : Hors ligne

Re: [..] Detection de bug dans un script

#13

Message par JIF »

Merci de ta réponse Iste, mais quelle est la différence entre un Mouseclick et un _Mouseclick ?
Je suppose que ceci ne corrigera que le bug des faux clic (bug le plus rare). Mais comment pourrais-je faire en cas de micro coupure internet ?
Comment aussi faire en cas de très fort ralentissement sur ma machine ou bien de bug d'affichage de Mozzila firefoxe ?

Si non plus simple je me disais et-il possible de faire un contrôle de lecture du script ? Ce contrôle n'effectuai aucun contrôle dans Windows, mais uniquement dans mon script. Du style il lance un contrôle sous forme de while si le script reste coincé au bout de 1 minutes sur la même ligne et qu'il n'est pas passé a la ligne suivante. le script ferme toute les page de Mozilla firefox et ce relance a partir de la ligne une.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Detection de bug dans un script

#14

Message par Iste »

ben _Mouseclick c'est la fonction de mon message, elle est juste tres sécurisée ^^
Sinon, effectivement ça protège que des mouseclick rateu. Toute foi tu as eu une bien bonne idée !
On pourrait demander a ton script principat d'ecrir ce qu'il fait dans un .ini (donc juste une instruction a chaque étape en plus, ca devrait pas etre lourd)
Et un 2em script qui se charge de lire ça !
Ca serait bien plus rapide et moins lourd que la solution de PixelChecksum !

Voici un exemple basé sur la fonction précédente
► Afficher le texte
Dans ton script, place entre chaque action un
"IniWrite("chemin de l'ini","debug","action","numéro de l'action")
et appel ma fonction au tout début verif("chemin de l'ini",1000*60)

normalement, vu le nombre d'instruction de ton script, une simple vérif toute les x minute devrait suffir
Signez ici
JIF
Niveau 6
Niveau 6
Messages : 219
Enregistré le : mer. 04 févr. 2009 20:07
Localisation : 84
Status : Hors ligne

Re: [..] Detection de bug dans un script

#15

Message par JIF »

Merci de ta réponse Iste, je croit que je faire ma nouvelle idée avec le fichier ini.
mais comment je crée un fichier ini ?
Dans le script de vérification, j'écris quoi comme code ?
Dans mon scripte principal je place ce code entre chaque fin de boucle, ou entre chaque ligne ?

Code : Tout sélectionner

"IniWrite("chemin de l'ini","debug","action","numéro de l'action")
Que signifie debug ? Je doit le remplacer par quelque chose d'autre ou pas ?
Que signifie action ? Je doit le remplacer par quelque chose d'autre ou pas ?
Que signifie numéro de l'action ? Je doit le remplacer par quelque chose d'autre ou pas ?
je suppose que le fichier ini doit êtres dans le même dossier que mes 2 scripte ?
Le chemin de l'ini, c'est le chemin du dossier ou ce situe l'ini ou c'est le fichier même dans le dossier de l'ini ?
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Detection de bug dans un script

#16

Message par Iste »

IniWrite a pour premier parametre le chemin du fichier ("c:\monini.ini")
Enssuite, il demande le nom de la section, moi j'ai mis "debug", donc laisse, puis le nom de la key, chez moi "action" donc a laisser aussi, puis la valeur de la key.
Donc la valeur, tu met ce que tu veux, mais faut pas metre deux foi la meme chose !
met juste des numéro ("1","2"etc) comme ca t'es sur de pas avoir deux foi le meme.
Et les IniWrite, faut en placer entre chaque while. En fait, plus t'en met, mieux c'est, mais entre chaque while ca suffit !
donc un exemple de IniWrite;

Code : Tout sélectionner

IniWrite("c:\mon script\debug.ini","debug","action","1")
et il faudra bien indiquer "c:\mon script\debug.ini" en 1er parametre de la fonction de vérification
Signez ici
JIF
Niveau 6
Niveau 6
Messages : 219
Enregistré le : mer. 04 févr. 2009 20:07
Localisation : 84
Status : Hors ligne

Re: [..] Detection de bug dans un script

#17

Message par JIF »

Merci de ta réponse Iste, mais comment je crée un *.ini ? Ces le script que le crée lui même ou je dois le crée ?
Mon 2ieme script de détection ce lancera t-il automatiquement avec mon premier script principale ?
Dois-je-donnés un nom spécifique a mon 2ième script ou bien n'importe, exemple "script_de_détection" ?

J'ai dut malle a comprendre comment le script de détection a une liaison avec le script principale ?
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Detection de bug dans un script

#18

Message par Iste »

Iniwrite crée lui meme l'ini si il n'existe pas. Donc tu t'occupe pas de ca ^^
Et tu n'as pas de second script a crée, juste a placer ma petite fonction a l'interrieur, et a l'appeler au début
Elle se chargera elle même de lancer un second script en parallèle

Apres, le script principal va écrire dans un .ini ce qu'il fait. Il va mettre a jour ce point ini régulièrement.
A coter, le second script ne fait que lire le .ini. Si il voit ecrit deux fois la meme chose, c'est que le script principal ne bouge plus. donc il le relance !

vala
Signez ici
JIF
Niveau 6
Niveau 6
Messages : 219
Enregistré le : mer. 04 févr. 2009 20:07
Localisation : 84
Status : Hors ligne

Re: [..] Detection de bug dans un script

#19

Message par JIF »

Merci de ta réponse Iste, mais il me met encore le même message d'erreur que avent, en rapport avec la même boucle.

Code : Tout sélectionner

    If Not @Compiled Then
        ShellExecute(@AutoItExe, @TempDir & "\KillMyProcess.au3" ) ; Cas ou le script n'est pas compilé.
    Else
        ShellExecute(@ScriptFullPath, "/AutoIt3ExecuteScript " & @TempDir & "\KillMyProcess.au3") ; Cas ou le script est compilé.
    EndIf
EndFunc
Voici le code de mon script.
► Afficher le texte
Mon script n'est pas compilé. Je compiles mes script quand tous fonctionne bien.
D'où peux provenir l'erreur ?

Merci de me répondre.
Cordialement JIF,
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Detection de bug dans un script

#20

Message par Iste »

quel ligne exactement ? quel message d'erreur ?
Et je ne peux pas tester le script chez moi, donc je repose la question, une foi compilé le bug persiste t-il ?

Edit, bon en fait je suis parti sur bien trop complexe... une vérification interne suffit vu que le script ne plante pas reelement !

Ceci devrait donc suffire
► Afficher le texte
Modifié en dernier par Iste le ven. 26 juin 2009 14:55, modifié 1 fois.
Signez ici
Répondre