wake-up-neo.com

Wie installiere ich PhantomJS für die Verwendung mit Python Selenium auf dem Raspberry Pi?

Ich möchte ein Python-Skript mit Selenium WebDriver und PhantomJS als headless-Browser auf meinemRaspberry Piausführen.

Ich habe das Skript ursprünglich in OS X geschrieben, wo es gut funktioniert. Aber beim Versuch, die Himbeere zum Laufen zu bringen, habe ich Probleme.

Beim Versuch, das Skript auszuführen, wird folgende Fehlermeldung angezeigt:

raise WebDriverException("Can not connect to the Service %s" % self.path)
Selenium.common.exceptions.WebDriverException: Message: Can not connect to the Service /usr/bin/phantomjs

Kurzfassung des Skripts:

from Selenium import webdriver
from Selenium.webdriver.common.desired_capabilities import DesiredCapabilities

user_agent = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) " +
    "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36")

dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = user_agent

serv_args = ["--ignore-ssl-errors=false", "--ssl-protocol=tlsv1", 
    "--disk-cache=false"]

driver = webdriver.PhantomJS(executable_path="/usr/bin/phantomjs", 
    desired_capabilities = dcap, service_arguments = serv_args, port=65000)

Ich habe gesehen, dass andere Leute ähnliche Probleme haben - mit unterschiedlichen Lösungen - die meisten scheinen darin zu bestehen, PhantomJS selbst zu erstellen oder einen für Raspberry angepassten Github-Zweig zu klonen und zu installieren (der jetzt nicht mehr mit dem Hauptprojekt von PhantomJS synchron ist).

Fragen

  • Weiß jemand, wie man das Problem löst - und worum geht es wirklich?
  • Wenn die Lösung darin besteht, die Binärdateien manuell in /usr/local/bin zu installieren, wie würde ich das tun? Die auf der PhantomJS-Webseite verfügbaren Binärdateien sind für linux-x86 und linux-i686 bestimmt, daher gehe ich davon aus, dass sie auf einem Raspberry Pi 2 B ARM Cortex A-7-Prozessornicht funktionieren. _.
  • Ich habe auch versucht, PhantomJS selbst nach diesen Anweisungen zu bauen, aber der Prozess ist auf halbem Weg eingefroren. Die Himbeere erfüllt auch nicht die empfohlenen Hardwareanforderungen für den Bau.

Hintergrundinformation

  • Ich benutze Python 2.7.9
  • Ich habe eine virtualenv erstellt und alle Python-Module darin installiert. z.B. pip install Selenium, und versuchen Sie, das Skript hier auszuführen
  • Ich habe die neueste Version von PhantomJS über Sudo apt-get install phantomjs installiert.
  • Ich habe meine ufw Firewall beim Testen deaktiviert
8
Winterflags

Ok, ich fange mit der Lösung an, es gibt eine kompilierte Version für Arm hier phantomjs-linux-armv6l , auf der Pi-Kommandozeile die folgenden Befehle ausführen:

$ cd /tmp
$ wget https://github.com/aeberhardo/phantomjs-linux-armv6l/archive/master.Zip
$ unzip master.Zip
$ cd phantomjs-linux-armv6l-master
$ bunzip2 *.bz2 && tar xf *.tar

Ich fügte hinzu:

Sudo cp phantomjs-1.9.0-linux-armv6l/bin/phantomjs  /usr/bin

Phantomjs werden also auf Ihrem Weg sein.

[email protected] ~ $ phantomjs --version
1.9.0

[email protected] ~ $ phantomjs
phantomjs> 

Jetzt haben wir das getan, Zeit zum Testen:

[email protected] ~ $ cat test.py
#!/usr/bin/python
from Selenium import webdriver

driver = webdriver.PhantomJS()
driver.get('http://stackoverflow.com/questions/36314771/how-to-install-phantomjs-for-use-with-python-Selenium-on-the-raspberry-pi/36388824#36388824')
a = driver.find_element_by_xpath('//*[@id="question-header"]/h1/a')
print(a.text)
print(driver)
[email protected] ~ $ python test.py 
How to install PhantomJS for use with Python Selenium on the Raspberry Pi?
<Selenium.webdriver.phantomjs.webdriver.WebDriver (session="b184e110-f9c4-11e5-aede-7f5c42f062d7")>

Aus der faq . Ab PhantomJS 1.5 ist es ein reiner Headless und es ist nicht mehr nötig, X11/Xvfb auszuführen. .

Ich habe versucht, mit xvfb-run zu exportieren und die Anzeige zu exportieren, ein Shell-Skript in init.d zu verwenden, um xvfb zu starten. Ich bekam ein wenig weiter die Möglichkeit, iceweasel von bash headless zu starten, kein Problem, aber immer noch keine Zigarre kam zu phantomjs und Selenium. Ich denke, es kann nur zu einer Inkompatibilität zwischen Selenium und der Version von Phantomjs kommen, egal ob 1.9.0 und echtes Headless-Browsing viel wünschenswerter ist. 

Ich war gerade dabei, eine Toolchain einzurichten, und wollte versuchen, mich selbst zu kompilieren, als ich den Link oben fand. Für alle, die an Cross-Compilieren interessiert sind, macht crosstools-ng das Leben viel einfacher.

Ich betreibe einen arm6, es gibt auch eine kompilierte Version für arm7 mit 2.0.0, die Abhängigkeiten sind:

Sudo apt-get install flex bison gperf Ruby Perl libsqlite3-dev libfontconfig1-dev libicu-dev libfreetype6 libssl-dev libpng-dev libjpeg-dev python libX11-dev libxext-dev

Die Installationsprozedur habe ich in die Dropbox entpackt:

wget https://www.dropbox.com/s/epj1rji9d239dco/phantomjs
chmod +x phantomjs
Sudo cp phantomjs /usr/bin

Der ursprüngliche Github-Link lautet phantomjs-2.0.0-armv7

15

Laden Sie diese Phantomjs-Datei herunter https://drive.google.com/open?id=1x063Krw6mZkRYW4K238a3EyRdklj5Evj

In gewünschten Ordner ersetzen.

Gib 777 chmod: chmod 777 phantomjs

Und versuchen Sie es zu verwenden.

Für Grafana muss sich die phantomjs-Datei in einem Ordner befinden: /usr/share/grafana/tools/phantomjs/.

Diese Binärdatei funktioniert für mich auf Banana pi M3 Debian 9. Architektur: arm armv7l. Kernel 4.20.7-sunxi

0
user3500968

So habe ich es gemacht:

For 64-bit system, download phantomjs-1.9.7-linux-x86_64.tar.bz2 (12.6 MB).
For 32-bit system, download phantomjs-1.9.7-linux-i686.tar.bz2 (12.9 MB).

Step 1> $ wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.7-linux-x86_64.tar.bz2

Step 2> $ tar -xvf phantomjs-1.9.7-linux-x86_64.tar.bz2

Step 3> $ cd phantomjs-1.9.7-linux-x86_64

Step 4> $ cd bin

Step 5> $ Sudo cp phantomjs /usr/bin

To check phantomjs installed properly perform the following step : 

Step 6> $ phantomjs -h

To install the dependencies on Red Hat based systems:

Step 7> $ Sudo yum install fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc++.so.6
0
ahmed.soli