当前位置: 首页 > 知识库问答 >
问题:

如何隐藏WebDriver在壁虎驱动程序从BotD在Java?

章涵容
2023-03-14

我遵循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检测

我怎样才能解决这个问题?

共有2个答案

白禄
2023-03-14

BotD检测到您,因为您没有覆盖navigator.webdriver属性。

我可以用以下代码覆盖它:

((JavascriptExecutor)driver).executeScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");

driver.get(“BotD url”)之后,用此行重新运行代码,然后单击BotD页面上的“开始检测”。

它将不再显示检测到网络驱动程序。

我知道您正在寻找一种方法,使其在初始页面加载之前工作。

但有两件事需要考虑:

  1. Webdriver开发人员希望浏览器能够检测到他们的工具。
锺离正祥
2023-03-14

使用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/")

您可以在中找到一些相关的详细讨论

  • 如何使用GeckoDriver和Selenium通过Python启动Tor Browser 9.5,该浏览器使用默认Firefox到68.9.0esr
 类似资料:
  • 问题内容: 我需要关闭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应用程序中隐藏导航栏? 起初我知道如何隐藏它,但一旦我触摸屏幕,它就会弹出。我想把它隐藏起来,就像《部落冲突》这样的游戏把它隐藏起来一样,唯一让它弹出的方法是向下滑动通知或者滑动导航栏应该在的地方。