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