diff --git a/app/services/amazon_scraper_service.py b/app/services/amazon_scraper_service.py index 8f5c6f6..965e6c0 100644 --- a/app/services/amazon_scraper_service.py +++ b/app/services/amazon_scraper_service.py @@ -190,12 +190,69 @@ class AmazonScraperService: ), locale="fr-FR", timezone_id="Europe/Paris", + # Additional stealth parameters + extra_http_headers={ + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "Accept-Language": "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7", + "Accept-Encoding": "gzip, deflate, br", + "DNT": "1", + "Connection": "keep-alive", + "Upgrade-Insecure-Requests": "1", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Cache-Control": "max-age=0", + }, ) - # Stealth mode + # Comprehensive stealth mode await context.add_init_script(""" - Object.defineProperty(navigator, 'webdriver', { get: () => undefined }); - window.chrome = { runtime: {} }; + // Remove webdriver property + Object.defineProperty(navigator, 'webdriver', { + get: () => undefined + }); + + // Add chrome property + window.chrome = { + runtime: {}, + loadTimes: function() {}, + csi: function() {}, + app: {} + }; + + // Override permissions + const originalQuery = window.navigator.permissions.query; + window.navigator.permissions.query = (parameters) => ( + parameters.name === 'notifications' ? + Promise.resolve({ state: Notification.permission }) : + originalQuery(parameters) + ); + + // Add plugins + Object.defineProperty(navigator, 'plugins', { + get: () => [1, 2, 3, 4, 5] + }); + + // Add languages + Object.defineProperty(navigator, 'languages', { + get: () => ['fr-FR', 'fr', 'en-US', 'en'] + }); + + // Override platform + Object.defineProperty(navigator, 'platform', { + get: () => 'Win32' + }); + + // Mock battery API + Object.defineProperty(navigator, 'getBattery', { + get: () => () => Promise.resolve({ + charging: true, + chargingTime: 0, + dischargingTime: Infinity, + level: 1 + }) + }); """) await context.route("**/*", lambda route: route.continue_())