PhantomJS Skript funktioniert nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
brau1231
User
Beiträge: 1
Registriert: Mittwoch 26. August 2020, 00:07

Hallo,

seit Stunden der Suche und mit wachsender Verzweiflung bin ich am Ende:

Ich versuche auf einem Raspberry das folgende Skript zum Laufen zu bringen, aber ich kapiere einfach nicht die Syntax.
Zugegeben bin ich ein Java Greenhorn. Aus den spärlichen Fehlermeldungen von PhantomJS habe ich die Vermutung, dass im inneren der Funktion die Variable 'output' irgendwie nicht definiert ist. Dabei übergebe ich sie doch im Funktionsaufruf.

Ich komme nicht weiter hier. Vielleicht kann da einer von Euch bitte mal drüber schauen und mir helfen ?

Die eigentliche Funktion dieses Skrips soll sein: den Wert der täglichen Niederschlagsmenge von meiner wunderground-Seite auszulesen und als Variable in der pimatic bereit zu stellen. Leider kann ich keine Coffee Datei selbst schreiben. Der Workaroud soll nun über ein Beispiel mit PhantomJS Skript erfolgen, mit dem ich über eine einfache Schnittstelle den Wert in eine Pimatic-Variable schreiben kann, um sie dann weiter zu verarbeiten.

Ich habe das Skript, am Beispiel von google.com aufgebaut. der Fehler bleibt der gleiche.

var webPage = require('webpage');
var page = webPage.create();

var url = "http://www.google.com";

page.open(url, function(status) {
if (status !== 'success') {
console.log('Unable to access network');
} else {

var output=page.plainText;
console.log("Ergebnis 1:" + output);

var searchstring = 'Anmelden';
var position = page.evaluate(function(output, searchstring) {
return output.indexOf(searchstring);
});
console.log("Position von "+searchstring+" = " + position);

}
phantom.exit();
});


Der Fehler lautet:
TypeError: undefined is not an object (evaluating 'output.indexOf')

undefined:2
:3
Position von Anmelden = null


Danke für Eure Hilfe.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Und du fragst Fragen zu einer anderen Programmiersprache in einem Forum für die Programmiersprache "Python" weil ... beides mit P anfängt? Wobei nach meinem letzten Stand "PhantomJS" eigentlich eine Art Browser ohne Anzeige ist und man den mit JavaScript steuert.
Wenn dem so ist wäre das Python-Pendant entweder requests (+BeautifulSoup) oder Selenium.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@brau1231: Die `evaluate()`-Methode erwartet eine Funktion die im Kontext der Webseite ausgeführt wird. Und zwar ohne irgendwelche Argumente übergeben zu bekommen. Du hast da aber `output` und `searchstring` als Argumente stehen. Da der Funktion keine Argumente übergeben werden, sind diese beiden Argumente innerhalb der Funktion dann eben `undefined`.

Aber `evaluate()` macht an sich auch schon keinen Sinn, denn nichts in der Funktion benötigt die Webseite als Kontext.

PhantomJS ist übrigens vor zwei Jahren mehr oder weniger eingestellt worden: https://github.com/ariya/phantomjs/issues/15344
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten