在firefox webdriver选项中排除开关

luc*_*cas 8 python selenium selenium-firefoxdriver

使用Selenium和python,我可以使用Chrome webdriver来做到这一点:

options.add_experimental_option("excludeSwitches", ["enable-automation"])
driver = webdriver.Chrome(options = options)
Run Code Online (Sandbox Code Playgroud)

但是我找不到Firefox的webdriver选项的类似属性。是否存在?

CST*_*CST 11

Firefox 使用不同的标志。我不确定您的目标是什么,但我假设您正试图避免某些网站检测到您正在使用硒。

有多种方法可以避免网站检测到 Selenium 的使用。

1)使用Selenium时navigator.webdriver的值默认设置为true。此变量将出现在 Chrome 和 Firefox 中。此变量应设置为“未定义”以避免检测。

2) 也可以使用代理服务器来避免检测。

3) 某些网站能够使用您浏览器的状态来确定您是否在使用 Selenium。您可以将 Selenium 设置为使用自定义浏览器配置文件来避免这种情况。

下面的代码使用了所有这三种方法。

profile = webdriver.FirefoxProfile('C:\\Users\\You\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\something.default-release')

PROXY_HOST = "12.12.12.123"
PROXY_PORT = "1234"
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", PROXY_HOST)
profile.set_preference("network.proxy.http_port", int(PROXY_PORT))
profile.set_preference("dom.webdriver.enabled", False)
profile.set_preference('useAutomationExtension', False)
profile.update_preferences()
desired = DesiredCapabilities.FIREFOX

driver = webdriver.Firefox(firefox_profile=profile, desired_capabilities=desired)
Run Code Online (Sandbox Code Playgroud)

  • 是的,该属性是只读的。这意味着它不能**更改**,但可以**初始化**为任何值。因此,代码将启动一个浏览器,并将属性设置为“未定义”,而不是默认的“true”。为了演示差异,您可以在启动浏览器后运行 JavaScript 来更改属性,但它不会起作用。要像我在回答之前一样测试代码,您可以运行它,然后手动打开开发控制台并输入“navigator.webdriver”并按 Enter 键。你会看到它现在是“未定义”的。 (2认同)

小智 3

你可以尝试:

from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
from selenium.webdriver import DesiredCapabilities
from selenium.webdriver import Firefox


profile = FirefoxProfile()
profile.set_preference('devtools.jsonview.enabled', False)
profile.update_preferences()
desired = DesiredCapabilities.FIREFOX

driver = Firefox(firefox_profile=profile, desired_capabilities=desired)
Run Code Online (Sandbox Code Playgroud)