@biohacker01
Есть интересный путь сделать то, что ты, вероятно, хочешь:
- использовать BAS GUI, чтобы задавать настройки, видеть браузеры, скрывать их и так далее.
- программировать на удобном тебе языке в обычной IDE
Я написал небольшую библиотеку, которая решают такую задачу. Так как мне самому это нужно. Есть пара не решенных вещей, для которых я пока не знаю простых путей. Например, как из стороннего скрипта передавать управление пользователю в браузере и возвращать его обратно.
Исходный код не даю, так как код пока очень сырой. В процессе его написания.
Реализация:
- BAS при старте в самом начале работы запускает скрипт cmd_initial.py в командной строке, который создает и сохраняет задания для BAS. BAS принимает задания, настраивает браузеры, стартует их.
poetry run python cmd_initial.py --bas_fingerprint_key=bla-bla
Пример задания:
[
{
"task_id": "ecc53d50-e61b-4a8d-86d7-3b05afff060a",
"browser_settings": {
"components": {
"widevine": "enable",
"safe_browsing": "enable",
"components": "enable"
},
"network": {
"enable_qiuc_protocol": true
},
"rendering": {
"maximum_fps": 30
},
"browser_version": "default",
"command_line": [
"--disk-cache-size=104857600",
"--disable-gpu-program-cache",
"--disable-gpu-shader-disk-cache",
"--disable-features=GpuProcessHighPriorityWin,GpuUseDisplayThreadPriority",
"--lang=en"
],
"profile": {
"profile_folder_path": "C:\\Users\\Administrator\\AppData\\Local\\PyBASProfileManager\\tmp2xwpovkm",
"always_load_fingerprint_from_profile_folder": false,
"always_load_proxy_from_profile_folder": false
},
"proxy": null,
"fingerprint": {
"safe_canvas": true,
"use_perfect_canvas": true,
"safe_webgl": true,
"safe_audio": true,
"safe_battery": true,
"use_font_pack": true,
"safe_element_size": false,
"emulate_sensor_api": true,
"emulate_device_scale_factor": true
}
}
}
]
- После старта браузеров каждый поток в BAS передает информацию о запущенном профиле второму скрипту cmd_worker.py.
poetry run python cmd_worker.py --bas_current_profile_id="PyBASProfileManager/tmp2xwpovkm"
Что делает cmd_worker.py:
- берет информацию из параметра bas_current_profile_id, и ищет свое задание, так как мы получили полный путь к профилю. Также в процессах Windows ищет нужный запущенный браузер. Это можно понять, так как в командной строке присутствует путь к профилю.
- парсит данные командной строки, чтобы получить remote debugging port. Далее уже дело техники из него получить ws_endpoint и подключиться к нему с помощью playwright.
Скриншоты: