selenium firefox FirefoxProfile不生效
替代方案
使用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不生效相关推荐
- "Selenium + Firefox"如何使用带用户名密码认证的HTTP代理
本文原创作者:鲲之鹏(http://www.site-digger.com) 本文原始链接:http://www.site-digger.com/html/articles/20180822/662. ...
- Selenium firefox浏览器修改为标签页打开方式的各种坑
需求: 今天有位朋友遇到一个梗,selenium使用firefox打开多个网页时,firefox总是以新窗口的方式打开:而这位朋友的需求是以标签页的方式打开新页面. 1.新窗口方式: 2.新标签页方式 ...
- Python+Selenium+Firefox headless 配置
最近爬虫要用到Python爬一个比较复杂的网站,PhantomJs好像停止维护了,所以选择了Selenium+Firefox headless,查了一些Firefox相关的配置,记录一下 查看支持的配 ...
- Selenium Firefox 官方Webdriver -- Geckodriver 下载地址
Selenium Firefox 官方Webdriver -- Geckodriver 下载地址 https://github.com/mozilla/geckodriver/releases 转载于 ...
- selenium火狐驱动_在Selenium Firefox驱动程序上运行测试
selenium火狐驱动 带有Selenium 3.0的Gecko Marionette Firefox驱动程序 (Gecko Marionette Firefox Driver with Selen ...
- Selenium+Firefox/Chrome及驱动的安装和使用
Selenium+Firefox/Chrome及驱动的安装和使用教程 Selenium+Firefox/Chrome安装及使用教程 安装环境: win10 x64 pyscripter 2018.3. ...
- linux firefox xvfb,持续集成:采用Xvfb+Selenium+Firefox搭建linux服务器下的自动化测试环境...
自动化测试属于软件测试的一部分,QTP.LoadRunner等都可以编写自动化测试脚本,但是QTP.LoadRunner等工具毕竟还需要人工操作,在持续集成思想下,软件应该自动发布并且自动测试,这样可 ...
- selenium firefox 提取qq空间相册链接
环境: selenium-java 3.9.1 firefox 57.0 geckodriver 0.19.1 1.大概的思路就是模拟用户点击行为,关于滚动条的问题,我是模拟下拉箭头,否则只能每个相册 ...
- Python爬虫实战(5)-爬取淘宝网服装图片(Selenium+Firefox)
前言 今天我们巩固一下前面学过的知识,通过Selenium+Firefox实现模拟浏览器并自动翻页,爬取图片并写入本地文件中. 以搜索"女装"为例,自动爬取"女装&quo ...
最新文章
- Scrapy-xpath用法以及实例
- 1.2操作系统的特征
- 机器人学习--定位算法AMCL全局定位方案
- vivado在远程服务器上完成本地设备的程序烧写和调试(vivado远程调试)
- 李天平×××作诞生记——《亮剑.NET:.NET深入体验与实战精要》
- 数据结构-链表的删除和添加
- 【报告分享】2022微信视频号生态发展研究报告.pdf(附下载链接)
- UML图中时序图和协作图转化
- Add NIC to Openfiler 2.3
- 简述几种常用编码器协议
- VS 2015专业版密钥
- 算法——排序——堆排序图解动画
- 2020年全国大学生数学建模B题题目概要
- Java常见工具安装及环境配置
- 202203Self-Supervised Pretraining and Controlled Augmentation Improve RareWildlife Recognition inUAV
- winsxs文件夹可以删除吗?具体清理操作如下
- exxi6.7如何传文件到win7_iPhone 如何用跨平台 AirDrop+给安卓和 PC 秒传文件?
- 接口报错500是什么意思_500错误原因解决办法?错误页面怎么解决?到底是什么问题?...
- Kafka消费者消费方式
- 谷歌浏览器如何配置SSL证书
热门文章
- 河南职称计算机考试准考证
- 鸿蒙不能玩安卓游戏,鸿蒙玩安卓游戏误认PC模拟器 有人担忧有人却笑了
- 土豆网的后舍男孩挺搞笑的
- 程序员的算法趣题Q45: 排序交换次数的最少化
- BCB 给图片的16进制中叠加字符,图片字符叠加器,图片字符叠加软件
- m3u8 ts 视频流下载插件(神器)
- 服务器远程连接控制以及在Linux环境下安装go编译环境
- Java简单类与对象,封装,多态,继承,接口,设计模式,某游戏系统的需求如下,请按照面向对象思想进行设计并实现。
- 判断邮箱 格式是否正确
- 均值u的置信区间matlab,正态总体参数区间估计的MATLAB实现 - 范文中心