带有 Selenium 私有模式的 FirefoxProfile
Posted
技术标签:
【中文标题】带有 Selenium 私有模式的 FirefoxProfile【英文标题】:FirefoxProfile with private mode for Selenium 【发布时间】:2022-01-08 06:38:37 【问题描述】:我想为一个网站创建多个窗口,因此我需要为每个窗口创建新的身份。我认为私人模式对我来说是个不错的解决方案。 但是旧的方法并没有产生结果:
firefox_profile = webdriver.FirefoxProfile()
firefox_profile.set_preference("browser.privatebrowsing.autostart", True)
browser = webdriver.Firefox(firefox_profile=firefox_profile)
def main():
browser.switch_to.new_window('window')
browser.get("https://example.com")
我在码头找不到任何信息,所以也许你可以帮忙
【问题讨论】:
您能否就您的问题提供更多背景信息?这有助于避免XY problem。 我需要使用不同的用户名和密码循环打开新的浏览器窗口,每个窗口一个帐户。我现在的想法是使用私有模式,但不知道如何在新版本的 selenium 上使用它,因为旧方法不再有效 【参考方案1】:根据Selenium 4 beta 1 发行说明:
在驱动程序实例化中弃用除
Options
和Service
之外的所有参数。 (#9125,#9128)
所以你会看到如下错误:
firefox_profile has been deprecated, please pass in an Options object
您必须使用 Options
的实例来传递 FirefoxProfile 首选项,如下所示:
from selenium import webdriver
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.chrome.service import Service
def main():
firefox_options = Options()
firefox_options.set_preference("browser.privatebrowsing.autostart", True)
s = Service('C:\\BrowserDrivers\\geckodriver.exe')
driver = webdriver.Firefox(service=s, options=firefox_options)
driver.get("https://www.google.com")
if __name__== "__main__" :
main()
浏览器快照:
参考文献
您可以在以下位置找到一些相关的详细讨论:
DeprecationWarning: firefox_profile has been deprecated, please pass in an Options object【讨论】:
如何确定这是真正的私人模式?是否可以为 Linux 调整代码? 我已经演示了通过FirefoxProfile()
preference browser.privatebrowsing.autostart
的方法。但我不确定这些实现,因为我不经常使用该功能。【参考方案2】:
这应该是“新”方式:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--incognito")
service = Service(r"C:\Program Files (x86)\chromedriver.exe")
driver = webdriver.Chrome(service=service, options=chrome_options)
它应该与 Firefox 以相同的方式工作。
【讨论】:
它只是启动正常模式。木偶浏览器模式会不会是无法启动私密模式的原因?【参考方案3】:我想出了如何为 Firefox 设置私有模式:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
def main():
firefox_options = Options()
firefox_options.add_argument('-private')
driver = webdriver.Firefox(options=firefox_options)
# driver.get("https://example.com")
if __name__ == "__main__":
main()
我已经注释了 get 以确保浏览器真正以私密模式打开。您可以在选项卡名称中看到它。
但它并没有像我预期的那样为每个新窗口提供新的身份。
【讨论】:
以上是关于带有 Selenium 私有模式的 FirefoxProfile的主要内容,如果未能解决你的问题,请参考以下文章
带有 Firefox Web 驱动程序的 Selenium 无法通过 Python 代码找到元素
SessionNotCreatedException:无法创建新服务:Ubuntu 上带有 Selenium Grid 的 GeckoDriverService 无法驱动 Firefox
java+selenium+new——启动带有用户配置信息的Firefox浏览器窗口
selenium.common.exceptions.InvalidSessionIdException通过Python在无头模式下使用GeckoDriver Selenium Firefox(示例代