Page 1 sur 1

[R] Récupérer mise en page et contenu page web (pour ini)

Posté : mar. 01 mai 2012 16:36
par plop22
Bonjour à tous !

Je voudrais savoir comment faire pour récupérer le contenu avec sa mise en page d'une page web

Vous allez comprendre:

J'ai une page qui affiche des infos comme dans un ini, et je voudrais récupérer ces infos afin des les enregistrer dans un ini pour mon programme (avec les retours à la ligne donc.)
Ma page m'affiche:

Code : Tout sélectionner

[FlyingDeadCow]
ip=221.135.47.123
statut=ON
password=pass'
id=6
[BalouBalou]
ip=12.28.159.212
statut=OFF
password=mdp
id=7
et le code source est:

Code : Tout sélectionner

[FlyingDeadCow]<br />
ip=221.135.47.123<br />
statut=ON<br />
password=pass'<br />
id=6<br />

    [BalouBalou]<br />
ip=12.28.159.212<br />
statut=OFF<br />
password=mdp<br />
id=7<br />

je voudrais donc réussir à garder la mise en page affichée pour directement copier dans un ini.... mais comment?????

Re: [..] Récupérer mise en page et contenu page web (pour in

Posté : mar. 01 mai 2012 17:35
par mikell
Peut-être que _IEBodyReadText suffirait
Sinon :

Code : Tout sélectionner

$code = BinaryToString(InetRead(' http://mapage.etc '), 4)
; $code = FileRead("codesource.txt")
$txt = StringRegExpReplace($code, '\h|(<br />)', "")
Msgbox(0,"", $txt)
; FileWrite("code.ini", $txt)

Re: [..] Récupérer mise en page et contenu page web (pour in

Posté : mar. 01 mai 2012 18:03
par hilow
Je confirme : _IEBodyReadText suffit, mikell, je viens d'essayer comme ça :

Code : Tout sélectionner

#include <GUIConstants.au3>
#include <IE.au3>

Opt("GuiOnEventMode", 0)

$html = "<html><body>" & _
"[FlyingDeadCow]<br />" & _
"ip=221.135.47.123<br />" & _
"statut=ON<br />" & _
"password=pass<br />" & _
"id=6<br />" & _
"<br />" & _
"[BalouBalou]<br />" & _
"ip=12.28.159.212<br / >" & _
"statut=OFF<br />" & _
"password=mdp<br />" & _
"id=7<br />" & _
"</body></html>"

$ui = GUICreate("test", 600, 500)

$wb = _IECreateEmbedded()
GUICtrlCreateObj($wb, 10, 35, 580, 455)
_IENavigate($wb, "about&#058;blank")
_IEDocWriteHTML($wb, $html)

$cmd = GUICtrlCreateButton("GO", 10, 10, 75, 20)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $cmd
            $file = FileOpen("test.ini", 1)
            If $file = -1 Then
                MsgBox(4096, "Error", "Unable to open file")
                Exit
            EndIf

            FileWrite($file, _IEBodyReadText($wb))
            FileClose($file)

        Case $gui_EVENT_CLOSE
            Exit(0)
    EndSwitch
WEnd
 
Apparemment ça marche. Sauf, bien sûr, si tu veux pouvoir mettre à jour un ini existant qui contient ça et d'autres choses. Auquel cas, il vaut mieux passer par les fonctions de gestion d'un fichier INI une fois que tu as extrait ton texte (par exemple en en faisant un tableau par split sur le "=" de chaque ligne, puis IniWriteSection au final).

Re: [..] Récupérer mise en page et contenu page web (pour in

Posté : mar. 01 mai 2012 18:11
par mikell
Moui j'aurais pu tester d'abord

Code : Tout sélectionner

#include <IE.au3>
$oIE = _IECreate("file:///" & @scriptdir & "/codesource.html", 0, 0)
$txt = _IEBodyReadText($oIE)
Msgbox(0,"", $txt)
; FileWrite("code.ini", $txt)
Après, pour la gestion du ini, c'est une autre histoire
Idem si la page web contient d'autres trucs en plus des données voulues, etc

Re: [..] Récupérer mise en page et contenu page web (pour in

Posté : mar. 01 mai 2012 18:21
par hilow
Sinon, faire une capture écran, puis une analyse OCR :lol:

Re: [..] Récupérer mise en page et contenu page web (pour in

Posté : mar. 01 mai 2012 18:43
par mikell
Image :roll: :mrgreen:

Re: [..] Récupérer mise en page et contenu page web (pour in

Posté : mar. 01 mai 2012 20:03
par plop22
merci beaucoup pour vos réponses et votre rapidité!

cela dit, je voudrais savoir si il est possible de faire la même chose sans devoir être dépendant de la présence d'internet explorer sur l'ordinateur ( IE.au3 est utilisable que si ie est installé c'est ça non?)

je pensait par exemple à l'udf winhttp.au3 (si vous connaissez? ) ou à autre chose...

Je vais quand meme voir de mon coté avec winhttp si on peut télécharger le code source de la page, et j'appliquerais le traitement proposé par mikell;

Code : Tout sélectionner

$txt = StringRegExpReplace($code, '\h|(<br />)', "")
et de la même manière, j'aimerais savoir comment supprimer les espaces, car il semble (allez savoir pourquoi) qu'il y ait une sorte d'alinéa de 6 espaces avant chaque nom de section (sauf le premier)

je vous tient au courant en cas de problème, et si vous connaissez une "supertechniquedelamortquitue" n'hésitez pas: je suis preneur de tout!!!!

et,

@hilow : en fait j'importerais à chaque fois dans mon ini le contenu de la page, qui elle est mise à jour (en gros il n'y as pas de modification d'un ini en local pour les mises à jour)
@mikell : la page ne contient que les infos voulues

Re: [..] Récupérer mise en page et contenu page web (pour in

Posté : mar. 01 mai 2012 21:27
par mikell
Tss
Va pas t'embêter avec des trucs compliqués et essaie ça (ça te vire *aussi* les espaces)

Code : Tout sélectionner

$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("GET", "http://mapage.etc", 0)
$oHTTP.Send()
$txt = $oHTTP.Responsetext 
$oHTTP = 0
$txt2 = StringRegExpReplace($txt, '\h|(<br />)', "")
Msgbox(0,"", $txt2)
; FileWrite("code.ini", $txt2)

Re: [..] Récupérer mise en page et contenu page web (pour in

Posté : mar. 01 mai 2012 23:31
par hilow
Eh bien, tout est bien qui finit bien :) C'est vrai que sans besoin de visu, c'est beaucoup plus light ; avec la mikell's method 8)

bonne_nuit($zzz)

Re: [..] Récupérer mise en page et contenu page web (pour in

Posté : mer. 02 mai 2012 19:26
par plop22
Fonctionne parfaitement!

Mais je suis chiant (pardonnez moi) mais le bon fonctionnement de ce script dépend de la présence d'internet explorer, et malheureusement, je souhaite faire un programme ne dépendant d'aucun facteur externe.

Mais vous m'avez tous les deux beaucoup aidé alors je n'abuserai pas d'avantage de votre patience et de votre temps! :lol:
Je pense que vous m'avez fourni bien assez d'éléments pour que je me débrouille seul à présent, je vous remercie!! :D

Je met résolu!




PS: quand je parlais de winhttp, je parlais de ceci: http://winhttp.origo.ethz.ch

edit:


La solution pour ceux que ça pourrait interresser (avec l'udf winhttp, sans avoir besoin de la présence de internet explorer ou autre sur le pc)

ici l'exemple est adapté pour mes tests en local

Code : Tout sélectionner

#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6

#include "WinHttp.au3"
$site = "127.0.0.1"
$txt = ""
$txt2 = ""
Opt("MustDeclareVars", 1)

; Initialize and get session handle
Global $hOpen = _WinHttpOpen()
; Get connection handle
Global $hConnect = _WinHttpConnect($hOpen, $site)
; Request
Global $hRequest = _WinHttpSimpleSendRequest($hConnect, "GET", "/COMphpmysql.php")
If @error Then
    MsgBox(0,"","error")
EndIf

; Simple-read...
Global $sRead = _WinHttpSimpleReadData($hRequest)
$txt2 = StringRegExpReplace($sRead, '\h|(<br />)', "")
Msgbox(0,"", $txt2)
FileWrite("code.ini", $txt2)
; Close handles
_WinHttpCloseHandle($hRequest)
_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)
 

Re: [R] Récupérer mise en page et contenu page web (pour ini

Posté : jeu. 03 mai 2012 07:48
par Tlem
IE, fait partie intégrante de Windows, donc vous n'avez donc pas plus de problème de dépendance que la nécessité de lancer votre script dans un environnement Windows. :roll:

Re: [R] Récupérer mise en page et contenu page web (pour ini

Posté : jeu. 03 mai 2012 13:52
par plop22
C'est vrai que les utilisateurs lambdas ont ie sur leur système, simplement je préfère créer quelque chose d'indépendant, "d’auto suffisant" . (c'est de la fierté personnelle :lol: )


et puis (je troll là :P ) mais si je veux le distribuer sur linux ... :mrgreen:

Re: [R] Récupérer mise en page et contenu page web (pour ini

Posté : jeu. 03 mai 2012 14:59
par Tlem
Mouais, mais si vous enlevez IE, VBScript, WMI (et surement d'autres que j'oublie) il ne vous restera plus grand chose pour vos scripts. :mrgreen:

Re: [R] Récupérer mise en page et contenu page web (pour ini

Posté : jeu. 03 mai 2012 15:20
par mikell
Sans compter que malgré la condamnation de Microsoft et la directive de Bruxelles sur Internet Explorer, si on vire IE, Windows risque de ne pas apprécier du tout du tout :mrgreen:

Et de toute façon chuis pas sûr que la winhttp.dll soit comprise dans Linux :wink:
Têt bin qu'il existe une linuxhttp.dll... faudrait interroger un membre de la secte

Re: [R] Récupérer mise en page et contenu page web (pour ini

Posté : jeu. 03 mai 2012 17:19
par plop22
je suis pas contre les autres on peut pas tout réinventer ou contourner de tout façon, mais Internet explorer c'est pour l'honneur: pas question de mettre cette m**de dans mes scripts :mrgreen: :mrgreen: