Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Получить все загруженные URL на странице.

webdriver
java
Теги: #<Tag:0x00007f7b654b0f40> #<Tag:0x00007f7b654b0928>

(Vladislav Kulasov) #1

На странице есть JS скрипт который делает динамический URL и дергает его. Мы не знаем что там внутри. Но знаем что URL начинается на c http://domain/click.
Мне нужно знать:

  1. Что URL был вызван, т.е. браузер его вызывал
  2. Статус ответа сервера на этот URL (желательно)
  3. Вернуть URL для последующего парсинга (+ дернуть еще раз и получить статус если п.2 невозможен.)
    Спасибо всем ответившим, так как гугление не помогает.

(5am) #2

webdriver может вернуть pagesource
из него парсингом или регулярками можно получить необходимый урл
через httrequest можно получить респонс по урлу => код ответа

а вот по п.1 - врятле это можно проверить “обычными” способами.
этот УРЛ ведет на ваш сервер или на сторонний ?


(Vladislav Kulasov) #3

Проблема в том что если пользователь кликает на рисунок то вызывается http://domain/click в котором передаются параметры и мне нужно знать: 1. что параметры были переданы и 2. что сервер принял эти параметры. Если я буду сам составлять URL, то я не проверю, что например скрипт поломался и был вызван/не вызван URL и то что параметры были / не были переданы. Сервер наш, но логи парсить - не выход.


(Vladislav Kulasov) #4

Нашел в хроме chrome://net-internals/#events думаю можно будет использовать


(5am) #5

вместо парсинга, можно попросить девелоперов сделать api метод, в который передавать урл (например) в ответ получить необходимую информацию


(Александр Таранков) #6

Кажется удобным использовать для этой задачи прокси. Я бы в эту сторону покопал. Для программной инициализации и работы из кода можно использовать BrowserMobProxy, например


(Vladislav Kulasov) #7

Всем спасибо.
Сделал так для хрома, может кому пригодится

private void startRequestLog() throws Exception {
    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("window.open(\"about:blank\", \"_blank\");", driver.findElement(By.cssSelector("body")));

    mainTab = driver.getWindowHandle();
    ArrayList<String> newTab = new ArrayList<>(driver.getWindowHandles());
    logTab = newTab.get(1);
    // change focus to log tab
    driver.switchTo().window(logTab);
    driver.get("chrome://net-internals/#events");
    driver.findElement(By.id("events-view-filter-input")).sendKeys("URL_REQUEST");
    // change focus back to main tab
    driver.switchTo().window(mainTab);
}

private List<String> getRequestLogs(String filter){
    List<String> result = new ArrayList<>();
    driver.switchTo().window(logTab);
    List<WebElement> eventsTD = driver.findElements(By.xpath("//table[@id='events-view-source-list-table']/tbody/tr/td"));
    for (WebElement eventTD : eventsTD){
        if (eventTD.getText().contains(filter))
            result.add(eventTD.getText());
    }
    
    driver.switchTo().window(mainTab);
    return result;
}