forked from stud178875/tempora
60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
import random
|
||
from driver.chrome_proxy import ChromeProxy
|
||
from urllib.parse import urlparse
|
||
import undetected_chromedriver as uc
|
||
import logging
|
||
|
||
|
||
# В patcher.py библиотеки undetected_chromedriver
|
||
# import secrets
|
||
# prefix = 'undetected' ----> prefix = secrets.token_hex(8)
|
||
# Использование случайного токена в качестве префикса гарантирует,
|
||
# что каждый процесс будет иметь свою уникальную директорию,
|
||
# даже если несколько процессов работают одновременн
|
||
|
||
class DriverCreator:
|
||
def __init__(self, proxy_list):
|
||
self.proxy_list = proxy_list
|
||
|
||
def _switch_proxy(self):
|
||
proxy = random.choice(self.proxy_list)
|
||
parsed_proxy = urlparse(proxy)
|
||
return ChromeProxy(
|
||
parsed_proxy.hostname,
|
||
parsed_proxy.port,
|
||
parsed_proxy.username,
|
||
parsed_proxy.password
|
||
).create_extension()
|
||
|
||
def get_driver(self):
|
||
'''
|
||
Отключает JS
|
||
Каждый запрос получает `сырой` html
|
||
'''
|
||
# extension_path = self._switch_proxy()
|
||
|
||
options = uc.ChromeOptions()
|
||
# options.add_argument(f"--load-extension={extension_path}") # временно
|
||
options.add_argument("--headless=new")
|
||
options.add_argument("--disable-gpu")
|
||
options.add_argument("--disable-dev-shm-usage")
|
||
options.add_argument("--no-sandbox")
|
||
options.add_argument("--disable-webgl")
|
||
options.add_argument("--disable-software-rasterizer")
|
||
# options.add_argument("--disable-extensions")
|
||
|
||
prefs = {"profile.managed_default_content_settings.javascript": 2}
|
||
options.experimental_options["prefs"] = prefs
|
||
|
||
driver = uc.Chrome(
|
||
options=options,
|
||
version_main=132,
|
||
# user_multi_procs=True
|
||
)
|
||
|
||
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
|
||
"source": "Object.defineProperty(navigator, 'javaEnabled', {get: () => false});"
|
||
})
|
||
driver.execute_cdp_cmd("Emulation.setScriptExecutionDisabled", {"value": True})
|
||
|
||
return driver |