Daten aus passwortgeschützte Seite herunterladen Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

songoku
Posts: 73
Joined: 12 Apr 2018, 13:22

Daten aus passwortgeschützte Seite herunterladen

26 Feb 2019, 17:26

Guten Abend,
Wie kann ich mit UrlDownloadToFile eine Seite herunterladen, die nur nach einem Login mit Benutzername und Passwort sichtbar ist?
Benutzername und Passwort habe ich bereits in Internet Explorer eingegeben und gespeichert. Ein Häkchen bei Angemeldet bleiben ist gesetzt.
Wenn ich versuche, mit UrlDownloadToFile eine Seite Herunterzuladen, wird nur die Anmelde-Maske heruntergeladen.

Gibt es irgendeine Möglichkeit die Seite herunterzuladen ?

vielen Dank und Grüße
User avatar
Scr1pter
Posts: 1272
Joined: 06 Aug 2017, 08:21
Location: Germany

Re: Daten aus passwortgeschützte Seite herunterladen

27 Feb 2019, 08:38

Hi,

Wie wäre es, wenn du deinen bisherigen Code und/oder ein konkretes Beispiel postest?
Denn so, wie du es jetzt beschrieben hast, kann ich dir definitiv nicht helfen.

Grüße
Please use [code][/code] when posting code!
Keyboard: Logitech G PRO - Mouse: Logitech G502 LS - OS: Windows 10 Pro 64 Bit - AHK version: 1.1.33.09
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Daten aus passwortgeschützte Seite herunterladen

27 Feb 2019, 09:12

Der code ist in seinem post beschrieben:

Code: Select all

UrlDownloadToFile, someUrl, someFile
Wobei url und file durch die echte url und Dateinamen ersetzt werden.
UrlDownloadToFile verwendet nicht deine vollständigen Daten vom Internet Explorer. Ich kann mir vorstellen, dass Anmeldedaten dazu gehören.
In diesem Fall müsstest du ein InternetExplorer COMObject verwenden um InternetExplorer zu automatisieren - eventuell reicht es wenn du direkt die Seite besuchst, da du ja da eingeloggt bist.
Andernfalls musst du den IE so steuern, dass du dich einloggst.
Recommends AHK Studio
gregster
Posts: 9002
Joined: 30 Sep 2013, 06:48

Re: Daten aus passwortgeschützte Seite herunterladen

27 Feb 2019, 10:18

Ich hab in diesem Zusammenhang, sich einmal einloggen (+ merken) und dann den Browser automatisieren, zuletzt gute Ergebnisse mit der Bibliothek Chrome.ahk erzielt (du musst darauf achten, wieder das gleiche Chrome-Profil zu verwenden, wie beim Einloggen).

Ob das mit jeder Seite (oder den meisten) funktioniert oder ich bislang nur Glück hatte, bliebe auszuprobieren... ;)
songoku
Posts: 73
Joined: 12 Apr 2018, 13:22

Re: Daten aus passwortgeschützte Seite herunterladen

28 Feb 2019, 14:01

Danke für eure Antworten,
mit Chrome.ahk funktioniert es, an die entsprechende Seite wird navigiert, ohne Passwort abfrage.
Wenn ich es versuche an den Quellcode der Seite zu kommen, bekomme folgende Meldung:

Specifically: {"code":-32000,"message":"Agent is not enabled."}

Code: Select all

kuelle := PageInstance.Call("Page.getResourceContent", {"frameId": "A8916E61EC0944275FE038BAAA55EFFB", "url": "https://www.autohotkey.com/"}).content
msgbox, % kuelle
Hat irgendjemand eine Idee, wie ich den Quellcode einer Seite in einer Variable speichern kann ?

schöne Grüße
gregster
Posts: 9002
Joined: 30 Sep 2013, 06:48

Re: Daten aus passwortgeschützte Seite herunterladen

28 Feb 2019, 14:37

Normalerweise müsste die Seite mit

Code: Select all

html := PageInstance.Evaluate("document.getElementsByTagName('html')[0].outerHTML;").Value
gehen. Ich weiß aber nicht, wie das mit Frames ist... und ich kanns zur Zeit nicht testen.

Die Chrome Doku von Google ist selbst etwas spärlich, aber der Fehler mit dem nicht aktivierten Agent deutet darauf hin, dass du was aktivieren musst. Vielleicht

Code: Select all

PageInstance.Call("DOM.enable")
; oder
PageInstance.Call("Page.enable")
Oder was ähnliches... :) (aber die beiden gibt es jedenfalls) Ich probier später (morgen) auch mal, falls du nicht weiterkommst.
songoku
Posts: 73
Joined: 12 Apr 2018, 13:22

Re: Daten aus passwortgeschützte Seite herunterladen

28 Feb 2019, 16:15

Danke, @gregster
Dein Code funktioniert, bei eine Seite wie https://www.autohotkey.com/ Wunderbar.
Bei meiner Seite leider nicht.

Code: Select all

html := PageInstance.Evaluate("document.getElementsByTagName('html')[0].outerHTML;").Value
msgbox, %html%
FileAppend, %html%, kuelle.txt
schöne Grüße
gregster
Posts: 9002
Joined: 30 Sep 2013, 06:48

Re: Daten aus passwortgeschützte Seite herunterladen

28 Feb 2019, 18:23

Dann wird's womöglich knifflig. Ich arbeite mich derzeit (ganz langsam) durch die Dokumentation und probiere viel rum (und versuche, mir ein paar Hilfsfunktionen zu basteln), aber ich lese in der Regel gezielt einzelne Werte aus. Dabei habe ich mir über Frames bislang wenig Gedanken gemacht (aber die scheinen grundsätzlich knifflig zu sein) - denn bislang konnte ich alles auslesen, was ich brauchte (den kompletten HTML-Code der Seite hab ich höchstens mal zu Testzwecken runtergeladen).

Mittelfristig plane ich ein paar systematische Tests mit verschiedenen Seiten. Ich nehme an, die Website, die du automatisieren willst, ist nicht öffentlich zugänglich? Tests am eigentlichen Objekt des Interesses sind doch immer am effektivsten... oder hat die Seite zufällig eine API-Schnittstelle? Nicht dass deren Nutzung immer einfacher wäre, aber manchmal schon.
gregster
Posts: 9002
Joined: 30 Sep 2013, 06:48

Re: Daten aus passwortgeschützte Seite herunterladen  Topic is solved

05 Mar 2019, 03:42

gregster wrote:
28 Feb 2019, 14:37
[...] der Fehler mit dem nicht aktivierten Agent deutet darauf hin, dass du was aktivieren musst. Vielleicht

Code: Select all

PageInstance.Call("DOM.enable")
; oder
PageInstance.Call("Page.enable")
@songoku: So, hatte nun schließlich Zeit, mir die Frames mal genauer anzuschauen und habe das Beispiel autohotkey.com aufgegriffen, mit dem du oben Probleme hattest. Ich konnte das "Agent is not enabled"-Problem tatsächlich durch PageInst.Call("Page.enable") lösen.

Autohotkey.com hat ja selbst den eigentlichen Hauptframe und nur einen einzigen Childframe - letzterer ist die Slideshow mit den Codebeispielen (https://www.autohotkey.com/codeexamples.html) bei A peek at the syntax...
childframe1.jpg
childframe1.jpg (33.38 KiB) Viewed 2634 times
(ObjTree.ahk ist eine Bibliothek von HotKeyIt, die man nutzen kann, um sich einen Überblick über die Struktur und Inhalte eines Objekts zu machen - hier nicht notwendig, aber nützlich ;) Die AHK-v1-Version wird nicht mehr gewartet, funktioniert aber noch)

Zum Code (ich gehe hier davon aus, dass du Chrome schon auf autohotkey.com gelotst hast) - der Quellcode des Childframes wird in der finalen msgbox ausgegeben...

Code: Select all

Space:: 
PageInst.Call("Page.enable")					; "Agent" aktivieren
fTree := PageInst.Call("Page.getFrameTree")		; die ID's ändern sich bei jedem Neustart
;objtree(fTree)

; Hauptframe:
id := fTree.frameTree.frame.id
url := fTree.frameTree.frame.url
msgbox % "Hauptframe - id : " id "`nurl : " url

; Childframe:
id1 := fTree.frameTree.childframes[1].frame.id
url1 := fTree.frameTree.childframes[1].frame.url
msgbox % "Childframe - id1 : " id1 "`nurl1 : " url1 

res := PageInst.Call("Page.getResourceContent", {"frameId": id1 , "url": url1})
;objtree(res)
msgbox, % "content:`n" res.content
return

Ps.: Da Page.getFrameTree auch die URLs der Frames liefert, könnte man theoretisch auch zum jeweiligen Frame navigieren und dann die andere Methode von weiter oben verwenden... aber wäre natürlich aufwendiger und wahrscheinlich langsamer
songoku
Posts: 73
Joined: 12 Apr 2018, 13:22

Re: Daten aus passwortgeschützte Seite herunterladen

05 Mar 2019, 11:03

@gregster vielen Dank für deine Mühe.
Bekomme es leider nicht hin, entweder stelle ich mich extrem Dumm an oder habe etwas Entscheidendes nicht verstanden.

Code: Select all

#Include Chrome.ahk

FileCreateDir, ChromeProfile
ChromeInst := new Chrome("ChromeProfile")
PageInstance := ChromeInst.GetPage()

PageInstance.Call("Page.navigate", {"url": "https://www.autohotkey.com/"})
PageInstance.WaitForLoad()

PageInst.Call("Page.enable")					; "Agent" aktivieren
fTree := PageInst.Call("Page.getFrameTree")		; die ID's ändern sich bei jedem Neustart
;objtree(fTree)

; Hauptframe:
id := fTree.frameTree.frame.id
url := fTree.frameTree.frame.url
msgbox % "Hauptframe - id : " id "`nurl : " url

; Childframe:
id1 := fTree.frameTree.childframes[1].frame.id
url1 := fTree.frameTree.childframes[1].frame.url
msgbox % "Childframe - id1 : " id1 "`nurl1 : " url1 

res := PageInst.Call("Page.getResourceContent", {"frameId": id1 , "url": url1})
;objtree(res)
msgbox, % "content:`n" res.content
return

PageInstance.Disconnect()

ExitApp
gregster
Posts: 9002
Joined: 30 Sep 2013, 06:48

Re: Daten aus passwortgeschützte Seite herunterladen

05 Mar 2019, 11:16

Vorsicht, du verwendest PageInstance, ich PageInst... beide hast du jetzt gemischt.
(ist mir auch schon passiert - leider scheitert das Ganze dann ohne erkennbare Fehlermeldung)
songoku
Posts: 73
Joined: 12 Apr 2018, 13:22

Re: Daten aus passwortgeschützte Seite herunterladen

05 Mar 2019, 11:35

Genial, funktioniert wunderbar.
Nochmal vielen Dank.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 104 guests