Spaces:
Sleeping
Sleeping
Commit
Β·
3ba0e70
1
Parent(s):
cb1701e
fix chrome
Browse files- mapcrunch_controller.py +63 -36
mapcrunch_controller.py
CHANGED
@@ -11,53 +11,80 @@ from config import MAPCRUNCH_URL, SELECTORS, DATA_COLLECTION_CONFIG
|
|
11 |
|
12 |
class MapCrunchController:
|
13 |
def __init__(self, headless: bool = False):
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
options.add_argument("--
|
|
|
|
|
|
|
|
|
|
|
23 |
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
self.wait = WebDriverWait(self.driver, 10)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
|
27 |
-
#
|
28 |
-
# Basically, we are setting the badBrowser property to 0, which is a property that is used to detect if the browser is being controlled by a script.
|
29 |
-
# In the main.min.js, we can see some js code like this:
|
30 |
-
# if (badBrowser) {
|
31 |
-
# alert("Unsupported browser!");
|
32 |
-
# } else {
|
33 |
-
# window.panorama = { ... }
|
34 |
-
# }
|
35 |
-
self.driver.execute_cdp_cmd(
|
36 |
-
"Page.addScriptToEvaluateOnNewDocument",
|
37 |
-
{
|
38 |
-
"source": """
|
39 |
-
Object.defineProperty(window, 'badBrowser', {
|
40 |
-
value: 0,
|
41 |
-
writable: false,
|
42 |
-
configurable: false
|
43 |
-
});
|
44 |
-
window.alert = function() {};
|
45 |
-
Object.defineProperty(navigator, 'webdriver', {
|
46 |
-
get: () => undefined
|
47 |
-
});
|
48 |
-
"""
|
49 |
-
},
|
50 |
-
)
|
51 |
-
|
52 |
for retry in range(3):
|
53 |
try:
|
54 |
self.driver.get(MAPCRUNCH_URL)
|
55 |
time.sleep(3)
|
|
|
56 |
break
|
57 |
except Exception as e:
|
58 |
if retry == 2:
|
59 |
raise e
|
60 |
-
print(f"Failed to load MapCrunch, retry {retry + 1}/3")
|
61 |
time.sleep(2)
|
62 |
|
63 |
def setup_clean_environment(self):
|
|
|
11 |
|
12 |
class MapCrunchController:
|
13 |
def __init__(self, headless: bool = False):
|
14 |
+
# Try to initialize ChromeDriver with version 137 (your current Chrome version)
|
15 |
+
try:
|
16 |
+
# Create fresh ChromeOptions for first attempt
|
17 |
+
options = uc.ChromeOptions()
|
18 |
+
options.add_argument("--no-sandbox")
|
19 |
+
options.add_argument("--disable-dev-shm-usage")
|
20 |
+
options.add_argument("--disable-gpu")
|
21 |
+
options.add_argument("--window-size=1920,1080")
|
22 |
+
options.add_argument("--disable-web-security")
|
23 |
+
options.add_argument("--disable-features=VizDisplayCompositor")
|
24 |
+
options.add_argument("--disable-blink-features=AutomationControlled")
|
25 |
+
|
26 |
+
if headless:
|
27 |
+
options.add_argument("--headless=new")
|
28 |
|
29 |
+
self.driver = uc.Chrome(options=options, use_subprocess=True, version_main=137)
|
30 |
+
print("β
ChromeDriver initialized successfully with version 137")
|
31 |
+
except Exception as e:
|
32 |
+
print(f"Failed with version 137: {e}")
|
33 |
+
try:
|
34 |
+
# Create fresh ChromeOptions for fallback attempt
|
35 |
+
options = uc.ChromeOptions()
|
36 |
+
options.add_argument("--no-sandbox")
|
37 |
+
options.add_argument("--disable-dev-shm-usage")
|
38 |
+
options.add_argument("--disable-gpu")
|
39 |
+
options.add_argument("--window-size=1920,1080")
|
40 |
+
options.add_argument("--disable-web-security")
|
41 |
+
options.add_argument("--disable-features=VizDisplayCompositor")
|
42 |
+
options.add_argument("--disable-blink-features=AutomationControlled")
|
43 |
+
|
44 |
+
if headless:
|
45 |
+
options.add_argument("--headless=new")
|
46 |
+
|
47 |
+
# Fallback to auto-detection
|
48 |
+
self.driver = uc.Chrome(options=options, use_subprocess=True)
|
49 |
+
print("β
ChromeDriver initialized successfully with auto-detection")
|
50 |
+
except Exception as e2:
|
51 |
+
print(f"Failed with auto-detection: {e2}")
|
52 |
+
raise Exception(f"Could not initialize ChromeDriver. Please update Chrome or check compatibility. Errors: {e}, {e2}")
|
53 |
+
|
54 |
self.wait = WebDriverWait(self.driver, 10)
|
55 |
+
|
56 |
+
# Inject browser detection bypass script
|
57 |
+
try:
|
58 |
+
self.driver.execute_cdp_cmd(
|
59 |
+
"Page.addScriptToEvaluateOnNewDocument",
|
60 |
+
{
|
61 |
+
"source": """
|
62 |
+
Object.defineProperty(window, 'badBrowser', {
|
63 |
+
value: 0,
|
64 |
+
writable: false,
|
65 |
+
configurable: false
|
66 |
+
});
|
67 |
+
window.alert = function() {};
|
68 |
+
Object.defineProperty(navigator, 'webdriver', {
|
69 |
+
get: () => undefined
|
70 |
+
});
|
71 |
+
"""
|
72 |
+
},
|
73 |
+
)
|
74 |
+
except Exception as e:
|
75 |
+
print(f"Warning: Could not inject browser detection script: {e}")
|
76 |
|
77 |
+
# Load MapCrunch
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
for retry in range(3):
|
79 |
try:
|
80 |
self.driver.get(MAPCRUNCH_URL)
|
81 |
time.sleep(3)
|
82 |
+
print("β
MapCrunch loaded successfully")
|
83 |
break
|
84 |
except Exception as e:
|
85 |
if retry == 2:
|
86 |
raise e
|
87 |
+
print(f"Failed to load MapCrunch, retry {retry + 1}/3: {e}")
|
88 |
time.sleep(2)
|
89 |
|
90 |
def setup_clean_environment(self):
|