import time
import requests
from selenium import webdriver
import subprocess
import os
from config import dolphin_api_token, chrome_driver_path, dolphin_profile_id_1
def init_driver(dolphin_profile_id):
req_url = f'http://localhost:3001/v1.0/browser_profiles/{dolphin_profile_id}/start?automation=1&headless=0'
response = requests.get(req_url)
response_json = response.json()
print(response_json)
port = response_json['automation']['port']
options = webdriver.ChromeOptions()
options.debugger_address = f'127.0.0.1:{port}'
driver = webdriver.Chrome(service=chrome_driver_path, options=options)
driver.implicitly_wait(5)
return driver, port
def close_old_browser(dolphin_profile_id, port):
try:
max_retries = 3 # максимальное количество попыток
for attempt in range(max_retries):
stop_req_url = f'http://localhost:3001/v1.0/browser_profiles/{dolphin_profile_id}/stop'
headers = {"Authorization": f"Bearer {dolphin_api_token}"}
response = requests.get(stop_req_url, headers=headers)
if response.status_code == 401 and "unauthorized" in response.text:
print(f"Попытка {attempt + 1}: Не авторизован. Повторная попытка через 3 секунды.")
time.sleep(3)
else:
print("Закрыл старый браузер: ", "Response status code:", response.status_code,
"Response content:", response.text)
return # Успешно закрыли браузер, выходим из функции
else:
# Если вышли из цикла, но не смогли закрыть браузер
print("Исчерпаны все попытки закрытия старого браузера через API, пытаемся закрыть браузер через PID")
close_old_browser_by_id(port)
except Exception as e:
print(f'Не удалось закрыть старый браузер. Текст ошибки: {e}')
def find_pid_by_port(port):
try:
command = f"lsof -i :{port} -n -P | grep LISTEN | awk '{{print $2}}'"
pid = subprocess.check_output(command, shell=True).strip().decode("utf-8")
return int(pid)
except subprocess.CalledProcessError as e:
print(f"Command failed with error code {e.returncode}, output: {e.output}")
except Exception as e:
print(f"Не удалось найти PID по порту {port}: {e}")
return None
def close_old_browser_by_id(port):
try:
chrome_pid = find_pid_by_port(port)
if chrome_pid is not None:
os.system(f'kill {chrome_pid}')
print(f"Закрыл старый браузер с PID {chrome_pid}")
else:
print("Не удалось найти PID старого браузера")
except Exception as e:
print(f'Не удалось закрыть старый браузер. Текст ошибки: {e}')
close_old_browser(dolphin_profile_id_1, port1)
time.sleep(7)
driver1, port1 = init_driver(dolphin_profile_id_1)