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

时间:2015-05-25 10:03:32

标签: python 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中的缓存页面时,它有不同的缓存路径:

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

如果通过firefox-bin --ProfileManager运行firefox并选择配置文件,它将显示在about:cache page correct path /Users/p2mbot/projects/test/firefox_profile

为什么webdriver会忽略firefox的配置文件路径?使用chrome没有这样的问题。

2 个答案:

答案 0 :(得分:5)

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

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

配置文件功能(可能)构建允许在运行测试之前安装某些扩展和设置,但不能用于保存它们。

诀窍是打印出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)

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

答案 1 :(得分:1)

由于@ m3nda,我找到了一个适用于Windows和python 3的类似且糟糕的解决方案。正如Jake Hilborn所知,它不再起作用了。问题是,driver.firefox_profile.path似乎是tmp配置文件的目录,但这是空白版本。这里没有任何更改将是安全的。如果您在Firefox about:support中打开,则会找到配置文件的真实路径。

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

#Start Browser
option = Options()
#set options as u like, for example:
option.log.level = "warn"
option.set_preference("browser.link.open_newwindow", 3)
option.set_preference("browser.link.open_newwindow.restriction", 0)
#load profile
cwd = os.getcwd()
pfadffprofile = cwd+"\\"+"ffprofile.selenium"
ffprofile = webdriver.firefox.firefox_profile.FirefoxProfile(profile_directory = pfadffprofile)
driver = webdriver.Firefox(firefox_profile= ffprofile, options=option)
print("Get FF Temp Profile Path")
driver.get("about:support")
box = driver.find_element_by_id("profile-dir-box")
ffTempProfilePath = box.text
print("ffTempProfilePath: ",ffTempProfilePath)

# now do ur stuff

#copy ur stuff after use or periodically
print("safe Profile")
cwd = os.getcwd()
pfadffprofile = cwd+"\\"+"ffprofile.selenium"
print ("saving profile " + ffTempProfilePath + " to " + pfadffprofile)
os.system("xcopy " + ffTempProfilePath + " " + pfadffprofile +" /Y /G /K /R /E /S /C /H")
print ("files should be copied :/") 

#close driver
driver.quit()