Deutsch
Forum

Webcontrol auslesen ?

 

Andreas
Gaida
Hi!
Weis vielleicht jemand wie man den Inhalt eines solchen Webcontrols auslesen kann.
Müsste eine IP Adresse daraus auslesen. Mit der Maus kann man ja alles markieren und kopieren.Aber mir fehlen die
passenden Messages um es automatisch zu machen.Wenn jemand die kennt ,währe ich für sie sehr dankbar.
KompilierenMarkierenSeparieren
WebControl&=create(HTMLWin,%hwnd,http://fritz.box/,0,0,0,width(%hwnd),height(%hwnd))

MfG
Andreas
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
18.01.2008  
 




Rolf
Koch
Auf diese Art gehts garnicht. Schau mal hier:
[web]https://xprofan.com/thread.core?t=3162&highlight=stringtoguid[/web]
 
18.01.2008  
 




Andreas
Gaida
Danke aber die Beispiele zeigen den Quellcode der Seite an. Ich brauche nur die Anzeige der ausgegebenen Texte
und das ist manuell mit der maus machbar (Markieren und in die Zwischenablage kopieren)nur leider weis ich nicht wie das automatisch geht.
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
18.01.2008  
 



Andreas nein aus pfui! Nimm die Download-Include - so oder so wirst Du aber den HTML parsen müssen um die von Dir gewünschten Inhalte herauszufischen! (nagut, xml parsen wirst net müssen um ne IP rauszufischen, hier werden vlt. substrs reichen)

Deine WAN-IP gibt Dir die download-inc auch per dw.ip() als String zurück - für den Fall das es Dir darum geht...
 
18.01.2008  
 




Uwe
''Pascal''
Niemeier
Hallo Leute!

Hier eine Variante zur Anzeige des sichtbaren Textes einer Webseite:
KompilierenMarkierenSeparieren
 $H Windows.ph

proc StringToGUID---------------Umwandlung String > globally unique identifier

    parameters GUID$,GUID&
    declare Temp$
    Temp$=space$(80)
    ~MultiByteToWideChar(1,1,addr(GUID$),-1,addr(Temp$),80)
    external(ole32,CLSIDFromString,addr(Temp$),GUID&)
    endproc-----------------------------------------------------------------------

    proc CallMethod--------------------------Methode eines COM-Interfaces aufrufen

        parameters IFace&,Method&
        declare VTable&
        VTable&=long(IFace&,0)
        Method&=long(VTable&,Method&*4)
        case %pcount=2:return call( Method&,IFace& )
        case %pcount=3:return call( Method&,IFace&,&(3) )
        case %pcount=4:return call( Method&,IFace&,&(3),$(4) )
        case %pcount=5:return call( Method&,IFace&,&(3),&(4),&(5) )
        endproc-----------------------------------------------------------------------

        proc TextAuslesen-------------------------------------sichtbaren Text Auslesen

            parameters WebCtrl&
            declare IID#
            dim IID#,16
            external(ole32,CoInitialize,0)
            declare IUnknown&
            external(atl,AtlAxGetControl,WebCtrl&,addr(IUnknown&))
            declare IWebBrowser&
            StringToGUID({D30C1661-CDAF-11d0-8A3E-00C04FC9E26E},IID#)--IID_IWebBrowser2
            CallMethod(IUnknown&,0,IID#,addr(IWebBrowser&))-------IUnknown::QueryInterface
            declare Status&

            while 1

                sleep 300
                CallMethod(IWebBrowser&,31,addr(Status&))--IWebBrowser&::get_Busy
                casenot Status&:break

            endwhile

            declare IHTMLDocument2&
            CallMethod(IWebbrowser&,18,addr(IHTMLDocument2&))--IWebbrowser::get_Document
            declare IHTMLElement&
            CallMethod(IHTMLDocument2&,9,addr(IHTMLElement&))--IHTMLDocument2::get_body
            declare Text&
            CallMethod(IHTMLElement&,64,addr(Text&))--IHTMLElement::get_outerText
            declare Size&,Text#,Text$
            Size&=external(oleaut32,SysStringLen,Text&)
            dim Text#,Size&
            ~WideCharToMultiByte(0,0,Text&,-1,Text#,Size&,0,0)
            external(oleaut32,SysFreeString,Text&)
            Text$=string$(Text#,0)
            CallMethod(IHTMLElement&,2)----IHTMLElement::Release
            CallMethod(IHTMLDocument2&,2)--IHTMLElement::Release
            dispose Text#
            dispose IID#
            external(ole32,CoUninitialize)
            return Text$
            endproc-----------------------------------------------------------------------
            window 0,0-800,600
            usermessages 16
            def AtlAxWinInit(0) !atl.dll,AtlAxWinInit
            def AtlAxCreateControl(4) !atl.dll,AtlAxCreateControl
            declare Atl&,Web&,a$
            Atl&=usedll(atl.dll)
            AtlAxWinInit()
            a$=C:Test.html-----------Pfad oder URL
            Web&=control(AtlAxWin,a$,$50300000,0,0,780,250,%hwnd,0,0,$200)-HTML-Contol anlegen
            a$=TextAuslesen(Web&)
            create(Multiedit,%hwnd,a$,0,290,780,250)----Text anzeigen

            while 1

                waitinput
                case %umessage=16:break

            endwhile

            destroywindow(Web&)
            freedll Atl&

Eleganter gehts bei Verwendung meiner ocx2-Routinen [...] :
KompilierenMarkierenSeparieren
windowstyle 16+8+4+2+1
window 1,1-(%maxX-1),(%maxY-1)
 $H Messages.ph
 $H Windows.ph
 $H ocx2.ph
 $I ocx2.inc
def Redraw(1) ~RedrawWindow(&(1),0,0,$485)
usermessages 16----Beenden
ocxInit()
declare Pos#,Url$,WebControl&
dim Pos#,16
~GetClientRect(%hwnd,Pos#)
var WebObject&=ocxCreate(about:blank,%hwnd,0,0,long(Pos#,8),long(Pos#,12)/2,$53b00000,addr(WebControl&))
var Edit&=create(multiedit,%hwnd,,0,long(Pos#,12)/2,long(Pos#,8),long(Pos#,12)/2)
appendmenubar 101,Zurück
appendmenubar 102,Vorwärts
appendmenubar 103,Abbrechen
appendmenubar 104,Aktualisieren
appendmenubar 105,Startseite
appendmenubar 106,Suchen
appendmenubar 107,Datei öffnen
appendmenubar 108,URL öffnen
appendmenubar 109,Text anzeigen
appendmenubar 110,Quelltext anzeigen
ocxMethod(WebObject&,GoHome)--Startseite öffnen
--Bei Bedarf: Meldungen des WebBrowsers unterdrücken (z.B. Scriptfehler oder Offline)
ocxPut(WebObject&,Silent,$FFFF)

proc Navigation-------------------------------------------

    parameters Mode$
    var Document&=ocxGet(WebObject&,Document)
    var Window&=ocxGet(Document&,parentWindow)
    var History&=ocxGet(Window&,History)
    ocxMethod(History&,Mode$)
    ocxRelease(History&,Window&,Document&)
    endproc---------------------------------------------------

    proc TextAnzeigen-----------------------------------------

        parameters Mode$
        var Document&=ocxGet(WebObject&,Document)
        var Body&=ocxGet(Document&,body)
        var Text$=ocxGet(Body&,Mode$)
        ocxRelease(Body&,Document&)
        settext Edit&,Text$
        endproc---------------------------------------------------

        while 1

            if menuitem(101)---------------------------------------Zurück

                Navigation(back)
                ocxMethod(WebObject&,goback) > Fehler bei Unterlauf

            elseif menuitem(102)-----------------------------------Vorwärts

                Navigation(forward)
                ocxMethod(WebObject&,goforward) > Fehler bei Überlauf

            elseif menuitem(103)-----------------------------------Abbrechen

                ocxMethod(WebObject&,Stop)

            elseif menuitem(104)-----------------------------------Aktualisieren

                ocxMethod(WebObject&,Refresh)

            elseif menuitem(105)-----------------------------------Startseite

                ocxMethod(WebObject&,GoHome)

            elseif menuitem(106)-----------------------------------Suchen

                ocxMethod(WebObject&,GoSearch)

            elseif menuitem(107)-----------------------------------Datei öffnen

                Url$=loadfile$(Bitte Bild oder HTML-Datei wählen,*.*)
                Redraw(WebControl&)--Neuzeichnen wg. Dialogbox bei Abbruch
                case len(Url$):ocxMethod(WebObject&,Navigate,*+Url$)

            elseif menuitem(108)-----------------------------------URL öffnen

                Url$=input$(Bitte Web-Adresse eingeben:,URL:,http://www.Google.de)
                Redraw(WebControl&)--Neuzeichnen wg. Dialogbox bei Abbruch
                case len(Url$):ocxMethod(WebObject&,Navigate,*+Url$)

            elseif menuitem(109)-----------------------------------Text anzeigen

                TextAnzeigen(outerText)

            elseif menuitem(110)-----------------------------------Quelltext anzeigen

                TextAnzeigen(outerHTML)
                endif------------------------------------------------------------

                while 1-------------------------Warten, bis Aktion ausgeführt ist

                    casenot ocxGet(WebObject&,Busy):break
                    sleep 200
                    endwhile---------------------------------------------------------
                    ~GetClientRect(%hwnd,Pos#)--Repositionieren wg. Scrolleisten bei Grössenänderung
                    setwindowpos WebControl&=0,0-long(Pos#,8),long(Pos#,12)/2
                    setwindowpos Edit&=0,long(Pos#,12)/2-long(Pos#,8),long(Pos#,12)/2
                    Redraw(WebControl&)--Neuzeichnen
                    waitinput
                    case %umessage=16:break--Ende
                    endwhile---------------------------------------------Ende Eingabeschleife
                    dispose Pos#
                    destroywindow(WebControl&)
                    ocxDeInit()

Im Zweifelsfall lassen sich so auch einzelne Elemente der Webseite abfragen, wenn sich diese irgendwie isolieren lassen, z.B. duch eine intene ID.
Inwiefern das bei der FritzBox nutzbar ist, weiß ich aber (noch) nicht...

HTH
Pascal
 
19.01.2008  
 




RGH
Ein kleiner Tipp:

Das ~GetClientRect() kann man sich sparen.
XProfan kennt seit langem die Funktionen Width(hWin&) / Height(hWin&), mit denen sich die Ausmaße des Clientbrereiches des Fensters hWin& ermitteln lassen.
(Klar: Diese Funktionen rufen natürlich auch die API GetClientRect() auf ...)

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
19.01.2008  
 




Andreas
Gaida
Danke Euch allen für die Hilfe.
Aber die Lösungen sind mir zu Komplex.
Mir würde wirklich ausreichen wenn ich den Text markieren könnte und ihm in die Zwieschenablage kopiert bekomme.
Da dieses vorgehen auch manuell mit der Maus geht sollte es auch Kommandos geben die das automatisch bewerkstelligen. wie wm_Copy, wm_Paste was mir fehlt ist die Message für alles markieren.

M fG

Andreas
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
19.01.2008  
 




Uwe
''Pascal''
Niemeier
Hallo Leute!

@ Roland: Stimmt, das GetClientRect() muß mal bei irgendwelchen Versuchen übrig geblieben sein

@ Andreas:


Da dieses vorgehen auch manuell mit der Maus geht sollte es auch Kommandos geben die das automatisch bewerkstelligen. wie wm_Copy, wm_Paste


Eben nicht
Sowas läßt sich im Webbrowser auch nur per COM realisieren, es sei denn, du würdest Maus/Cursor fernsteuern. Mit einfachen Messages ist da nichts zu machen.

HTH
Pascal
 
19.01.2008  
 




Frank
Abbing
Du könntest es mit einer Kombination aus den API SetCursorPos() und mouse_event() probieren. Das simuliert Mausbewegungen- und knopfdrücke.
 
19.01.2008  
 




RudiB.
Ich habe mal den oberen (ersten) Quellcode aufbereitet, bringt mir aber eine Fehlermeldung. Was läuft da schief ?
Seitenaufruf=Google-Translate und Deutscher Begriff wird mit übergeben beim Aufruf.

"https://translate.google.com/?hl=de&sl=de&tl=it&text=hummel&op=translate"

Ich möchte auf der Seite lediglich die Übersetzung des Wortes auslesen.


 $H Windows.ph

proc StringToGUID'---------------Umwandlung String > globally unique identifier

    parameters GUID$,GUID&
    declare Temp$
    Temp$=space$(80)
    ~MultiByteToWideChar(1,1,addr(GUID$),-1,addr(Temp$),80)
    external("ole32","CLSIDFromString",addr(Temp$),GUID&)

EndProc'-----------------------------------------------------------------------

proc CallMethod'--------------------------Methode eines COM-Interfaces aufrufen

    parameters IFace&,Method&
    declare VTable&
    VTable&=long(IFace&,0)
    Method&=long(VTable&,Method&*4)
    case %pcount=2:return call( Method&,IFace& )
    case %pcount=3:return call( Method&,IFace&,&(3) )
    case %pcount=4:return call( Method&,IFace&,&(3),$(4) )
    case %pcount=5:return call( Method&,IFace&,&(3),&(4),&(5) )

EndProc'-----------------------------------------------------------------------

proc TextAuslesen'-------------------------------------sichtbaren Text Auslesen

    parameters WebCtrl&
    declare IID#
    dim IID#,16
    external("ole32","CoInitialize",0)
    declare IUnknown&
    external("atl","AtlAxGetControl",WebCtrl&,addr(IUnknown&))
    declare IWebBrowser&
    StringToGUID("{D30C1661-CDAF-11d0-8A3E-00C04FC9E26E}",IID#)'--IID_IWebBrowser2
    CallMethod(IUnknown&,0,IID#,addr(IWebBrowser&))'-------IUnknown::QueryInterface
    declare Status&

    while 1

        sleep 300
        CallMethod(IWebBrowser&,31,addr(Status&))'--IWebBrowser&::get_Busy
        casenot Status&:break

    endwhile

    declare IHTMLDocument2&
    CallMethod(IWebbrowser&,18,addr(IHTMLDocument2&))'--IWebbrowser::get_Document
    declare IHTMLElement&
    CallMethod(IHTMLDocument2&,9,addr(IHTMLElement&))'--IHTMLDocument2::get_body
    declare Text&
    CallMethod(IHTMLElement&,64,addr(Text&))'--IHTMLElement::get_outerText
    declare Size&,Text#,Text$
    Size&=external("oleaut32","SysStringLen",Text&)
    dim Text#,Size&
    ~WideCharToMultiByte(0,0,Text&,-1,Text#,Size&,0,0)
    external("oleaut32","SysFreeString",Text&)
    Text$=string$(Text#,0)
    CallMethod(IHTMLElement&,2)'----IHTMLElement::Release
    CallMethod(IHTMLDocument2&,2)'--IHTMLElement::Release
    dispose Text#
    dispose IID#
    external("ole32","CoUninitialize")
    return Text$

EndProc'-----------------------------------------------------------------------

window 0,0-800,600
usermessages 16
def AtlAxWinInit(0) !"atl.dll","AtlAxWinInit"
def AtlAxCreateControl(4) !"atl.dll","AtlAxCreateControl"
declare Atl&,Web&,a$,ME&
Atl&=usedll("atl.dll")
AtlAxWinInit()
a$="https://translate.google.com/?hl=de&sl=de&tl=it&text=hummel&op=translate"'-----------Pfad oder URL
Web&=control("AtlAxWin",a$,$50300000,0,0,780,250,%hwnd,0,0,$200)'-HTML-Contol anlegen
a$=TextAuslesen(Web&)
ME&=create("Multiedit",%hwnd,a$,0,290,780,250)'----Text anzeigen

while 1

    waitinput
    case %umessage=16:break

endwhile

destroywindow(Web&)
freedll Atl&

21 kB
Hochgeladen:15.08.2021
Ladeanzahl60
Herunterladen
 
XProfan X4
Xprofan X4
Rudolf Beske / München

Hardware: NB Intel I9 - 16GByte RAM
15.08.2021  
 




RudiB.
...noch als Nachtrag...die Webseite wird komplett angezeigt, dann kommt die Fehlermeldung...
 
XProfan X4
Xprofan X4
Rudolf Beske / München

Hardware: NB Intel I9 - 16GByte RAM
15.08.2021  
 




Georg
Teles
Hi, in der proc CallMethod ist ein fehler:

dort steht ein $ statt & beim Parameter Nr 4
case %pcount=4:return call( Method&,IFace&,&(3),$(4) )

Korrigiert klappt es bei mir beim Erststart kommt die nervige Cookies Meldung

Grüße
 
XProfan X2
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

20.08.2021  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

10.428 Betrachtungen

Unbenanntvor 0 min.
Uwe Lang28.06.2024
H.Brill07.06.2024
Sven Bader21.11.2023
Ernst29.05.2022
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie