78 lines
2.4 KiB
Python
78 lines
2.4 KiB
Python
import math
|
|
from io import BytesIO
|
|
from time import sleep
|
|
|
|
from PIL import Image
|
|
from selenium import webdriver
|
|
from selenium.webdriver.common.by import By
|
|
from selenium.webdriver.common.action_chains import ActionChains
|
|
|
|
from autopilot import Pilot
|
|
|
|
from enum import Enum
|
|
|
|
class SimMode(Enum):
|
|
OPERATOR = 1
|
|
AUTONOME = 2
|
|
|
|
class Simulator:
|
|
driver: webdriver.Chrome
|
|
mode: SimMode
|
|
|
|
operatorPilot: Pilot
|
|
autonomePilot: Pilot
|
|
|
|
angle: float
|
|
|
|
def __init__(self, operatorPilot: Pilot, autonomePilot: Pilot):
|
|
self.mode = SimMode.OPERATOR
|
|
self.operatorPilot = operatorPilot
|
|
self.autonomePilot = autonomePilot
|
|
|
|
options = webdriver.ChromeOptions()
|
|
# options.add_experimental_option("detach", True)
|
|
self.driver = webdriver.Chrome(options)
|
|
self.driver.get("https://yandex.ru/maps/43/kazan/?ll=49.103814%2C55.794258&z=14")
|
|
sleep(2)
|
|
|
|
action = ActionChains(self.driver)
|
|
|
|
# Закрытие левой панели
|
|
action.click(self.driver.find_element(By.CLASS_NAME, 'sidebar-toggle-button'))
|
|
action.move_to_element_with_offset(self.driver.find_element(By.XPATH, "//div[@class='rounded-controls']/div[@class='rounded-controls__child'][5]//button"), 5, 5)
|
|
action.perform()
|
|
|
|
# Режим спутника
|
|
action.click(self.driver.find_element(By.CLASS_NAME, '_key_satellite'))
|
|
action.perform()
|
|
|
|
self.angle = 0
|
|
|
|
def loop(self):
|
|
|
|
html = self.driver.find_element(By.TAG_NAME, 'html')
|
|
action = ActionChains(self.driver)
|
|
velocity = 10
|
|
|
|
for i in range(100):
|
|
# Сдвиг камеры
|
|
action = ActionChains(self.driver)
|
|
action.move_to_element_with_offset(html, 200, 200)
|
|
action.click_and_hold()
|
|
dangle = self.operatorPilot.act()
|
|
self.angle += dangle
|
|
dx = math.cos(self.angle) * velocity
|
|
dy = math.sin(self.angle) * velocity
|
|
action.move_by_offset(-dx, dy)
|
|
action.release()
|
|
action.perform()
|
|
|
|
# Загрузка скриншота
|
|
png = self.driver.get_screenshot_as_png()
|
|
im = Image.open(BytesIO(png))
|
|
im = im.crop([0, 80, im.width-80, im.height-60])
|
|
im.save(f"./images/{i}.png")
|
|
sleep(0.25)
|
|
|
|
print("last position: ", self.driver.current_url)
|