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

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

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

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

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

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

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

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

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

1 лайк

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

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;
}