2017-10-17 9 views
0

Voici le repro:Pourquoi current_url déclenche-t-il "Aucun objet JSON n'a pu être décodé" avec Selenium & PhantomJS sur Ubuntu 16.04?

sudo apt install phantomjs 
export QT_QPA_PLATFORM=offscreen 
python 
>>> import selenium.webdriver 
>>> from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 
>>> browser = selenium.webdriver.PhantomJS(desired_capabilities=DesiredCapabilities.PHANTOMJS) 
>>> browser.get('http://example.com') 
>>> browser.title 
u'Example Domain' 
>>> browser.current_url 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 454, in current_url 
    return self.execute(Command.GET_CURRENT_URL)['value'] 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 201, in execute 
    self.error_handler.check_response(response) 
    File "/usr/local/lib.python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 102, in check_response 
    value = json.loads(value_json) 
    File "/usr/lib/python2.7/json/__init__.py", line 339, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib/python2.7/json/decoder.py", line 364, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 

Notes:

  • Je suis en cours d'exécution dans une machine virtuelle avec toutes les mises à jour installées (sudo apt update et sudo apt dist-upgrade ont TOURNÉ).
  • Ce problème semble également être capturé en tant que Ubuntu bug 1569899. Je n'ai pas encore essayé le correctif suggéré (build PhantomJS de tarball).
  • La variable QT_QPA_PLATFORM=offscreen est de corriger l'erreur: "QXcbConnection: Impossible de se connecter à afficher" (Debian bug 817277, problème PhantomJS 14376)

UPDATE J'ai ajouté simple print pour capturer l'état brut réponse et voici ce qu'il était:

{'status': 404, 'value': u"Error: - Unable to load Atom 'execute_script' from file ':/ghostdriver/./third_party/webdriver-atoms/execute_script.js'"} 

Répondre

1

il semble que le paquet phantomjs est simplement cassé (composants manquants). Il y a des solutions utilisant npm là-bas mais depuis que je fais Python je voulais éviter cela. Voici ce que je fini par faire pour résoudre ce problème:

unset QT_QPA_PLATFORM 
sudo apt purge phantomjs 
wget -q https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 
tar xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2 
sudo mv phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/ 

Mes autres binaires sont en /usr/local/bin mais travailleraient aussi si vous les mettez en /usr/bin.