Modificando el objeto Javascript Navigator con Selenium

Intenté acceder a un sitio con Selenium (con geckodriver) y dijo que estaba bloqueado, pero puedo acceder a él manualmente con el navegador Firefox. Así que comparé los componentes de mi diadema y la única diferencia fue que en el objeto Navigator “webdriver” se configuró en “true” cuando usé Selenium. Intenté ejecutar este código:

from selenium import webdriver from selenium.webdriver.firefox.options import Options firefox_binary = '/usr/bin/firefox' options = Options() from selenium.webdriver.common.desired_capabilities import DesiredCapabilities caps = DesiredCapabilities().FIREFOX # caps["pageLoadStrategy"] = "normal" # complete caps["pageLoadStrategy"] = "eager" # interactive injected_javascript=("Object.defineProperty(navigator, 'webdriver', { value: 'false' })") driver = webdriver.Firefox(executable_path=r'/home/kkkk/ggecko/geckodriver', firefox_binary=firefox_binary) driver.get('https://auth.citromail.hu/regisztracio/') driver.execute_async_script(injected_javascript) 

pero solo cargó la página con “webdriver” aún en “true”, luego devolvió este mensaje:

 Traceback (most recent call last): File "/home/kkkk/driverr.py", line 14, in  driver.execute_async_script(injected_javascript) File "/home/kkkk/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 652, in execute_async_script 'args': converted_args})['value'] File "/home/kkkk/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 314, in execute self.error_handler.check_response(response) File "/home/kkkk/.local/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message: Timed out 

¿Qué estoy haciendo mal o hay una manera diferente de lograr esto?

Consulte este problema: Selenium webdriver: firefox headless inyecta javascript para modificar la propiedad del navegador

proporciona una vía útil.

Este es el código:

 import os from selenium import webdriver options=webdriver.FirefoxOptions() options.set_headless(True) driver=webdriver.Firefox(options=options) # solution found here https://stackoverflow.com/questions/17385779/how-do-i-load-a-javascript-file-into-the-dom-using-selenium driver.execute_script("var s=window.document.createElement('script'); s.src='javascriptFirefox.js';window.document.head.appendChild(s);") driver.get('https://auth.citromail.hu/regisztracio/') 

Archivo Javascript javascriptFirefox.js

 // overwrite the `languages` property to use a custom getter const setProperty = () => { Object.defineProperty(navigator, "languages", { get: function() { return ["en-US", "en", "es"]; } }); // Overwrite the `plugins` property to use a custom getter. Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5], }); // Pass the Webdriver test Object.defineProperty(navigator, 'webdriver', { get: () => false, }); callback(); }; setProperty();