Python - Selenium PhantomJS - Ошибка JSON

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

Мой python script выглядит так:

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

После выполнения я получаю следующую ошибку:

Файл "C:\my working dir\Test.py", строка 32, в run

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

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

Ответ 1

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

Ответ 2

У меня есть аналогичная проблема (переходная) при вызове 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

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

Ответ 3

Вы должны указать дополнительные параметры для определения browser, он пытается назначить desired_capabilities=desired_capabilities, который ожидает объект 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)