使用Selenium如何获取网络请求

时间:2017-08-23 18:31:18

标签: java selenium-webdriver webdriver

我想使用selenium接受所有网络请求..我没有找到任何方法来找到这个解决方案。如果有人可以建议我或提供将被欣赏的代码或库。

Network Request

3 个答案:

答案 0 :(得分:10)

不完全由开发工具打开,但发现了一些网络,性能和其他结果。

是的,你可以使用JavascriptExecutor

来做到这一点

代码如下: -

ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new ChromeDriver(capabilities);
driver.get("http://www.google.com");
String scriptToExecute = "var performance = window.performance || window.mozPerformance || window.msPerformance || window.webkitPerformance || {}; var network = performance.getEntries() || {}; return network;";
String netData = ((JavascriptExecutor)driver).executeScript(scriptToExecute).toString();
System.out.println(netData);

OR

DesiredCapabilities d = DesiredCapabilities.chrome();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
d.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
WebDriver driver = new ChromeDriver(d);
driver.get("https://www.google.co.in/");
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
LogEntries les = driver.manage().logs().get(LogType.PERFORMANCE);
for (LogEntry le : les) {
    System.out.println(le.getMessage());
}

由于此JS标记,第一个代码重新启动网络return network;"。您可以删除不需要的实体的JS代码

第二个代码返回性能

希望它会对你有所帮助:)。

答案 1 :(得分:3)

对我有用

ChromeOptions options = new ChromeOptions();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable( LogType.PERFORMANCE, Level.ALL );
options.setCapability( "goog:loggingPrefs", logPrefs );
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver(options);
driver.get("http://www.google.com");
    
List<LogEntry> entries = driver.manage().logs().get(LogType.PERFORMANCE).getAll();
System.out.println(entries.size() + " " + LogType.PERFORMANCE + " log entries found");
 for (LogEntry entry : entries) {
   System.out.println(entry.getMessage());
 }

答案 2 :(得分:1)

  1. 您可以使用“ browsermob-proxy”,“ LoggingPreferences”,“ CloseableHttpClient”,“ HttpURLConnection”获取日志
  2. 如果您不想使用浏览器并希望获得响应,那么我建议您选择“ CloseableHttpClient”。
  3. 复制URI(“ www.somewebsite.com/v1/api/登录?”)。 获取请求有效负载(将在该特定API URI中提供)。像这样“ www.somewebsite.com/v1/api/sign-in?&username=xyz&password=1234566&app_id=12123214324234134&app_secret=213242345345345”一样,用“&”传递所有参数 (记住应用程序ID和应用程序秘密非常独特,不要在任何地方公开它)
  4. 获得URI后,此代码将为您提供JSON格式的响应
            HttpPost request = new HttpPost(str);
            request.setHeader("content-type", "application/json");
            HttpResponse response = client.execute(request);
            BufferedReader bufReader = new BufferedReader(new InputStreamReader(
                    response.getEntity().getContent()));
            while ((line = bufReader.readLine()) != null) {
                builder=String.valueOf(line);
            }

            System.out.println(builder);
        }