[RUBY] Zugriff mit Selen als Gegenmaßnahme für navigator.webdriver

enable-automation und useAutomationExtension funktionierten nicht wie erwartet

Ich möchte aus irgendeinem Grund kratzen, aber es war eine NG-Site mit einem "navigator.webdriver = true" -Browser. Ich möchte korrespondieren. Weil es scheint, dass es getan werden kann. Referenz: Wenn navigator.webdriver = true ist, handelt es sich um einen Roboter. Gibt es eine Problemumgehung? Puppenspieler scheint dazu in der Lage zu sein Aber ich benutze Selen, ich habe noch nie Puppenspieler benutzt und ich kann nichts dagegen tun. ..

Einstellungen, wenn es nicht funktioniert

Ich habe einige Artikel gefunden, die mit Selen möglich zu sein scheinen.

Referenz 1: https://stackoverflow.com/questions/53039551/selenium-webdriver-modifying-navigator-webdriver-flag-to-prevent-selenium-detec

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

Ich versuchte es.

    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'], #hinzufügen
        useAutomationExtension: false #hinzufügen
      }
    )
    driver = Selenium::WebDriver.for(
      :remote,
      url: 'http://chrome:4444/wd/hub',
      desired_capabilities: capabilities,
      http_client: Selenium::WebDriver::Remote::Http::Default.new
    )

Selbst wenn ich es tatsächlich bewege, wird true zurückgegeben. Es war nicht gut

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

Arbeitete Einstellungen

Enable-Automation und useAutomationExtension wurden entfernt. Stellen Sie den Treiber wie zuvor ein.

    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
    )

    #Fügen Sie Folgendes hinzu
    driver.execute_script('const newProto = navigator.__proto__;delete newProto.webdriver;navigator.__proto__ = newProto;')

Wenn Sie es tatsächlich verschieben, wird undefiniert zurückgegeben. Funktioniert ähnlich wie Puppenspieler. War gut.

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

Recommended Posts

Zugriff mit Selen als Gegenmaßnahme für navigator.webdriver
Verwenden Sie FacesContext als Mock mit PowerMockito
Erstellen eines Browser-Automatisierungstools mit Ruby + Selenium
Hinweise für diejenigen, die mit JMockit leben
Erstellen Sie eine Vorlage für das iOS14-Widget mit Absichtskonfiguration.
[Java-Grundlagen] Lassen Sie uns ein Dreieck mit einer for-Anweisung erstellen