首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向python selenium选项添加-profile参数时,Firefox连接被拒绝

向python selenium选项添加-profile参数时,Firefox连接被拒绝
EN

Stack Overflow用户
提问于 2020-09-16 00:46:33
回答 1查看 245关注 0票数 2

我正在尝试将python中的Firefox selenium驱动程序的启动选项添加到capture crash data。我用来启动驱动程序的函数如下所示:

代码语言:javascript
复制
import os 
from selenium import webdriver  
from selenium.webdriver.firefox.options import Options as FFOptions
from selenium.webdriver.firefox.webdriver import WebDriver as FirefoxWebDriver 
import tempfile
SELENIUM_TEMP_DIR = os.path.abspath('./data/raw')


def get_local_firefox_driver():
    
    os.environ['MOZ_FORCE_DISABLE_E10S'] = '1'
    ff_options = FFOptions()

    # Add custom crash dump folder
    profile_temp = tempfile.mkdtemp(".selenium", dir=SELENIUM_TEMP_DIR)
    print("*** Using profile: {}".format(profile_temp))
    ff_options.add_argument("-profile")
    ff_options.add_argument(profile_temp)

    ff_profile = webdriver.FirefoxProfile()
    # set some privacy settings
    ff_profile.set_preference("places.history.enabled", False)
    ff_profile.set_preference("privacy.clearOnShutdown.offlineApps", True)
    ff_profile.set_preference("privacy.clearOnShutdown.passwords", True)
    ff_profile.set_preference("privacy.clearOnShutdown.siteSettings", True)
    ff_profile.set_preference("privacy.sanitize.sanitizeOnShutdown", True)
    ff_profile.set_preference("signon.rememberSignons", False)
    ff_profile.set_preference("network.cookie.lifetimePolicy", 2)
    ff_profile.set_preference("network.dns.disablePrefetch", True)
    ff_profile.set_preference("network.http.sendRefererHeader", 0)
    ff_profile.set_preference("permissions.default.image", 2)

    driver = webdriver.Firefox(firefox_profile=ff_profile, options=ff_options)
    return driver

当我尝试用这个版本的函数启动驱动程序时,我得到了这个错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/Users/username/project_name/error_demo.py", line 2, in <module>
    driver = get_local_firefox_driver(headless=False)
  File "/Users/username/project_name/src/selenium_helper.py", line 129, in get_local_firefox_driver
    driver = webdriver.Firefox(firefox_profile=ff_profile, options=ff_options, capabilities=ff_capabilities)
  File "/Users/username/miniconda3/envs/live_auction/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
    keep_alive=True)
  File "/Users/username/miniconda3/envs/live_auction/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/Users/username/miniconda3/envs/live_auction/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/Users/username/miniconda3/envs/live_auction/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/Users/username/miniconda3/envs/live_auction/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: connection refused

在崩溃期间,Firefox实际上打开了,看起来像这样:

如果我注释掉用于捕获崩溃数据的代码部分

代码语言:javascript
复制
# Add custom crash dump folder
profile_temp = tempfile.mkdtemp(".selenium", dir=SELENIUM_TEMP_DIR)
print("*** Using profile: {}".format(profile_temp))
ff_options.add_argument("-profile")
ff_options.add_argument(profile_temp)

我没有收到任何错误,Firefox浏览器如下所示:

如何修改get_local_firefox_driver()才能让火狐和geckodriver正确启动并捕获崩溃数据?

EN

回答 1

Stack Overflow用户

发布于 2020-09-19 13:31:15

我认为像这样的东西应该是有效的:

代码语言:javascript
复制
import tempfile

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

# Custom profile folder to keep the minidump files
profile = tempfile.mkdtemp(".selenium")
print("*** Using profile: {}".format(profile))

# Use the above folder as custom profile
opts = Options()
opts.add_argument("-profile")
opts.add_argument(profile)
opts.binary = "/Applications/Firefox.app/Contents/MacOS/firefox"

driver = webdriver.Firefox(options=opts,
    # hard-code the Marionette port so geckodriver can connect
    service_args=["--marionette-port", "2828"])

# Your test code which crashes Firefox

如果这不起作用,我建议您查看official documentation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63906413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档