Untitled

mail@pastecode.io avatar
unknown
python
a year ago
3.3 kB
5
Indexable
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)