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. ..
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
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