[RUBY] Accès avec Selenium comme contre-mesure pour navigator.webdriver

enable-automation et useAutomationExtension n'ont pas fonctionné comme prévu

Je veux gratter pour une raison quelconque, mais c'était un site NG avec un navigateur navigator.webdriver = true. Je veux correspondre. Parce qu'il semble que cela peut être fait. Référence: Si navigator.webdriver = true, ce sera un robot. Y at-il un travail autour? le marionnettiste semble être capable de le faire Mais j'utilise Selenium, je n'ai jamais utilisé de marionnettiste et je ne peux rien y faire. ..

Paramètres quand cela ne fonctionne pas

J'ai trouvé des articles qui semblent possibles avec Selenium.

Référence 1: https://stackoverflow.com/questions/53039551/selenium-webdriver-modifying-navigator-webdriver-flag-to-prevent-selenium-detec

Référence 2: https://help.applitools.com/hc/en-us/articles/360007189411--Chrome-is-being-controlled-by-automated-test-software-notification

Je l'ai essayé.

    capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
      accept_insecure_certs: true,
      chromeOptions: {
        args: [
          '-window-size=1920,1080',
          '--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
        ],
        excludeSwitches: ['enable-automation'], #ajouter à
        useAutomationExtension: false #ajouter à
      }
    )
    driver = Selenium::WebDriver.for(
      :remote,
      url: 'http://chrome:4444/wd/hub',
      desired_capabilities: capabilities,
      http_client: Selenium::WebDriver::Remote::Http::Default.new
    )

Même si je le déplace réellement, true est renvoyé. Ce n'était pas bon.

driver.execute_script('return navigator.webdriver')
>>> true

Paramètres travaillés

Suppression de ʻenable-automation et ʻuse Automation Extension. Configurez le pilote comme avant.

    capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
      accept_insecure_certs: true,
      chromeOptions: {
        args: [
          '-window-size=1920,1080',
          '--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
        ],
      }
    )
    driver = Selenium::WebDriver.for(
      :remote,
      url: 'http://chrome:4444/wd/hub',
      desired_capabilities: capabilities,
      http_client: Selenium::WebDriver::Remote::Http::Default.new
    )

    #Ajoutez ce qui suit
    driver.execute_script('const newProto = navigator.__proto__;delete newProto.webdriver;navigator.__proto__ = newProto;')

Lorsque vous le déplacez réellement, undefined est renvoyé. Fonctionne comme le marionnettiste. C'était bien.

driver.execute_script('return navigator.webdriver')
>>> undefined

Recommended Posts

Accès avec Selenium comme contre-mesure pour navigator.webdriver
Utilisez FacesContext comme maquette avec PowerMockito
Création d'un outil d'automatisation de navigateur avec Ruby + Selenium
Notes pour ceux qui vivent avec JMockit
Créez un modèle pour le widget iOS14 avec la configuration d'intention.
[Bases de Java] Créons un triangle avec une instruction for