From cf63839e21583aa8fabfb82e67b9258e96ab80dd Mon Sep 17 00:00:00 2001 From: Notexxx Date: Sun, 7 Jun 2026 20:19:06 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 46 +++++++++++++ result/forecast.txt | 29 ++++++++ src/main/java/com/mycompany/app/App.java | 44 ++++++++++++ src/main/java/com/mycompany/app/Task2.java | 26 +++++++ src/main/java/com/mycompany/app/Task3.java | 80 ++++++++++++++++++++++ 5 files changed, 225 insertions(+) create mode 100644 pom.xml create mode 100644 result/forecast.txt create mode 100644 src/main/java/com/mycompany/app/App.java create mode 100644 src/main/java/com/mycompany/app/Task2.java create mode 100644 src/main/java/com/mycompany/app/Task3.java diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..68963be --- /dev/null +++ b/pom.xml @@ -0,0 +1,46 @@ + + + 4.0.0 + + com.mycompany.app + my-app + 1.0-SNAPSHOT + jar + + + 11 + 11 + UTF-8 + + + + + org.seleniumhq.selenium + selenium-java + 4.15.0 + + + 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..2e71db8 --- /dev/null +++ b/src/main/java/com/mycompany/app/App.java @@ -0,0 +1,44 @@ +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[type='text'].inputtext")); + 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..0b2a815 --- /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 = "-".repeat(56); + + 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()); + } + } +} From 0c383d7c1153c5ae33f08cbea0ad37d2c55140dd Mon Sep 17 00:00:00 2001 From: Notexxx Date: Sun, 7 Jun 2026 20:22:09 +0300 Subject: [PATCH 2/4] fix --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 68963be..0c230e8 100644 --- a/pom.xml +++ b/pom.xml @@ -10,8 +10,8 @@ jar - 11 - 11 + 8 + 8 UTF-8 From ca73b3c493273261c1c794ef0f86812549bc9706 Mon Sep 17 00:00:00 2001 From: Notexxx Date: Sun, 7 Jun 2026 20:26:28 +0300 Subject: [PATCH 3/4] fix --- pom.xml | 2 +- src/main/java/com/mycompany/app/App.java | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 0c230e8..4680fa5 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ org.seleniumhq.selenium selenium-java - 4.15.0 + 3.141.59 com.googlecode.json-simple diff --git a/src/main/java/com/mycompany/app/App.java b/src/main/java/com/mycompany/app/App.java index 2e71db8..a226502 100644 --- a/src/main/java/com/mycompany/app/App.java +++ b/src/main/java/com/mycompany/app/App.java @@ -10,7 +10,7 @@ public class App { public static void main(String[] args) { ChromeOptions options = new ChromeOptions(); - options.addArguments("--headless"); // без окна браузера + options.addArguments("--headless"); options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); options.addArguments("--disable-gpu"); @@ -23,8 +23,9 @@ public static void main(String[] args) { driver.get("https://www.calculator.net/password-generator.html"); try { WebElement passwordField = driver.findElement( - By.cssSelector("input[type='text'].inputtext")); - System.out.println("Сгенерированный пароль: " + passwordField.getAttribute("value")); + By.cssSelector("input.infofield")); + System.out.println("Сгенерированный пароль: " + + passwordField.getAttribute("value")); } catch (Exception e) { System.out.println("Не удалось найти поле пароля: " + e.getMessage()); } From 65cf7e1a04821b4e6ec09912d8fd461a5ad433ab Mon Sep 17 00:00:00 2001 From: Notexxx Date: Sun, 7 Jun 2026 20:27:52 +0300 Subject: [PATCH 4/4] fix --- src/main/java/com/mycompany/app/Task3.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/mycompany/app/Task3.java b/src/main/java/com/mycompany/app/Task3.java index 0b2a815..4730e9c 100644 --- a/src/main/java/com/mycompany/app/Task3.java +++ b/src/main/java/com/mycompany/app/Task3.java @@ -37,7 +37,7 @@ public static void getForecast(WebDriver driver) { // Заголовок таблицы String header = String.format("%-4s %-20s %-15s %-15s", "№", "Дата/время", "Температура", "Осадки (мм)"); - String line = "-".repeat(56); + String line = new String(new char[56]).replace("\0", "-"); System.out.println("\nПрогноз погоды для Нижнего Новгорода:"); System.out.println(line);