web-dev-qa-db-fra.com

Comment installer PhantomJS pour une utilisation avec Python Selenium sur le Raspberry Pi?

Je souhaite exécuter un script Python en utilisant Selenium WebDriver avec PhantomJS en tant que navigateur sans navigateur sur monRaspberry Pi _ exécutant Raspbian.

À l'origine, j'avais écrit le script sous OS X où tout fonctionnait bien. Mais en essayant de le faire fonctionner sur la framboise, j'ai des problèmes.

En essayant d'exécuter le script, j'obtiens cette erreur:

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

Brève version du script:

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)

J'ai vu d'autres personnes avoir des problèmes ressemblant au mien - avec des solutions variées - la plupart semblent impliquer de construire vous-même PhantomJS, ou de cloner et d'installer une branche Github adaptée à Raspberry (qui n'est plus synchronisée avec le projet principal PhantomJS).

Des questions

  • Est-ce que quelqu'un sait comment résoudre le problème - et en réalité, de quoi s'agit-il?
  • Si la solution implique l'installation manuelle des fichiers binaires sur /usr/local/bin ou autre, comment procéderais-je? Les fichiers binaires disponibles sur la page Web PhantomJS sont destinés à linux-x86 et linux-i686; je suppose donc qu'ils ne fonctionneront pas avec un processeur Raspberry Pi 2 B _ {ARM Cortex A-7} _.
  • J'ai également essayé de construire moi-même PhantomJS conformément à ces instructions , mais le processus a été gelé à mi-parcours. Le Raspberry ne répond pas non plus à la configuration matérielle recommandée pour la construction.

Informations de fond

  • J'utilise Python 2.7.9
  • J'ai créé un virtualenv et installé tous les modules Python qu'il contient. par exemple. pip install Selenium et essayez d'exécuter le script ici
  • J'ai installé la dernière version de PhantomJS via Sudo apt-get install phantomjs
  • J'ai désactivé mon pare-feu ufw lors du test
8
Winterflags

Ok, je vais commencer par la solution, il existe une version compilée pour arm ici phantomjs-linux-armv6l , sur la commande pi, exécutez les commandes suivantes:

$ 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

J'ai ajouté:

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

Donc, les fantômes seront sur votre chemin.

pi@raspberrypi ~ $ phantomjs --version
1.9.0

pi@raspberrypi ~ $ phantomjs
phantomjs> 

Nous avons maintenant terminé, il est temps de tester:

pi@raspberrypi ~ $ 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)
pi@raspberrypi ~ $ 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")>

De la faq . À partir de PhantomJS 1.5, il est sans tête et il n’est plus nécessaire de lancer X11/Xvfb. .

J'ai essayé d'utiliser xvfb-run et d'exporter l'affichage en utilisant un script Shell dans init.d pour démarrer xvfb. est venu à Phantomjs et Selenium. Je pense que cela pourrait bien être dû à une incompatibilité entre Selenium et la version de phantomjs, même si 1.9.0 et la navigation sans tête sont bien plus souhaitables. 

J'étais en train de mettre en place une chaîne d'outils et j'allais essayer de me compiler lorsque j'ai trouvé le lien ci-dessus, pour toute personne intéressée par la compilation croisée, crosstools-ng facilite la vie beaucoup.

Je cours un arm6, il y a aussi une version compilée pour arm7 utilisant 2.0.0, les dépendances sont:

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

La procédure d'installation, j'ai extrait le binaire dans dropbox:

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

Le lien github original est phantomjs-2.0.0-armv7

15

Voici comment je l'ai fait:

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