使用Selenium调用Firefox指定配置文件后,driver.get()无法自动跳转页面的问题
我来帮你搞定这个头疼的问题!你遇到的情况我之前也碰过几次,指定配置文件后driver.get()就“罢工”,大概率是配置文件本身的设置或者版本兼容的小问题,咱们一步步排查解决:
先确认配置文件路径绝对正确
别小看路径的问题,很多时候就是这里栽了坑。你可以打开Firefox,在地址栏输入about:profiles,找到你保存了登录状态的那个配置文件,复制它的实际根目录路径——注意是那个带随机字符的子文件夹,不是外面的父目录。比如你写的/home/XXXX/.mozilla/firefox/XXXX.selenium1,一定要确认这个文件夹确实存在,而且就是你平时登录网站用的那个配置文件夹。关闭所有正在运行的Firefox进程
如果你的目标配置文件正被一个手动打开的Firefox窗口占用,Selenium启动的实例会加载异常,很多操作都会失效。所以先把所有Firefox窗口关掉,再运行脚本试试,说不定就正常了。给FirefoxOptions加上
-no-remote参数
有时候Firefox的远程连接机制会和Selenium的操作冲突,你可以试试在选项里加这个参数,修改后的代码如下:from selenium import webdriver profile_path = "/home/XXXX/.mozilla/firefox/XXXX.selenium1" options = webdriver.FirefoxOptions() options.add_argument(f"--profile={profile_path}") options.add_argument("-no-remote") # 新增这个参数 driver = webdriver.Firefox(options=options) driver.get(url)验证配置文件是否真的加载成功
你可以在脚本里加一行代码,确认Selenium是不是真的用了指定的配置文件:print(driver.capabilities['moz:profile'])运行后看输出的路径和你指定的
profile_path是否一致,如果不一样,说明路径配置肯定有问题,得重新核对。检查版本兼容性
Selenium、geckodriver(Firefox的驱动程序)和Firefox浏览器的版本必须对应上!如果其中一个版本太旧或太新,就容易出各种奇怪的bug。建议你把这三者都更新到最新的稳定版,很多这类小问题都会随着版本更新自动解决。
如果以上方法都试过还是不行,你可以把原配置文件复制一份到新的文件夹,用新文件夹的路径来指定配置文件,有时候原配置里的缓存或临时文件会搞出莫名其妙的问题,复制一份干净的就能解决。
备注:内容来源于stack exchange,提问作者Sam

