我遵循Stackoverflow上的这篇文章来禁用Firefox WebDriver检测。
发射壁虎河:
System.setProperty("webdriver.gecko.driver", geckdriverExecutableFilePath);
File firefoxProfileFile = new File(fullPathOfFirefoxInstallationFolder);
FirefoxProfile firefoxProfile = null;
try {
firefoxProfile = new FirefoxProfile(firefoxProfileFile);
} catch (Exception e) {
e.printStackTrace();
}
我禁用了WebDriver
:
WebDriver已禁用
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setProfile(firefoxProfile);
// Disables WebRTC
firefoxProfile.setPreference("media.peerconnection.enabled", false);
I禁用了自动化扩展:
自动扩展已禁用
// Disables Automation Extension
firefoxProfile.setPreference("useAutomationExtension", false);
我添加了代理:
DesiredCapabilities dc = DesiredCapabilities.firefox();
Proxy proxy = new Proxy();
proxy.setHttpProxy(ipAddress + ":" + port);
proxy.setFtpProxy(ipAddress + ":" + port);
proxy.setSslProxy(ipAddress + ":" + port);
dc.setCapability(CapabilityType.PROXY, proxy);
firefoxOptions.merge(dc);
driver = new FirefoxDriver(firefoxOptions);
然而BotD仍然检测到我的浏览器被自动化工具控制。
BotD检测
我怎样才能解决这个问题?
BotD检测到您,因为您没有覆盖navigator.webdriver属性。
我可以用以下代码覆盖它:
((JavascriptExecutor)driver).executeScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
在driver.get(“BotD url”)
之后,用此行重新运行代码,然后单击BotD页面上的“开始检测”。
它将不再显示检测到网络驱动程序。
我知道您正在寻找一种方法,使其在初始页面加载之前工作。
但有两件事需要考虑:
使用Selenium驱动的GeckoDriver启动firefox浏览上下文时
当用户代理处于远程控制之下时,webDrive-active标志设置为true
。它最初是false
。
其中,webdriver
如果设置了webdriver活动标志,则返回true
,否则返回false
。
作为:
webdriver定义了一种标准的方式,让协作用户代理通知文档它是由webdriver控制的,例如,这样在自动化过程中可以触发备用代码路径。
在他的评论中进一步证实了:
此实现必须符合此要求。因此,我们不会提供一种方法来规避这一点。
因此,底线是:
硒可以自我识别
而且没有办法掩盖浏览器是WebDriver驱动的这一事实。
然而,一些专家提出了一些不同的方法,可以掩盖这样一个事实,即Mozilla Firefox浏览器是通过使用Firefox配置文件和代理来控制WebDriver的,如下所示:
selenium4兼容的python代码
from selenium.webdriver import Firefox
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
profile_path = r'C:\Users\Admin\AppData\Roaming\Mozilla\Firefox\Profiles\s8543x41.default-release'
options=Options()
options.set_preference('profile', profile_path)
options.set_preference('network.proxy.type', 1)
options.set_preference('network.proxy.socks', '127.0.0.1')
options.set_preference('network.proxy.socks_port', 9050)
options.set_preference('network.proxy.socks_remote_dns', False)
service = Service('C:\\BrowserDrivers\\geckodriver.exe')
driver = Firefox(service=service, options=options)
driver.get("https://www.google.com")
driver.quit()
一个可能的解决方案是使用tor浏览器,如下所示:
selenium4兼容的python代码
from selenium.webdriver import Firefox
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
import os
torexe = os.popen(r'C:\Users\username\Desktop\Tor Browser\Browser\TorBrowser\Tor\tor.exe')
profile_path = r'C:\Users\username\Desktop\Tor Browser\Browser\TorBrowser\Data\Browser\profile.default'
firefox_options=Options()
firefox_options.set_preference('profile', profile_path)
firefox_options.set_preference('network.proxy.type', 1)
firefox_options.set_preference('network.proxy.socks', '127.0.0.1')
firefox_options.set_preference('network.proxy.socks_port', 9050)
firefox_options.set_preference("network.proxy.socks_remote_dns", False)
firefox_options.binary_location = r'C:\Users\username\Desktop\Tor Browser\Browser\firefox.exe'
service = Service('C:\\BrowserDrivers\\geckodriver.exe')
driver = webdriver.Firefox(service=service, options=firefox_options)
driver.get("https://www.tiktok.com/")
您可以在中找到一些相关的详细讨论
问题内容: 我需要关闭Marionette / GeckoDriver日志记录;有什么办法吗?我已经进行了很多搜索,但是没有得到正确的答案。INFO日志为: 如何关闭此日志记录? 问题答案: 尝试了以下代码,但是没有用。好像在
我正在使用Selenium,我正在测试下面的代码。 运行后,将显示以下错误: 线程“main”java中出现异常。lang.IllegalStateException:驱动程序可执行文件的路径必须由webdriver设置。壁虎。驱动系统属性;有关详细信息,请参阅https://github.com/mozilla/geckodriver.最新版本可从以下网站下载:https://github.co
问题内容: 是否有隐藏光标的方法(除了使用透明图像作为光标以外)? 问题答案: 似乎该类没有开始的“空白”游标,因此可以使用该方法定义一个新的“空白”游标。 这是我尝试过的一种可行的方法: 编辑 关于结尾处没有游标的所有注释,似乎包含在中的s 最终将继承容器的游标(),因此如果要求一定要让游标出现,则必须手动设置所需的光标。 例如,如果中包含,则可以使用方法将其光标设置为系统的默认值:
问题内容: 当我同时执行多个测试时,我不想保持Firefox浏览器窗口可见。我可以使用来最小化它,但我不想这样做。 有什么办法可以隐藏Firefox窗口吗?我正在使用FireFox WebDriver。 问题答案: 最终,我找到了使用Windows Machine通过任何方法运行测试的用户的解决方案。嗯,实现不是用Java编写的,但是您可以很容易地做到。 使用工具。它具有处理窗口的所有功能。这是一
我正在将网络驱动程序与Java一起使用进行测试自动化。我有以下HTML代码用于隐藏的输入字段: 如何在Selenium2(WebDriver)中的隐藏字段中键入某些内容?我已将代码编写为: 但它被显示以下错误: org.openqa.硒.元素不可见异常: 元素当前不可见, 因此可能未与命令持续时间或超时交互: 30.04 秒 有人能帮我在隐藏字段中写/键入一些文本吗?
我想知道如何在Android应用程序中隐藏导航栏? 起初我知道如何隐藏它,但一旦我触摸屏幕,它就会弹出。我想把它隐藏起来,就像《部落冲突》这样的游戏把它隐藏起来一样,唯一让它弹出的方法是向下滑动通知或者滑动导航栏应该在的地方。