一尘不染

Python / Selenium / Firefox:无法使用指定的配置文件路径启动Firefox

selenium

我尝试使用指定的配置文件启动Firefox:

firefox_profile = webdriver.FirefoxProfile('/Users/p2mbot/projects/test/firefox_profile')
driver = webdriver.Firefox(firefox_profile=firefox_profile)

driver.get('http://google.com')
time.sleep(60)
driver.quit()

/Users/p2mbot/projects/test/firefox_profile -这个目录是正确的Firefox配置文件目录,我用
firefox-bin --ProfileManager

但是当我通过selenium检查firefox中的about:cache页面时,它具有不同的缓存路径:

Storage disk location:  /var/folders/jj/rdpd1ww53n95y5vx8w618k3h0000gq/T/tmpp2ahq70_/webdriver-py-profilecopy/cache2

如果通过firefox-bin –ProfileManager运行firefox并选择配置文件,它将显示在about:cache页面正确路径中
/Users/p2mbot/projects/test/firefox_profile

为什么WebDriver忽略了Firefox的配置文件路径?使用铬不会有这样的问题。


阅读 571

收藏
2020-06-26

共1个答案

一尘不染

我花了大约2个小时(是的,我太慢了)猜测为什么不起作用。我发现了为什么个人资料不保存回去。

当然,传递给FirefoxProfile("myprofile/full/path")它的配置文件是在运行时使用的,但是它并没有保存回去,因为(也许不是很明显)硒用于测试,并且测试应该在没有缓存,没有任何配置文件,尽可能干净的情况下运行。

配置文件功能(可能)是为了允许在运行测试之前安装某些扩展名和设置而创建的,而不是为了保存它们。

诀窍是打印出来print driver.firefox_profile.path。它与通常的确有所不同,其名称为 tmp / tmpOEs2RR /
webdriver-py-profilecopy,而
不仅仅是 tmp / tmpOEs2RR / ,因此请阅读您应该猜测的配置文件。

现在,剩下的唯一事情就是找回它:)

运行此脚本,安装内容,编辑内容,然后再次运行;):

#!/usr/bin/env python
#! -*- coding: utf-8 -*-

import selenium
from selenium import webdriver

import os, sys, time

# 1- set profile
profile = os.path.dirname(sys.argv[0]) + "/selenita"
fp = webdriver.FirefoxProfile(profile)
driver = webdriver.Firefox(firefox_profile=fp)

# 2- get tmp file location
profiletmp = driver.firefox_profile.path

# but... the current profile is a copy of the original profile :/
print "running profile " + profiletmp

driver.get("http://httpbin.org")
time.sleep(2)
raw_input("Press a key when finish doing things") # I've installed an extension

# 3- then save back
print "saving profile " + profiletmp + " to " + profile
if os.system("cp -R " + profiletmp + "/* " + profile ):
    print "files should be copied :/"


driver.quit()
sys.exit(0)

您可以遵循该架构,也可以根据需要简单地编辑FirefoxProfilea。

2020-06-26