替代方案

使用python + selenium 启动firefox时,偶然发现通过FirefoxProfile的set_preference方法来更改firefox的配置没有生效,后续追了下源码发现通过set_preference方法修改的配置值若是webdriver_prefs.json中的配置值,那么在后续webdriver启动的时候又会被其他方法通过再次读取默认配置的方式替换掉,导致配置不生效。

若想配置生效可以使用如下方式进行:

firefox_profile = FirefoxProfile()
FirefoxProfile.DEFAULT_PREFERENCES['frozen'].update({'browser.link.open_newwindow':3})


在初始化对象后,直接修改类的公共属性DEFAULT_PREFERENCES,这样在后续webdriver加载配置文件属性时会直接读取DEFAULT_PREFERENCES中的值,从而达到修改配置的目的。当然如果不想这样做,也可以直接去修改webdriver_prefs.json中的对应值。

具体DEFAULT_PREFERENCES中能修改的值可以参考每次启动后在temp目录下生成的prefs.js文件或selenium库下web driver/firefox/webdriver_prefs.json



配置不生效原因

接下来从源码方面看 为什么配置会不生效。

首先来看调用方面

调用方式就如图所示,创建FirefoxProfile然后在创建driver的时候将profile对象传入。

然后让我们来看看在这期间set_preference()方法和webdriver.Firefox()方法都做了什么,导致配置被覆盖。


可以看到在profile初始化的时候实际上就是去读的FirefoxProfile这个文件同目录下的webdriver_prefs.json文件,读取后将值给到类的公共属性DEFAULT_PREFERENCES中,然后再深拷贝一部分值到self.default_preferences属性上,而profile对象的set_preference()方法就是去修改的self.default_preferences的属性,所以暂时来看set_preference()方法是没有什么问题的,那么问题出在哪里呢?

我们在set_preference()下面会看到另一个方法 update_preferences()

发现这个方法会读取公共属性DEFAULT_PREFERENCES中的frozen列表中的所有键值对然后再把值全部给到self.default_preferences。显然如果在调用了set_preference()方法将frozen列表中的值改了后再调用了update_preferences()方法那么之前的修改就被覆盖无法生效了。那么是不是这么一回事呢?

接下来我们逐步的检查初始化方法webdriver.firefox()

firefox init方法


一路调用就破案了

selenium firefox FirefoxProfile不生效相关推荐

  1. "Selenium + Firefox"如何使用带用户名密码认证的HTTP代理

    本文原创作者:鲲之鹏(http://www.site-digger.com) 本文原始链接:http://www.site-digger.com/html/articles/20180822/662. ...

  2. Selenium firefox浏览器修改为标签页打开方式的各种坑

    需求: 今天有位朋友遇到一个梗,selenium使用firefox打开多个网页时,firefox总是以新窗口的方式打开:而这位朋友的需求是以标签页的方式打开新页面. 1.新窗口方式: 2.新标签页方式 ...

  3. Python+Selenium+Firefox headless 配置

    最近爬虫要用到Python爬一个比较复杂的网站,PhantomJs好像停止维护了,所以选择了Selenium+Firefox headless,查了一些Firefox相关的配置,记录一下 查看支持的配 ...

  4. Selenium Firefox 官方Webdriver -- Geckodriver 下载地址

    Selenium Firefox 官方Webdriver -- Geckodriver 下载地址 https://github.com/mozilla/geckodriver/releases 转载于 ...

  5. selenium火狐驱动_在Selenium Firefox驱动程序上运行测试

    selenium火狐驱动 带有Selenium 3.0的Gecko Marionette Firefox驱动程序 (Gecko Marionette Firefox Driver with Selen ...

  6. Selenium+Firefox/Chrome及驱动的安装和使用

    Selenium+Firefox/Chrome及驱动的安装和使用教程 Selenium+Firefox/Chrome安装及使用教程 安装环境: win10 x64 pyscripter 2018.3. ...

  7. linux firefox xvfb,持续集成:采用Xvfb+Selenium+Firefox搭建linux服务器下的自动化测试环境...

    自动化测试属于软件测试的一部分,QTP.LoadRunner等都可以编写自动化测试脚本,但是QTP.LoadRunner等工具毕竟还需要人工操作,在持续集成思想下,软件应该自动发布并且自动测试,这样可 ...

  8. selenium firefox 提取qq空间相册链接

    环境: selenium-java 3.9.1 firefox 57.0 geckodriver 0.19.1 1.大概的思路就是模拟用户点击行为,关于滚动条的问题,我是模拟下拉箭头,否则只能每个相册 ...

  9. Python爬虫实战(5)-爬取淘宝网服装图片(Selenium+Firefox)

    前言 今天我们巩固一下前面学过的知识,通过Selenium+Firefox实现模拟浏览器并自动翻页,爬取图片并写入本地文件中. 以搜索"女装"为例,自动爬取"女装&quo ...

最新文章

  1. Scrapy-xpath用法以及实例
  2. 1.2操作系统的特征
  3. 机器人学习--定位算法AMCL全局定位方案
  4. vivado在远程服务器上完成本地设备的程序烧写和调试(vivado远程调试)
  5. 李天平×××作诞生记——《亮剑.NET:.NET深入体验与实战精要》
  6. 数据结构-链表的删除和添加
  7. 【报告分享】2022微信视频号生态发展研究报告.pdf(附下载链接)
  8. UML图中时序图和协作图转化
  9. Add NIC to Openfiler 2.3
  10. 简述几种常用编码器协议
  11. VS 2015专业版密钥
  12. 算法——排序——堆排序图解动画
  13. 2020年全国大学生数学建模B题题目概要
  14. Java常见工具安装及环境配置
  15. 202203Self-Supervised Pretraining and Controlled Augmentation Improve RareWildlife Recognition inUAV
  16. winsxs文件夹可以删除吗?具体清理操作如下
  17. exxi6.7如何传文件到win7_iPhone 如何用跨平台 AirDrop+给安卓和 PC 秒传文件?
  18. 接口报错500是什么意思_500错误原因解决办法?错误页面怎么解决?到底是什么问题?...
  19. Kafka消费者消费方式
  20. 谷歌浏览器如何配置SSL证书

热门文章

  1. 河南职称计算机考试准考证
  2. 鸿蒙不能玩安卓游戏,鸿蒙玩安卓游戏误认PC模拟器 有人担忧有人却笑了
  3. 土豆网的后舍男孩挺搞笑的
  4. 程序员的算法趣题Q45: 排序交换次数的最少化
  5. BCB 给图片的16进制中叠加字符,图片字符叠加器,图片字符叠加软件
  6. m3u8 ts 视频流下载插件(神器)
  7. 服务器远程连接控制以及在Linux环境下安装go编译环境
  8. Java简单类与对象,封装,多态,继承,接口,设计模式,某游戏系统的需求如下,请按照面向对象思想进行设计并实现。
  9. 判断邮箱 格式是否正确
  10. 均值u的置信区间matlab,正态总体参数区间估计的MATLAB实现 - 范文中心