Skip to content
This repository was archived by the owner on Jun 10, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
</build>
</project>
29 changes: 29 additions & 0 deletions result/forecast.txt
Original file line number Diff line number Diff line change
@@ -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 мм
--------------------------------------------------------
45 changes: 45 additions & 0 deletions src/main/java/com/mycompany/app/App.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
}
26 changes: 26 additions & 0 deletions src/main/java/com/mycompany/app/Task2.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
}
80 changes: 80 additions & 0 deletions src/main/java/com/mycompany/app/Task3.java
Original file line number Diff line number Diff line change
@@ -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"
+ "&current=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());
}
}
}
Loading