2015-09-01 2 views
11

У меня есть небольшой тестовый скрипт python, который использует Selenium и PhantomJS. Версия Python - 2.7, а PhantomJS - 1.9.2. Позже я планирую использовать это с BeautifulSoup для доступа к финансовому веб-сайту.Python - Selenium PhantomJS - ошибка JSON

Мой питон скрипт выглядит следующим образом -

from selenium import webdriver 
phantomJSPath = "C:\my working dir\\Lib\phantomjs.exe" 
browser = webdriver.PhantomJS(executable_path=phantomJSPath) 

После выполнения я получаю ошибку ниже -

Файл "C: \ мой рабочий реж \ test.py", строка 32, в перспективе

browser = webdriver.PhantomJS(executable_path=phantomJSPath) 
File "C:\Python27\lib\site- packages\selenium\webdriver\phantomjs\webdriver.py", line 56, in __init__ 
desired_capabilities=desired_capabilities) 
File "C:\Python27\lib\site- packages\selenium\webdriver\remote\webdriver.py", line 87, in __init__ 
self.start_session(desired_capabilities, browser_profile) 
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 136, in start_session 
'desiredCapabilities': desired_capabilities, 
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 196, in execute 
self.error_handler.check_response(response) 
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 102, in check_response 
value = json.loads(value_json) 
File "C:\Python27\lib\json\__init__.py", line 326, in loads 
return _default_decoder.decode(s) 
File "C:\Python27\lib\json\decoder.py", line 366, in decode 
obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
File "C:\Python27\lib\json\decoder.py", line 384, in raw_decode 
raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 

Кто-нибудь знает, почему я получаю эту ошибку?

+0

PhantomJS 1.9.2 действительно старый, и может возникнуть проблема с несовместимостью с GhostDriver и библиотекой селена. Попробуйте обновить новую версию PhantomJS, например 2.0.0, 1.9.8 или 1.9.7. –

+1

Какую версию селена вы используете? – Uri

ответ

1

У меня аналогичная проблема (переходная) при вызове browser.close() с селеном 1.9.8 работает на Ubunto 15:

File "propertunity/soup/Soup.py", line 121, in get... 
    browser.close() 
    File "/home/<user>/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 473, in close 
    self.execute(Command.CLOSE) 
    File "/home/<user>/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 201, in execute 
    self.error_handler.check_response(response) 
    File "/home/<user>/.local/lib/python2.7/site-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 338, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib/python2.7/json/decoder.py", line 366, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 

Там, кажется, известно issue с близкими() на самом деле не чистка после завершения работы с браузером. Попытайтесь изменить close(), чтобы выйти и установить для объекта браузера значение None.

+2

В отношении вышеупомянутой награды это не похоже на ту же проблему (точно). – Xodarap777

1

Вы должны указать дополнительные параметры для определения browser, он пытается назначить , который ожидает объект json. Вы можете сделать это следующим образом:

from selenium import webdriver 
phantomJSPath = "C:\my working dir\\Lib\phantomjs.exe" 
desiredCap = {'platform': 'ANY', 'browserName': 'phantomjs', 'version': '', 'javascriptEnabled': True} 
browser = webdriver.PhantomJS(executable_path=phantomJSPath, port=0, desired_capabilities=desiredCap) 
+1

Я думаю, что по умолчанию используется 'wish_capabilities', который является словарем. – Uri

2

К сожалению ответить на мой собственный щедрот, но и для тех, кто мог бы, возможно, столкнется с подобными проблемами: переменная окружения http_proxy не играют хорошо с phantomjs и селеном. Я удалил его, и все работало так, как должно было.