Ich habe Selenium mit Chromedriver getestet und habe festgestellt, dass einige Seiten erkennen können, dass Sie Selenium verwenden, obwohl es überhaupt keine Automatisierung gibt. Selbst wenn ich nur manuell mit Chrome durch Selenium und Xephyr browse, bekomme ich oft eine Seite, die besagt, dass verdächtige Aktivitäten entdeckt wurden. Ich habe mein User-Agent und meinen Browser-Fingerabdruck überprüft und sie sind alle identisch mit dem normalen Chrome-Browser.
Wenn ich zu diesen Sites in normalem Chrom browse, funktioniert alles gut, aber in dem Moment, in dem ich Selenium benutze, werde ich entdeckt.
Theoretisch sollten Chromedriver und Chrome für jeden Webserver genau gleich aussehen, aber irgendwie können sie ihn erkennen.
Wenn Sie einen Testcode wünschen, probieren Sie folgendes aus:
from pyvirtualdisplay import Display
from Selenium import webdriver
display = Display(visible=1, size=(1600, 902))
display.start()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--disable-extensions')
chrome_options.add_argument('--profile-directory=Default')
chrome_options.add_argument("--incognito")
chrome_options.add_argument("--disable-plugins-discovery");
chrome_options.add_argument("--start-maximized")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.delete_all_cookies()
driver.set_window_size(800,800)
driver.set_window_position(0,0)
print 'arguments done'
driver.get('http://stubhub.com')
Wenn Sie stubhub durchsuchen, werden Sie innerhalb einer oder zweier Anfragen umgeleitet und "blockiert". Ich habe dies untersucht und kann nicht herausfinden, wie sie feststellen können, dass ein Benutzer Selenium verwendet.
Wie machen Sie das?
EDIT UPDATE:
Ich habe das Selenium IDE -Plugin in Firefox installiert und wurde gebannt, als ich mit dem zusätzlichen Firefox-Browser auf stubhub.com im normalen Firefox-Browser ging.
BEARBEITEN:
Bei der Verwendung von Fiddler zum Anzeigen der hin und her gesendeten HTTP-Anforderungen ist mir aufgefallen, dass die Anforderungen des gefälschten Browsers häufig "no-cache" im Antwortheader enthalten.
BEARBEITEN:
ergebnisse wie diese Gibt es eine Möglichkeit zu erkennen, dass ich mich auf einer Selenium Webdriver-Seite von Javascript befinde, schlagen Sie vor, dass es keine Möglichkeit geben sollte, festzustellen, wann Sie einen Webtreiber verwenden. Aber dieser Beweis legt etwas anderes nahe.
BEARBEITEN:
Die Website lädt einen Fingerabdruck auf ihre Server hoch, aber ich habe überprüft, und der Fingerabdruck von Selenium ist identisch mit dem Fingerabdruck bei der Verwendung von Chrome.
BEARBEITEN:
Dies ist eine der Fingerabdruck-Nutzdaten, die sie an ihre Server senden
{"appName":"Netscape","platform":"Linuxx86_64","cookies":1,"syslang":"en-US","userlang":"en-US","cpu":"","productSub":"20030107","setTimeout":1,"setInterval":1,"plugins":{"0":"ChromePDFViewer","1":"ShockwaveFlash","2":"WidevineContentDecryptionModule","3":"NativeClient","4":"ChromePDFViewer"},"mimeTypes":{"0":"application/pdf","1":"ShockwaveFlashapplication/x-shockwave-flash","2":"FutureSplashPlayerapplication/futuresplash","3":"WidevineContentDecryptionModuleapplication/x-ppapi-widevine-cdm","4":"NativeClientExecutableapplication/x-nacl","5":"PortableNativeClientExecutableapplication/x-pnacl","6":"PortableDocumentFormatapplication/x-google-chrome-pdf"},"screen":{"width":1600,"height":900,"colorDepth":24},"fonts":{"0":"monospace","1":"DejaVuSerif","2":"Georgia","3":"DejaVuSans","4":"TrebuchetMS","5":"Verdana","6":"AndaleMono","7":"DejaVuSansMono","8":"LiberationMono","9":"NimbusMonoL","10":"CourierNew","11":"Courier"}}
Es ist identisch in Selenium und in Chrom
BEARBEITEN:
VPNs können nur einmal verwendet werden, werden jedoch nach dem Laden der ersten Seite erkannt. Offensichtlich wird Javascript ausgeführt, um Selenium zu erkennen.
Ersetzen der Variablen cdc_
Mit Vim oder Perl
Sie können vim
verwenden oder, wie @Vic Seedoubleyew in der Antwort von @ Erti-Chris Eelmaa, Perl
, darauf hingewiesen hat, die Variable cdc_
In chromedriver
( Weitere Informationen zu dieser Variablen finden Sie im Beitrag von @ Erti-Chris Eelmaa ). Die Verwendung von vim
oder Perl
verhindert, dass Sie den Quellcode neu kompilieren oder einen Hex-Editor verwenden müssen. Stellen Sie sicher, dass Sie eine Kopie des ursprünglichen chromedriver
erstellen, bevor Sie versuchen, es zu bearbeiten. Die folgenden Methoden wurden auch mit chromedriver version 2.41.578706
Getestet.
vim /path/to/chromedriver
Nachdem Sie die obige Zeile durchlaufen haben, werden Sie wahrscheinlich eine Menge Kauderwelsch sehen. Mach Folgendes:
cdc_
, Indem Sie /cdc_
Eingeben und return
drücken.a
.$cdc_lasutopfhvcZLmcfl
Und ersetzen Sie die gelöschte Menge durch die gleichen Zeichen. Andernfalls schlägt chromedriver
fehl.esc
.:wq!
Ein und drücken Sie return
.:q!
Ein und drücken Sie return
.Gehen Sie zu dem geänderten chromedriver
und doppelklicken Sie darauf. Ein terminal
Fenster sollte sich öffnen. Wenn Sie killed
nicht in der Ausgabe sehen, haben Sie den Treiber erfolgreich geändert.
Die folgende Zeile ersetzt cdc_
Durch dog_
:
Perl -pi -e 's/cdc_/dog_/g' /path/to/chromedriver
Stellen Sie sicher, dass die Ersatzzeichenfolge die gleiche Anzahl von Zeichen wie die Suchzeichenfolge enthält, da andernfalls das chromedriver
fehlschlägt.
Perl Erklärung
s///g
Gibt an, dass Sie nach einer Zeichenfolge suchen und diese global durch eine andere Zeichenfolge ersetzen möchten (ersetzt alle Vorkommen).
z. B.
s/string/replacment/g
Damit,
s///
Bezeichnet das Suchen und Ersetzen eines Strings.
cdc_
Ist der Suchbegriff.
dog_
Ist die Ersatzzeichenfolge.
g
ist der globale Schlüssel, der jedes Vorkommen der Zeichenfolge ersetzt.
So überprüfen Sie, ob der Perl-Ersatz funktioniert hat
Die folgende Zeile gibt jedes Vorkommen der Suchzeichenfolge cdc_
Aus:
Perl -ne 'while(/cdc_/g){print "$&\n";}' /path/to/chromedriver
Wenn dies nichts zurückgibt, wurde cdc_
Ersetzt.
Umgekehrt können Sie dies verwenden:
Perl -ne 'while(/dog_/g){print "$&\n";}' /path/to/chromedriver
um zu sehen, ob sich Ihre Ersatzzeichenfolge dog_
jetzt in der Binärdatei chromedriver
befindet. Wenn dies der Fall ist, wird die Ersatzzeichenfolge auf der Konsole gedruckt.
Gehen Sie zu dem geänderten chromedriver
und doppelklicken Sie darauf. Ein terminal
Fenster sollte sich öffnen. Wenn Sie killed
nicht in der Ausgabe sehen, haben Sie den Treiber erfolgreich geändert.
Stellen Sie nach dem Ändern der Binärdatei chromedriver
sicher, dass der Name der geänderten Binärdatei chromedriver
chromedriver
lautet und dass die ursprüngliche Binärdatei entweder von ihrem ursprünglichen Speicherort verschoben oder umbenannt wird.
Ich wurde zuvor bei dem Versuch, mich anzumelden, auf einer Website entdeckt, aber nachdem ich cdc_
Durch eine Zeichenfolge gleicher Größe ersetzt hatte, konnte ich mich anmelden. Sie könnten aus einer Vielzahl anderer Gründe blockiert werden, selbst wenn Sie diese Methode anwenden. Daher müssen Sie möglicherweise versuchen, auf die Site zuzugreifen, die Sie über ein VPN, ein anderes Netzwerk oder über Ihre Daten erkannt hat.
Grundsätzlich ist die Selenium-Erkennung so, dass sie auf vordefinierte Javascript-Variablen prüft, die beim Ausführen mit Selenium angezeigt werden. Die Bot-Erkennungsskripte sehen in der Regel in allen Variablen (im Fensterobjekt) alles aus, das Word "Selenium"/"Webdriver" enthält, sowie Dokumentvariablen mit den Namen $cdc_
und $wdc_
. Natürlich hängt das alles davon ab, in welchem Browser Sie sich befinden. Alle verschiedenen Browser zeigen verschiedene Dinge auf.
Für mich habe ich Chrome verwendet, also alles, was ich tun musste musste sicherstellen, dass $cdc_
nicht mehr als Dokumentvariable existierte, und voila (Chromedriver-Quellcode herunterladen, Chromedriver ändern und $cdc_
erneut kompilieren unter anderem Namen.)
dies ist die Funktion, die ich im Chromedriver modifiziert habe:
call_function.js:
function getPageCache(opt_doc) {
var doc = opt_doc || document;
//var key = '$cdc_asdjflasutopfhvcZLmcfl_';
var key = 'randomblabla_';
if (!(key in doc))
doc[key] = new Cache();
return doc[key];
}
(Beachte den Kommentar, alles was ich getan habe, habe ich $cdc_
in randomblabla_
umgewandelt.
Hier ist ein Pseudo-Code, der einige der von Bot-Netzwerken verwendeten Techniken demonstriert:
runBotDetection = function () {
var documentDetectionKeys = [
"__webdriver_evaluate",
"__Selenium_evaluate",
"__webdriver_script_function",
"__webdriver_script_func",
"__webdriver_script_fn",
"__fxdriver_evaluate",
"__driver_unwrapped",
"__webdriver_unwrapped",
"__driver_evaluate",
"__Selenium_unwrapped",
"__fxdriver_unwrapped",
];
var windowDetectionKeys = [
"_phantom",
"__nightmare",
"_Selenium",
"callPhantom",
"callSelenium",
"_Selenium_IDE_Recorder",
];
for (const windowDetectionKey in windowDetectionKeys) {
const windowDetectionKeyValue = windowDetectionKeys[windowDetectionKey];
if (window[windowDetectionKeyValue]) {
return true;
}
};
for (const documentDetectionKey in documentDetectionKeys) {
const documentDetectionKeyValue = documentDetectionKeys[documentDetectionKey];
if (window['document'][documentDetectionKeyValue]) {
return true;
}
};
for (const documentKey in window['document']) {
if (documentKey.match(/\$[a-z]dc_/) && window['document'][documentKey]['cache_']) {
return true;
}
}
if (window['external'] && window['external'].toString() && (window['external'].toString()['indexOf']('Sequentum') != -1)) return true;
if (window['document']['documentElement']['getAttribute']('Selenium')) return true;
if (window['document']['documentElement']['getAttribute']('webdriver')) return true;
if (window['document']['documentElement']['getAttribute']('driver')) return true;
return false;
};
laut Benutzer @szx ist es auch möglich, die Datei chromedriver.exe einfach im Hex-Editor zu öffnen und einfach manuell zu ersetzen, ohne das Kompilieren tatsächlich durchzuführen.
Wie wir bereits in der Frage und den geposteten Antworten herausgefunden haben, gibt es hier einen Anti-Web-Scraping- und einen Bot-Erkennungsdienst namens "Distil Networks" . Und laut dem CEO des Unternehmens interview :
Obwohl sie neue Bots erstellen können, haben wir einen Weg gefunden, .__ zu identifizieren. Selen ist ein Werkzeug, das sie verwenden. Daher blockieren wir Selen Nr egal wie oft sie auf diesem Bot iterieren. Wir machen das jetzt. mit Python und vielen verschiedenen Technologien. Sobald wir ein Muster sehen, __. tauchen aus einem Bot-Typ auf, dann arbeiten wir daran, die. Technologie, die sie verwenden, und identifizieren sie als bösartig.
Es braucht Zeit und zusätzliche Herausforderungen, um zu verstehen, wie genau sie Selen erkennen, aber was können wir im Moment sicher sagen:
Beschlossen, es als Antwort zu posten, da eindeutig:
Kann eine Website erkennen, wenn Sie Selenium mit Chromdriver verwenden?
Ja.
Was ich bisher noch nicht experimentiert habe, ist älteres Selenium und ältere Browserversionen. Theoretisch könnte Selenium an einem bestimmten Punkt implementiert/hinzugefügt werden, auf das sich der Distil Networks-Bot-Detektor derzeit verlässt. Wenn dies der Fall ist, können wir feststellen (ja, lassen Sie uns den Detektor erkennen), an welchem Punkt/in welcher Version eine relevante Änderung vorgenommen wurde, und schauen Sie sich das Änderungsprotokoll und die Änderungssets an. Dies könnte uns weitere Informationen darüber geben, wo Sie suchen müssen und was ist es, was sie verwenden, um einen Web-Treiber-Browser zu erkennen. Es ist nur eine Theorie, die getestet werden muss.
Beispiel für die Implementierung auf wellsfargo.com:
try {
if (window.document.documentElement.getAttribute("webdriver")) return !+[]
} catch (IDLMrxxel) {}
try {
if ("_Selenium_IDE_Recorder" in window) return !+""
} catch (KknKsUayS) {}
try {
if ("__webdriver_script_fn" in document) return !+""
partial interface Navigator { readonly attribute boolean webdriver; };
Das Webdriver-IDL-Attribut der Navigator-Schnittstelle muss den Wert des Flag für Webdriver-Aktiv zurückgeben, der anfangs falsch ist.
Mit dieser Eigenschaft können Websites feststellen, dass der Benutzeragent von WebDriver kontrolliert wird, und kann dazu verwendet werden, Denial-of-Service-Angriffe zu verringern.
Direkt aus dem 2017 W3C Editor's Draft of WebDriver entnommen. Dies impliziert stark, dass zumindest zukünftige Iterationen der Selenium-Fahrer identifiziert werden können, um Missbrauch zu verhindern. Letztendlich ist es ohne den Quellcode schwer zu sagen, was genau den Chrome-Treiber speziell erkennt.
Versuchen Sie, Selenium mit einem bestimmten Benutzerprofil von Chrome zu verwenden. Auf diese Weise können Sie es als bestimmten Benutzer verwenden und definieren, was Sie möchten. Wenn dies der Fall ist, wird es als "echter" Benutzer verwendet Sie werden den Unterschied bei den Tags sehen.
Zum Beispiel:
username = os.getenv("USERNAME")
userProfile = "C:\\Users\\" + username + "\\AppData\\Local\\Google\\Chrome\\User Data\\Default"
options = webdriver.ChromeOptions()
options.add_argument("user-data-dir={}".format(userProfile))
# add here any tag you want.
options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors", "safebrowsing-disable-download-protection", "safebrowsing-disable-auto-update", "disable-client-side-phishing-detection"])
chromedriver = "C:\Python27\chromedriver\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
browser = webdriver.Chrome(executable_path=chromedriver, chrome_options=options)
chrom-Tag-Liste hier
Ich habe den Chromedriver-Quellcode überprüft. Dadurch werden einige Javascript-Dateien in den Browser eingefügt.
Jede Javascript-Datei auf diesem Link wird in die Webseiten eingefügt:https://chromium.googlesource.com/chromium/src/+/master/chrome/test/chromedriver/js/
Also habe ich Reverse Engineering verwendet und die js-Dateien durch Hex-Bearbeitung obfuscated. Jetzt war ich mir sicher, dass keine Javascript-Variablen, Funktionsnamen und feste Zeichenfolgen verwendet wurden, um die Selen-Aktivität aufzudecken. Trotzdem erkennen einige Sites und reCaptcha Selen!
Vielleicht überprüfen sie die Modifikationen, die durch die Ausführung von Chromedriver Js verursacht werden :)
Edit 1:
Ich habe entdeckt, dass es einige Parameter in 'Navigator' gibt, die kurz die Verwendung von Chromdriver aufdecken. Dies sind die Parameter:
Was ich brauchte, war eine Chrome-Erweiterung, um Javascript auf den Webseiten auszuführen. Ich habe eine Erweiterung mit dem js-Code erstellt, die im Artikel enthalten ist, und verwendete einen anderen Artikel , um die gezippte Erweiterung zu meinem Projekt hinzuzufügen. Ich habe die Werte erfolgreich geändert. Trotzdem hat sich nichts geändert!
Ich habe keine anderen Variablen wie diese gefunden, aber das bedeutet nicht, dass sie nicht existieren. ReCaptcha erkennt immer noch einen Chrom-Treiber. Es sollten also mehr Variablen zum Ändern vorhanden sein. Der nächste Schritt sollte Reverse Engineering der Detektordienste sein, die ich nicht machen möchte.
Now Ich bin mir nicht sicher, ob es sich lohnt, mehr Zeit für diesen Automatisierungsprozess aufzuwenden oder nach alternativen Methoden zu suchen!
Selbst wenn Sie alle richtigen Daten senden (z. B. zeigt Selenium keine Erweiterung, haben Sie eine angemessene Auflösung/Bittiefe, & c), gibt es eine Reihe von Diensten und Tools, die das Besucherverhalten bestimmen, um zu bestimmen, ob die Akteur ist ein Benutzer oder ein automatisiertes System.
Wenn Sie zum Beispiel eine Website besuchen und dann sofort eine Aktion ausführen, indem Sie die Maus in weniger als einer Sekunde direkt auf die entsprechende Schaltfläche bewegen, ist dies kein Benutzer, der tatsächlich etwas tun würde.
Es kann auch als Debugging-Tool nützlich sein, wenn Sie eine Website wie https://panopticlick.eff.org/ verwenden, um zu überprüfen, wie einzigartig Ihr Browser ist. Es hilft Ihnen auch zu überprüfen, ob es bestimmte Parameter gibt, die angeben, dass Sie in Selenium laufen.
Es hört sich an, als ob sie sich hinter einer Firewall für Webanwendungen befinden. Werfen Sie einen Blick auf modsecurity und owasp, um zu sehen, wie diese funktionieren. In der Realität fragen Sie sich, wie Sie die Umgehung der Bot-Erkennung durchführen können. Dafür ist der Selenium-Web-Treiber nicht gedacht. Es dient zum Testen Ihrer Webanwendung, die nicht auf andere Webanwendungen trifft. Es ist möglich, aber im Grunde müsste man sich ansehen, wonach eine WAF in ihrem Regelsatz sucht, und dies mit Selenium vermeiden, wenn man kann. Selbst dann funktioniert es immer noch nicht, weil Sie nicht wissen, welche WAF sie verwenden. Sie haben den richtigen ersten Schritt getan, nämlich den Benutzeragenten zu fälschen. Wenn das nicht funktioniert hat, ist eine WAF vorhanden und Sie müssen wahrscheinlich schwieriger werden.
Bearbeiten: Punkt aus anderer Antwort übernommen. Stellen Sie sicher, dass Ihr Benutzeragent zuerst richtig eingestellt ist. Vielleicht haben Sie einen lokalen Webserver angesprochen oder den Datenverkehr erfasst.
Firefox soll window.navigator.webdriver === true
einstellen, wenn mit einem Web-Treiber gearbeitet wird. Dies entsprach einer der älteren Spezifikationen (z. B. archive.org ), aber ich konnte sie nicht in der new finden, abgesehen von einigen sehr vagen Formulierungen in den Anhängen.
Ein Test dafür ist im Selenium-Code in der Datei fingerprint_test.js , wo der Kommentar am Ende lautet "Derzeit nur in Firefox implementiert", aber ich konnte keinen Code in dieser Richtung mit einfachen grep
ing identifizieren , weder im aktuellen (41.0.2) Firefox-Release-Baum noch im Chromium-Baum.
Ich habe auch einen Kommentar zu einem älteren Commit bezüglich Fingerprinting im Firefox-Treiber b82512999938 vom Januar 2015 gefunden . Dieser Code befindet sich noch im Selenium GIT-Master, der gestern unter javascript/firefox-driver/extension/content/server.js
heruntergeladen wurde, mit einem Kommentar, der auf den etwas anders formulierten Anhang in der aktuellen Spezifikation des w3c-Webtreibers verweist.
Die Bot-Erkennung, die ich gesehen habe, scheint komplexer oder zumindest anders zu sein als in den Antworten unten.
EXPERIMENT 1:
EXPERIMENT 2:
Wie zuvor öffne ich einen Browser und die Webseite mit Selenium von einer Python-Konsole aus.
Dieses Mal verwende ich, anstatt mit der Maus zu klicken, Selenium (in der Python-Konsole), um dasselbe Element mit einem zufälligen Versatz anzuklicken.
Der Link wird nicht geöffnet, aber ich werde zu einer Anmeldeseite weitergeleitet.
AUSWIRKUNGEN:
Scheint geheimnisvoll, aber ich denke, sie können nur feststellen, ob eine Aktion von Selenium ausgeht oder nicht, während es ihnen egal ist, ob der Browser selbst über Selenium geöffnet wurde oder nicht. Oder können sie feststellen, ob das Fenster den Fokus hat? Es wäre interessant zu erfahren, ob jemand Einblicke hat.
Außerdem habe ich festgestellt, dass einige Websites eine Plattform verwenden, die den User Agent überprüft. Wenn der Wert "HeadlessChrome" enthält, kann das Verhalten bei Verwendung des Headless-Modus seltsam sein.
Die Problemumgehung besteht darin, den Benutzeragentenwert zu überschreiben, beispielsweise in Java: chromeOptions.addArguments ("- Benutzeragent = Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/73.0.3683.86 Safari/537.36 ");
Einige Websites erkennen dies:
function d() {
try {
if (window.document.$cdc_asdjflasutopfhvcZLmcfl_.cache_)
return !0
} catch (e) {}
try {
//if (window.document.documentElement.getAttribute(decodeURIComponent("%77%65%62%64%72%69%76%65%72")))
if (window.document.documentElement.getAttribute("webdriver"))
return !0
} catch (e) {}
try {
//if (decodeURIComponent("%5F%53%65%6C%65%6E%69%75%6D%5F%49%44%45%5F%52%65%63%6F%72%64%65%72") in window)
if ("_Selenium_IDE_Recorder" in window)
return !0
} catch (e) {}
try {
//if (decodeURIComponent("%5F%5F%77%65%62%64%72%69%76%65%72%5F%73%63%72%69%70%74%5F%66%6E") in document)
if ("__webdriver_script_fn" in document)
return !0
} catch (e) {}
Schreiben Sie eine HTML-Seite mit dem folgenden Code. Sie werden sehen, dass Selenium im DOM ein Webdriver-Attribut in der outerHTML anwendet
<html>
<head>
<script type="text/javascript">
<!--
function showWindow(){
javascript:(alert(document.documentElement.outerHTML));
}
//-->
</script>
</head>
<body>
<form>
<input type="button" value="Show outerHTML" onclick="showWindow()">
</form>
</body>
</html>
Am einfachsten scheint es mir bei Selenium zu sein, das XHR abzufangen, das den Browser-Fingerabdruck zurücksendet.
Da dies jedoch nur ein Problem mit Selen ist, ist es besser, etwas anderes zu verwenden. Selen soll solche Dinge leichter machen, nicht viel schwieriger.
Zusätzlich zu der großartigen Antwort von @ Erti-Chris Eelmaa gibt es ärgerlichen window.navigator.webdriver
und er ist schreibgeschützt. Ereignis, wenn Sie den Wert in false
ändern, hat es noch true
. Deswegen kann der Browser, der von automatisierter Software gesteuert wird, immer noch erkannt werden . MDN
Die Variable wird durch das Flag --enable-automation
in Chrome verwaltet. Der Chromdriver startet Chrom mit dieser Flagge und Chrom setzt den window.navigator.webdriver
auf true
. Sie finden es hier . Sie müssen das Flag zum Ausschließen von Schaltern hinzufügen. Zum Beispiel (Golang):
package main
import (
"github.com/tebeka/Selenium"
"github.com/tebeka/Selenium/chrome"
)
func main() {
caps := Selenium.Capabilities{
"browserName": "chrome",
}
chromeCaps := chrome.Capabilities{
Path: "/path/to/chrome-binary",
ExcludeSwitches: []string{"enable-automation"},
}
caps.AddChrome(chromeCaps)
wd, err := Selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", 4444))
}
Ich habe festgestellt, dass die JavaScript-Variable "key" folgendermaßen geändert wurde:
//Fools the website into believing a human is navigating it
((JavascriptExecutor)driver).executeScript("window.key = \"blahblah\";");
funktioniert für einige Websites, wenn Selenium Webdriver zusammen mit Google Chrome verwendet wird, da viele Websites nach dieser Variablen suchen, um zu verhindern, dass Selenium sie verschrottet.