diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..4680fa5 --- /dev/null +++ b/pom.xml @@ -0,0 +1,46 @@ + + + 4.0.0 + + com.mycompany.app + my-app + 1.0-SNAPSHOT + jar + + + 8 + 8 + UTF-8 + + + + + org.seleniumhq.selenium + selenium-java + 3.141.59 + + + com.googlecode.json-simple + json-simple + 1.1.1 + + + org.junit.jupiter + junit-jupiter + 5.10.0 + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.1.2 + + + + diff --git a/result/forecast.txt b/result/forecast.txt new file mode 100644 index 0000000..475cfa1 --- /dev/null +++ b/result/forecast.txt @@ -0,0 +1,29 @@ +Прогноз погоды для Нижнего Новгорода: +-------------------------------------------------------- +№ Дата/время Температура Осадки (мм) +-------------------------------------------------------- +1 2025-05-03T00:00 3.6 °C 0.0 мм +2 2025-05-03T01:00 3.5 °C 0.0 мм +3 2025-05-03T02:00 3.3 °C 0.0 мм +4 2025-05-03T03:00 3.1 °C 0.1 мм +5 2025-05-03T04:00 2.6 °C 0.0 мм +6 2025-05-03T05:00 2.2 °C 0.0 мм +7 2025-05-03T06:00 1.8 °C 0.0 мм +8 2025-05-03T07:00 1.8 °C 0.0 мм +9 2025-05-03T08:00 1.8 °C 0.0 мм +10 2025-05-03T09:00 3.0 °C 0.0 мм +11 2025-05-03T10:00 4.9 °C 0.0 мм +12 2025-05-03T11:00 6.8 °C 0.0 мм +13 2025-05-03T12:00 8.6 °C 0.0 мм +14 2025-05-03T13:00 9.8 °C 0.0 мм +15 2025-05-03T14:00 11.0 °C 0.0 мм +16 2025-05-03T15:00 11.5 °C 0.0 мм +17 2025-05-03T16:00 11.8 °C 0.0 мм +18 2025-05-03T17:00 11.5 °C 0.0 мм +19 2025-05-03T18:00 10.7 °C 0.0 мм +20 2025-05-03T19:00 9.8 °C 0.0 мм +21 2025-05-03T20:00 9.0 °C 0.0 мм +22 2025-05-03T21:00 8.7 °C 0.1 мм +23 2025-05-03T22:00 8.4 °C 0.1 мм +24 2025-05-03T23:00 8.3 °C 0.0 мм +-------------------------------------------------------- diff --git a/src/main/java/com/mycompany/app/App.java b/src/main/java/com/mycompany/app/App.java new file mode 100644 index 0000000..a226502 --- /dev/null +++ b/src/main/java/com/mycompany/app/App.java @@ -0,0 +1,45 @@ +package com.mycompany.app; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; + +public class App { + + public static void main(String[] args) { + ChromeOptions options = new ChromeOptions(); + options.addArguments("--headless"); + options.addArguments("--no-sandbox"); + options.addArguments("--disable-dev-shm-usage"); + options.addArguments("--disable-gpu"); + + WebDriver driver = new ChromeDriver(options); + + try { + // --- Задание 1: генератор паролей --- + System.out.println("=== Задание 1: Генератор паролей ==="); + driver.get("https://www.calculator.net/password-generator.html"); + try { + WebElement passwordField = driver.findElement( + By.cssSelector("input.infofield")); + System.out.println("Сгенерированный пароль: " + + passwordField.getAttribute("value")); + } catch (Exception e) { + System.out.println("Не удалось найти поле пароля: " + e.getMessage()); + } + + // --- Задание 2: IP-адрес --- + System.out.println("\n=== Задание 2: IP-адрес ==="); + Task2.getIP(driver); + + // --- Задание 3: Прогноз погоды --- + System.out.println("\n=== Задание 3: Прогноз погоды ==="); + Task3.getForecast(driver); + + } finally { + driver.quit(); + } + } +} diff --git a/src/main/java/com/mycompany/app/Task2.java b/src/main/java/com/mycompany/app/Task2.java new file mode 100644 index 0000000..5b609e4 --- /dev/null +++ b/src/main/java/com/mycompany/app/Task2.java @@ -0,0 +1,26 @@ +package com.mycompany.app; + +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +public class Task2 { + + public static String getIP(WebDriver driver) { + try { + driver.get("https://api.ipify.org/?format=json"); + WebElement elem = driver.findElement(By.tagName("pre")); + String jsonStr = elem.getText(); + JSONParser parser = new JSONParser(); + JSONObject obj = (JSONObject) parser.parse(jsonStr); + String ip = (String) obj.get("ip"); + System.out.println("Мой IP-адрес: " + ip); + return ip; + } catch (Exception e) { + System.out.println("Ошибка Task2: " + e.toString()); + return null; + } + } +} diff --git a/src/main/java/com/mycompany/app/Task3.java b/src/main/java/com/mycompany/app/Task3.java new file mode 100644 index 0000000..4730e9c --- /dev/null +++ b/src/main/java/com/mycompany/app/Task3.java @@ -0,0 +1,80 @@ +package com.mycompany.app; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +import java.io.FileWriter; +import java.io.PrintWriter; + +public class Task3 { + + public static void getForecast(WebDriver driver) { + try { + String url = "https://api.open-meteo.com/v1/forecast" + + "?latitude=56&longitude=44" + + "&hourly=temperature_2m,rain" + + "¤t=cloud_cover" + + "&timezone=Europe%2FMoscow" + + "&forecast_days=1" + + "&wind_speed_unit=ms"; + + driver.get(url); + WebElement elem = driver.findElement(By.tagName("pre")); + String jsonStr = elem.getText(); + + JSONParser parser = new JSONParser(); + JSONObject obj = (JSONObject) parser.parse(jsonStr); + + JSONObject hourly = (JSONObject) obj.get("hourly"); + JSONArray times = (JSONArray) hourly.get("time"); + JSONArray temps = (JSONArray) hourly.get("temperature_2m"); + JSONArray rains = (JSONArray) hourly.get("rain"); + + // Заголовок таблицы + String header = String.format("%-4s %-20s %-15s %-15s", + "№", "Дата/время", "Температура", "Осадки (мм)"); + String line = new String(new char[56]).replace("\0", "-"); + + System.out.println("\nПрогноз погоды для Нижнего Новгорода:"); + System.out.println(line); + System.out.println(header); + System.out.println(line); + + StringBuilder sb = new StringBuilder(); + sb.append("Прогноз погоды для Нижнего Новгорода:\n"); + sb.append(line).append("\n"); + sb.append(header).append("\n"); + sb.append(line).append("\n"); + + for (int i = 0; i < times.size(); i++) { + String time = (String) times.get(i); + Object tempObj = temps.get(i); + Object rainObj = rains.get(i); + + String temp = tempObj != null ? tempObj.toString() + " °C" : "N/A"; + String rain = rainObj != null ? rainObj.toString() + " мм" : "N/A"; + + String row = String.format("%-4d %-20s %-15s %-15s", + i + 1, time, temp, rain); + System.out.println(row); + sb.append(row).append("\n"); + } + + System.out.println(line); + sb.append(line).append("\n"); + + // Сохраняем в файл + try (PrintWriter pw = new PrintWriter(new FileWriter("result/forecast.txt"))) { + pw.print(sb.toString()); + } + System.out.println("Прогноз сохранён в result/forecast.txt"); + + } catch (Exception e) { + System.out.println("Ошибка Task3: " + e.toString()); + } + } +}