Browsermob селен питон - JSONDecodeError - PullRequest
0 голосов
/ 29 октября 2018

Попытка получить HAR-файлы для нескольких URL-адресов с помощью browsermob-proxy с селеном в Python. Для базовой реализации я использую пример кода из документации Browsermob . Мой код ниже

from browsermobproxy import Server
import psutil
import time

server = Server(“/path/to/bin/browsermob-proxy")
server.start()
proxy = server.create_proxy()

from selenium import webdriver
profile  = webdriver.FirefoxProfile()
profile.set_proxy(proxy.selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)

proxy.new_har(“google”) 
driver.get("http://www.google.com")
print(proxy.har) #ISSUE IN THIS LINE

server.stop()
driver.quit()

Я могу инициализировать browsermob-proxy и получить селен, чтобы открыть страницу в Firefox (и Chrome). Когда он попадает в строку 'proxy.har', он выдает JSONDecodeError: Ожидаемое значение: строка 1, столбец 1 (символ 0)

Ошибка трассировки ниже

JSONDecodeError                           Traceback (most recent call last)
<ipython-input-2-f690bb4c2c08> in <module>()
----> 1 proxy.har

~/anaconda3/lib/python3.6/site-packages/browsermobproxy/client.py in har(self)
    102         r = requests.get('%s/proxy/%s/har' % (self.host, self.port))
    103 
--> 104         return r.json()
    105 
    106     def new_har(self, ref=None, options=None, title=None):

~/anaconda3/lib/python3.6/site-packages/requests/models.py in json(self, **kwargs)
    890                     # used.
    891                     pass
--> 892         return complexjson.loads(self.text, **kwargs)
    893 
    894     @property

~/anaconda3/lib/python3.6/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
    352             parse_int is None and parse_float is None and
    353             parse_constant is None and object_pairs_hook is None and not kw):
--> 354         return _default_decoder.decode(s)
    355     if cls is None:
    356         cls = JSONDecoder

~/anaconda3/lib/python3.6/json/decoder.py in decode(self, s, _w)
    337 
    338         """
--> 339         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    340         end = _w(s, end).end()
    341         if end != len(s):

~/anaconda3/lib/python3.6/json/decoder.py in raw_decode(self, s, idx)
    355             obj, end = self.scan_once(s, idx)
    356         except StopIteration as err:
--> 357             raise JSONDecodeError("Expecting value", s, err.value) from None
    358         return obj, end

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Я пытался решить эту проблему, но не могу заставить ее работать

  • Запрос GET возвращает 200
  • Пробовал некоторые функции json загружать или анализировать в utf-8 или удалять недопустимые символы
  • Попробовал SimpleJson
  • Попробовал изменить порт браузераmob
  • Пробовал в разных сетях на случай, если блок был вызван настройками прокси

Я получаю ту же ошибку, что бы я ни пытался. Сначала я думал, что проблема была с моей установкой. Вот как я это сделал:

  1. Установлен селен с использованием pip3 (с использованием Python 3.6 с Jupyter / iPython)
  2. Загруженный двоичный файл браузера с https://bmp.lightbody.net/
  3. Скачанный гекодривер
  4. Запустил прокси с помощью ./browsermob-proxy в / bin, а также попытался выбрать порт с помощью -port

У кого-нибудь были похожие проблемы, которые они решали, используя что-то кроме описанных выше?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

У меня была та же проблема при запуске Python 3.6 на OSX 10.14.

Решено переключением на Python 3.7 - работает как на Linux, так и на Mac.

0 голосов
/ 30 октября 2018

Проблема в том, что пакет browsermob-proxy не совместим с вашей версией Python. Пакет написан для Python 2.x, а вы используете Python 3.6.

...