Webseiteninhalte mit PowerShell lesen und als .txt speichern?
Hallo Skript-Experten,
ich bin mal wieder dabei, die Reisepreise von AIDA Vario zu beobachten (www.aida.de/vario, insgesamt ca. 12 Seiten). Mein AutoIT-Skript soll eigentlich alle Folgeseiten lesen, und macht das sehr unterschiedlich: auf Windows 8.1 geht es meistens gut, auf Windows 7 geht es manchmal bis zur Seite 2 oder 3 und dann nicht weiter. Ich habe wochenlang probiert, das AutoIt-Skript so zu codieren, dass es immer funktioniert, aber nun habe ich aufgegeben.
Deshalb habe ich jetzt versucht, das Auslesen der Seiten mit PowerShell zu probieren, aber ich kriege das leider nicht hin. Dies ist der Stand meiner bisherigen Bemühungen:
Abgesehen davon, dass noch ein Aussprung beim Fehlen einer bestimmten Zeichenfolge (keine "nächste Seite") und die Seitenzahl für die Ausgabedateien 2stellig nötig werden, kommt in den .txt-Dateien nur der Basis-Code der Seite an, nicht aber der interpretierte und angezeigte Code (da sind wohl Java-Skript Codings, die erst noch vom Browser aufgelöst werden müssen, und deren Auflösung brauche ich halt in den .txt-Dateien). Das Parsen der Beträge und deren Weiterleitung in eine Datenbank habe ich relativ stabil in ABAP programmiert.
Es wäre sehr schön, hier wieder mal eine Hilfestellung zu bekommen. Vielen Dank im Voraus. - La Mancha
ich bin mal wieder dabei, die Reisepreise von AIDA Vario zu beobachten (www.aida.de/vario, insgesamt ca. 12 Seiten). Mein AutoIT-Skript soll eigentlich alle Folgeseiten lesen, und macht das sehr unterschiedlich: auf Windows 8.1 geht es meistens gut, auf Windows 7 geht es manchmal bis zur Seite 2 oder 3 und dann nicht weiter. Ich habe wochenlang probiert, das AutoIt-Skript so zu codieren, dass es immer funktioniert, aber nun habe ich aufgegeben.
Deshalb habe ich jetzt versucht, das Auslesen der Seiten mit PowerShell zu probieren, aber ich kriege das leider nicht hin. Dies ist der Stand meiner bisherigen Bemühungen:
$sPath1 = "C:\Gm\GmPowerShell\test_"
$sPath2 = ".txt"
$sURL1 = "http://www.aida.de/kreuzfahrt/angebote-buchen/preise-ermaessigungen/aida-vario.19095.html?tx_aidadyncatalog_vario%5Bpage%5D="
For ($sPage=0; $sPage -le 9; $sPage++) {
$sPath = $sPath1 + $sPage + $sPath2
Write-Host $sPath
$sURL = $sURL1 + $sPage
Write-Host $sURL
Invoke-WebRequest -Uri $sURL -Method Get -OutFile $sPath
}
Es wäre sehr schön, hier wieder mal eine Hilfestellung zu bekommen. Vielen Dank im Voraus. - La Mancha
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 272186
Url: https://administrator.de/contentid/272186
Ausgedruckt am: 25.11.2024 um 14:11 Uhr
3 Kommentare
Neuester Kommentar
Moin,
Wenn man das analysiert hat kommt man meistens viel schneller und cleaner an die Daten anstatt den Inhalt einer sich möglicherweise stetig verändernden Webseitenstruktur auszulesen.
Was aber nicht geht, ist das triggern des Java-Scripts, das machen nur Browserinstanzen, aber nicht die Funktion invoke-webrequest, weil dies nur ein einfacher HTTP-Client ist !!
Für sowas brauchst du einen Headless-Browser der den Inhalt des DOM rendert ohne ihn darstellen zu müssen. Sowas ist zum Beispiel HtmlUnit
Gruß jodel32
-edit- bei deiner AIDA-Seite musst du diverse Dinge berechnen und als POST-Anfrage an die Seite schicken, damit sie die Daten herausrückt. Da bleibt dir nur das JavaScript zu analysieren und dann die benötigten Daten an die Seite via POST-Request zu schicken. Ansonsten kannst du den IE auch aus Powershell fernsteuern, aber das wäre dann das selbe wie mit AutoIt oder VBS
da sind wohl Java-Skript Codings, die erst noch vom Browser aufgelöst werden müssen, und deren Auflösung brauche ich halt in den .txt-Dateien
um die Daten zu erhalten musst du die Scripte analysieren wie und über welche URLs es die Daten abfragt und dir die URLs zusammenbauen um die Daten zu erhalten. Meist geschieht das via Ajax und die Rûckgabe der Daten als json.Wenn man das analysiert hat kommt man meistens viel schneller und cleaner an die Daten anstatt den Inhalt einer sich möglicherweise stetig verändernden Webseitenstruktur auszulesen.
Was aber nicht geht, ist das triggern des Java-Scripts, das machen nur Browserinstanzen, aber nicht die Funktion invoke-webrequest, weil dies nur ein einfacher HTTP-Client ist !!
Für sowas brauchst du einen Headless-Browser der den Inhalt des DOM rendert ohne ihn darstellen zu müssen. Sowas ist zum Beispiel HtmlUnit
Gruß jodel32
-edit- bei deiner AIDA-Seite musst du diverse Dinge berechnen und als POST-Anfrage an die Seite schicken, damit sie die Daten herausrückt. Da bleibt dir nur das JavaScript zu analysieren und dann die benötigten Daten an die Seite via POST-Request zu schicken. Ansonsten kannst du den IE auch aus Powershell fernsteuern, aber das wäre dann das selbe wie mit AutoIt oder VBS
Zitat von @LaMancha:
Mein Weltbild ist derzeit so, dass sowohl AutoIt als auch PowerShell das Internet Explorer Framework in
Anspruch nehmen (InternetExplorer.Application object).
Richtig, denn nur damit lässt sich das JavaScript clientseitig parsen und somit die Seite auflösen...Mein Weltbild ist derzeit so, dass sowohl AutoIt als auch PowerShell das Internet Explorer Framework in
Anspruch nehmen (InternetExplorer.Application object).
AutoIt bietet eigene Funktionen, um die Funktionen der Application aufzurufen, welche mir die benötigten Daten liefern:
Die aber auch nur auf das COM-Object des IE zugreifen !Es müsste doch eigentlich etwas
Ähnliches auch in PowerShell geben. Oder sehe ich die Welt falsch?
Nope ... Wie gesagt nur über Zusatztools, oder eben in Powershell auch das IE-Objekt nutzen.Ähnliches auch in PowerShell geben. Oder sehe ich die Welt falsch?
$objIE = New-Object -Com InternetExplorer.Application