[WD+python] Как поймать GET запрос?

python
webdriver
Теги: #<Tag:0x00007fedc7b28920> #<Tag:0x00007fedc7b28768>

(Alexander Petrovich) #1

Привет!

В тесте необходимо проверить отправку GET запроса при наведении мыши на некий объект. Если кто научит/направит - буду премного благодарен

 


Пример использования ChromeDriver + Python + Browsermob proxy
(Mykhailo Poliarush) #2

в webdrier таких средств нету.

тут несколько путей, или писать самому используя urllib

или подключить browsermob proxy https://github.com/webmetrics/browsermob-proxy и использовать его

второй вариант, более правильнее

// start the proxy
ProxyServer server = new ProxyServer(4444);
server.start();

// get the Selenium proxy object
Proxy proxy = server.seleniumProxy();

// configure it as a desired capability
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, proxy);

// start the browser up
WebDriver driver = new FirefoxDriver(capabilities);

// create a new HAR with the label "yahoo.com"
server.newHar("yahoo.com");

// open yahoo.com
driver.get("http://yahoo.com");

// get the HAR data
Har har = server.getHar();

(Mykhailo Poliarush) #3

а вот как это можно сделать на python

from browsermobproxy import Server
server = Server("path/to/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.co.uk")
proxy.har # returns a HAR JSON blob

proxy.stop()
driver.quit()

(Alexander Petrovich) #4

Туплю… Установил pip install browsermob-proxy

Не могу нигде найти бинарник

Потом в приступе безысходности скачал http://cloud.github.com/downloads/webmetrics/browsermob-proxy/browsermob-proxy-2.0-beta-6-bin.zip
Разархивировал, и когда в примере указываю путь к бинарнику, матерится таким логом:

Traceback (most recent call last):
  File "test_request_tracking.py", line 12, in <module>
    server.start()
  File "/usr/local/lib/python2.7/dist-packages/browsermobproxy/server.py", line 44, in start
    self.process = Popen(self.command, stdout=PIPE, stderr=STDOUT)
  File "/usr/lib/python2.7/subprocess.py", line 679, in init
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1239, in _execute_child
    raise child_exception
OSError: [Errno 13] Permission denied

(Mykhailo Poliarush) #5

ну у тебя ошибка в том, что файл запуска браузер-прокси не найден

показывай скрипт, который ты делал

куда качал и розархивировал файлы browsermob-proxy


(Taras) #6

http client library от Apache пробовали юзать ?


(Alexander Petrovich) #7

Для побаловаться взял код выше

from selenium import webdriver
from browsermobproxy import Server
 
server = Server("/home/user/Downloads/browsermob-proxy-2.0-beta-6/bin/browsermob-proxy")
server.start()
proxy = server.create_proxy()
 
profile  = webdriver.FirefoxProfile()
profile.set_proxy(proxy.selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)
 
proxy.new_har("google")
driver.get("http://www.google.co.uk")
proxy.har # returns a HAR JSON blob
 
proxy.stop()
driver.quit()

(Mykhailo Poliarush) #8

так как у тебя показывает OSError: [Errno 13] Permission denied

попробуй запустить из root


(Alexander Petrovich) #9

Не помогло. Сейчас попробую посносить всё связанное с браузермобом и повторю


(Alexander Petrovich) #10

Так, с правами разобрался. Теперь у меня проблема возникла с firefox_profile

driver = webdriver.Firefox(firefox_profile=profile)
================================================================ ERRORS ================================================================
__________________________ ERROR collecting test_request_tracking.py _________________________
test_request_tracking.py:17: in <module>
   driver = webdriver.Firefox(firefox_profile=profile)
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py:51: in init
           self.binary, timeout),
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/extension_connection.py:47: in init
       self.binary.launch_browser(self.profile)
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py:44: in launch_browser
      self._wait_until_connectable()
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py:86: in _wait_until_connectable
                        self.profile.path, self._get_firefox_output()))
E               WebDriverException: Message: "Can't load the profile. Profile Dir: /tmp/tmpcux7FH Firefox output: * LOG addons.xpi: startup\n* LOG addons.xpi: checkForChanges\n*** LOG addons.xpi: No changes found\n"

никогда не пользовался последним…

upd В догонку, можно обойтись без профиля? В приоритете Chrome, в файрфоксе пытаюсь просто понять работу на примере


(Mykhailo Poliarush) #11

опять у тебя проблемы :) сколько можно :)

какую версию ФФ ты используешь? попробуй скачать самый последний дистрибутив

если тебе нужно на хроме, так все и на хроме делай 

можешь написать аналог кода с джавы на питон?

http://automated-testing.info/forum/kak-poymat-get-zapros#comment-3208


(Alexander Petrovich) #12

Снова я…

Запилил в хроме, вроде заработало, даже возвращает что-то.

{u'log': 
        {
        u'version': u'1.1',
        u'creator': 
                {u'version': u'2.0',
                 u'name': u'BrowserMob Proxy'},
        u'pages': [{u'title': u'', 
                        u'startedDateTime': u'2012-10-19T12:54:05.882+0000',
                         u'id': u'google',
                         u'pageTimings': {}}],
                         u'entries': []}}

Собственно беда в том, что чтобы я не воротил в тесте, возвращает то же самое :frowning:

PS Никак не могу толкового мануала нагуглить с живым примером и готовым аутпутом, чтобы было видно куда копать


(Mykhailo Poliarush) #13

ну высылай пример, я полробую у себя


(Alexander Petrovich) #14

Завтра с работы отправлю. Проекта под рукой нет.


(Alexander Petrovich) #15

.

# -- coding: utf-8 --

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException, ElementNotVisibleException
from browsermobproxy import Server
 
server = Server("/home/user/Downloads/browsermob-proxy-2.0-beta-6/bin/browsermob-proxy")
server.start()
proxy = server.create_proxy()
 
driver = webdriver.Chrome()
 
driver.get("http://google.com.ua/")
driver.find_element_by_id("gbqfsb").click()
# После этого клика в консоли явно вижу уходят запросы
# Например:
# Request URL:http://www.google.com/doodles/finder/
# Request Method:GET
# Объясни, пожалуйста, как отловить этот запрос браузермобом
 
# И как примерно должен выглядеть аутпут?
 
driver.quit()
```

(Mykhailo Poliarush) #16

рабочий пример выложил на блог с некоторым описанием, если вдруг кому понадобиться

http://poliarush.com/working/development/chromedriver-python-browsermob-proxy.html


(Alexander Petrovich) #17

Миша, спасибо! Работает. Только пришлось попариться со структурой лога, чтобы найти там то-что нужно :)


(Taras) #18

Я все сделал на Java так же - подключил browser-mob proxy

У меня не отображаеться flash контент и разние плагини

Пишет load error 2036 на месте контента

может я dependency не то покдлючил ??

Помогите, целий день потратил на ето (

Пример брал с сайта

dependency на либу

<dependency>
        <groupId>org.browsermob</groupId>
        <artifactId>browsermob-proxy</artifactId>
        <version>2.0-beta-2</version>
</dependency>

код:

WebDriver webDriver = null;
 
DesiredCapabilities capabilities = new DesiredCapabilities();
server.start();
 
Proxy proxy = server.seleniumProxy();
capabilities.setCapability(CapabilityType.PROXY, proxy);
if (FIREFOX.equals(browserName)) {
 
webDriver = new FirefoxDriver(capabilities);
}

скрин єкрана, - контента нету, там где красним


(Mykhailo Poliarush) #19

создавай отдельную тему, так как тут только python обсуждался

будем смотреть, пока что с ходу могу только предположить, что контент возможно лежит на другом сервере.

и надо будет добавить эти сервера в прокси

хотя это чисто предложение


(Taras) #20

сделал так:

public static ProxyServer server = new ProxyServer(9090); 

server.start();
server.setCaptureContent(true);
server.setCaptureHeaders(true);
Proxy proxy = new Proxy().setHttpProxy("localhost:9090");
 
capabilities.setCapability(CapabilityType.PROXY, proxy);
 
 webDriver  = new FirefoxDriver(capabilities); 

вроде как работает.