karlchristian
Goto Top

Bereits geöffnetes Browserfenster auslesen

Hallo,

ich Moment lasse ich per VBA eine Website öffnen (Beispiel "https://testurl/jctsc/smp/printDetail.do" um diese einzulesen.
Leider hat der Entwickler der Page hier eine Sicherheit eingebaut, so das ich diese nicht als neues Objekt mehr öffnen kann

(Zugriffe verweigert)
gehe ich aber auf der Webbsite auf einen Button offnet er mir normal die Website. "https://testurl/jctsc/smp/printDetail.do"

einliest. (Sprich wie kann ich ihm das bereit geöffnete Browserfenster übergeben?

Mein bisheriger Code sieht wie folgt aus?
Sollte dieses nicht möglich sein, kann ich die geöffnete Website per VBA vorab als HTML lokal zwischenspeichern?

...
URL = "https://testurl/jctsc/smp/printDetail.do"  
webtext = "<html></html>"  

    Set objIE = CreateObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")  
    'Set objIE = CreateObject("InternetExplorer.Application")  
    objIE.Navigate URL
    objIE.Visible = True
    While Not objIE.ReadyState = 4
        DoEvents
    Wend
    'txtContent.SetFocus  
    txtContent = objIE.Document.body.innerText
    
    webtext = objIE.Document.body.outerHTML
    objIE.Quit
...

Content-ID: 247046

Url: https://administrator.de/contentid/247046

Ausgedruckt am: 23.11.2024 um 03:11 Uhr

emeriks
emeriks 21.08.2014 um 12:53:40 Uhr
Goto Top
Hi,
was ist das Problem? Dass Du die Site nicht per VBS starten kannst oder das Du sie nicht ein zweites Mal starten kannst, wenn sie schon in einer anderen Browser-Sitzung läuft? Falls letzteres, dann willst Du wissen, wie Du auf den bereits geöffneten Browser zugreifen kannst um diese auszulesen? Habe ich das richtig verstanden?
E.
karlchristian
karlchristian 21.08.2014 aktualisiert um 13:10:04 Uhr
Goto Top
Letztere ja,

aber im detail
Mein Problem ist, dass wenn ich mit og.g. Code die Website einlesen möchte nur der Hinweis vorgeblendet wird Zugriff verweigert
Kopiere ich o,g. Url in den Browser bekomme ich auch die Zugriffsmeldung.

Klicke ich aber auf der Website einen JAVA Button an öffnet er mir die o.g. URL mit Inhalt.
Da ich das Java ablett nicht ansprechen kann hatte ich mir gedacht die o.g. Website manuell zu öffnen und dieses neu geöffnet Browserfenster auslesen.
colinardo
colinardo 21.08.2014 aktualisiert um 13:22:44 Uhr
Goto Top
Moin,
Kannst du uns eine funktionierende URL zur Verfügung stellen? denn ohne wird das hier nämlich sonst ziemlich schwierig !!
Klicke ich aber auf der Website einen JAVA Button an öffnet er mir die o.g. URL mit Inhalt.
dann wird das Java-Applet vermutlich irgendeine Authentifizierung der Verbindung vornehmen, ohne Code etc. wird das hier schwer ...
Ich würde hier das Java-Applet durch einen Decompiler jagen und nachsehen was es so im Hintergrund macht face-wink

Grüße Uwe
karlchristian
karlchristian 21.08.2014 aktualisiert um 14:01:30 Uhr
Goto Top
Hallo Uwe,

leider nicht möglich, da dieses im Intranet läuft.

Also besteht auch über den einfachen Weg nicht die Möglichkeit ein bereits geöffnets Browserfenster lokal zu speichern, dann würde das Script ja greifen, weil er nicht mehr über JAVA die Website öffnet sondern lokal einliest.

Mit u.g. code kann ich zwar feststellen welche URLs im Moment geöffnet sind
und hier würde ich ggf ansetzten wollten und einfach sagen, falls URL x gefunden wird,
speicher diese geöffnete Browserlement lokal als HTML ab

nur wüsste ich nie wie.
Sub Befehl0_Click()
Dim oWindowList
Set oWindowList = CreateObject("Shell.Application").Windows  
If oWindowList.Count > 0 Then
  Dim oWindow
  For Each oWindow In oWindowList
    If UCase(right(oWindow.FullName, 12)) = "IEXPLORE.EXE" Then  
      Debug.Print oWindow.LocationURL
      If oWindow.LocationURL = "https://test/jctsc/smp/printDetail.do" Then  
      
     ->>>  Und hier würde ich dann gerne die Seite des geöffneten Browser "https://test/jctsc/smp/printDetail.do" lokal speichern  

      Else
           
          End If
  
End If
Next
End If
End Sub
emeriks
emeriks 21.08.2014 um 14:19:32 Uhr
Goto Top
Und wenn Du einfach aus dem Script heraus den Button klickst? So etwa wie hier: http://stackoverflow.com/questions/14817436/clicking-buttons-in-ie-with ...

E.
karlchristian
karlchristian 21.08.2014 um 14:22:35 Uhr
Goto Top
Das würde ich gerne nur ist die website eine JAVA wo ich die Button nicht getittelt bekomme..
und somit nicht weis wie ich diese ansprechen kann.
Lingo73
Lingo73 24.08.2014 aktualisiert um 23:16:45 Uhr
Goto Top
Zitat karlchristian um 13:32 Uhr :
->>> Und hier würde ich dann gerne die Seite des geöffneten Browser "https://test/jctsc/smp/printDetail.do" lokal speichern

zum Speichern der Seite nimmst du ...
oWindow.ExecWB 4&, 2&, "C:\test_htm", 0

Der Parameter 4& steht für die auszuführende Aktion, also hier : "Save as".
-Würdest du statt
oWindow.ExecWB 4&, 2&, "C:\test_htm", 0
den Befehl
oWindow.ExecWB 6&, 2& nehmen, so würde die Seite gedruckt werden.
karlchristian
karlchristian 25.08.2014 aktualisiert um 08:09:24 Uhr
Goto Top
Hallo Lingo73

beim Ausführen erhalte ich den Hinweis:

Laufzeitfehler '-2147221248 (80040100)':
Die Methode 'ExecWB' für das Objekt 'IWebBrowser2' ist fehlgeschlagen

wenn ich versuche den Dateinamen mit informationen aus dem Webbrowser zu befüllen

...
        pos(1) = InStr(webtext, "<DIV style=")  
        webtext = right(webtext, (Len(webtext) - pos(1) + 1))
        webtext = Chr(13) & Chr(10) & webtext & "</html>"  
        
        strA(0) = txtContent

        pos(1) = InStr(txtContent, "Ticket:")  
        Inhalt(1) = Mid(strA(0), pos(1) + 7, 10)
        
        'Title  
        pos(1) = InStr(txtContent, "Title:")  
        pos(2) = InStr(txtContent, "Status:")  
        Inhalt(2) = Mid(strA(0), pos(1) + 6, pos(2) - pos(1) - 6)
        Inhalt(2) = Replace(Inhalt(2), "'", "")  
        
        saveas = Inhalt(1) & " " & Inhalt(2)  
        
        oWindow.ExecWB 4&, 2&, saveas, 0

...

schreibe ich stattdessen
oWindow.ExecWB 4&, 2&, saveas, 0

Will er mir diesem unter dem Namen saveas speichern.

Wie bekomme ich es hin

1. Den Dateinamen zu übergeben
2. Eine festen Pfad vorzugeben
3. automatisch ohne eigene manuelle Aktion speichern
Lingo73
Lingo73 25.08.2014 um 13:27:14 Uhr
Goto Top
Die Methode ExecWB steht dem User manchmal nur mit einem
kleineren (reduzierten) Befehlssatz zur Verfügung, und dann
bekommt man einen Laufzeitfehler.

Anstatt oWindow.ExecWB könntest du
den Webseiten innerHtml auch direkt speichern :

txtContent = objIE.Document.body.innerText
webtext = objIE.Document.body.outerHTML
' beziehungsweise :
txtContent = oWindow.Document.body.innerText
webtext = oWindow.Document.body.outerHTML

'File speichern
'===========================
hF = FreeFile
myPath = "c:\meineseite.htm"
Open myPath For Output As #hF
Print #hF, webtext
Close #hF
karlchristian
karlchristian 25.08.2014 um 14:26:32 Uhr
Goto Top
Hallo,

vielen dank für die Information.
Das war genau gewesen.

Gruß