File size: 2,916 Bytes
e4b63ae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a400aef
 
 
 
 
 
 
 
e4b63ae
a400aef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e4b63ae
 
 
 
 
a400aef
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import json
import logging
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

logger = logging.getLogger(__name__)

class CustomBrowserContext:
    def __init__(self, browser, config=None):
        self.browser = browser
        self.config = config or {}
        self.driver = None

    def create_context(self):
        chrome_options = Options()

        if self.config.get("browser_window_size"):
            chrome_options.add_argument(f"--window-size={self.config['browser_window_size'][0]},{self.config['browser_window_size'][1]}")

        if self.config.get("disable_security", False):
            chrome_options.add_argument("--disable-web-security")
            chrome_options.add_argument("--disable-site-isolation-trials")
            chrome_options.add_argument("--disable-features=IsolateOrigins,site-per-process")

        user_agent = (
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
            "(KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36"
        )
        chrome_options.add_argument(f"user-agent={user_agent}")

        self.driver = webdriver.Chrome(options=chrome_options)

        if self.config.get("cookies_file") and os.path.exists(self.config["cookies_file"]):
            try:
                with open(self.config["cookies_file"], "r") as f:
                    cookies = json.load(f)
                    logger.info(f"Loaded {len(cookies)} cookies from {self.config['cookies_file']}")
                    for cookie in cookies:
                        self.driver.add_cookie(cookie)
            except Exception as e:
                logger.error(f"Error loading cookies: {e}")

        try:
            self.driver.execute_script(
                """
                Object.defineProperty(navigator, 'webdriver', {
                    get: () => undefined
                });
                Object.defineProperty(navigator, 'languages', {
                    get: () => ['en-US', 'en']
                });
                Object.defineProperty(navigator, 'plugins', {
                    get: () => [1, 2, 3, 4, 5]
                });
                window.chrome = { runtime: {} };
                const originalQuery = window.navigator.permissions.query;
                window.navigator.permissions.query = (parameters) => (
                    parameters.name === 'notifications' ?
                        Promise.resolve({ state: Notification.permission }) :
                        originalQuery(parameters)
                );
                """
            )
        except Exception as e:
            logger.error(f"Error executing anti-detection scripts: {e}")

        return self.driver

    def close(self):
        if self.driver:
            try:
                self.driver.quit()
            except Exception as e:
                logger.error(f"Error closing the browser: {e}")