Puppeteer 系列踩坑日志—3—开启支持插件

2021-04-15 10:10:00

参考地址 Puppeteer 系列踩坑日志—3—开启支持插件

在使用puppeteer自动化的过程中,会发现其实开启的chrome往往自动禁用了插件功能,如果我们想在自动化测试的过程中,再去使用一些常用的插件提升效率(偷懒)的话,就行不通了,其实解决办法还是有的,我们今天就来讲解这个问题。
疑问1:为什么puppeteer刚启动的时候,插件功能是被disable掉的?
  • 这个问题官方那边我并没有找到,但是我个人的猜测是:性能。为了提升puppeteer打开更快这方面的考虑。

疑问2:怎么被禁用的?
  • 首先,我们需要回到 [Puppeteer 系列踩坑日志—2—去掉自动化提示]() 这篇文章里面去看看,开篇提到过chrome命令行,可以回看一下。然后我们会发现在 lanucher.js 里面,启动的默认参数中有一个叫做: --disable-extensions 这个参数其实都不用去看说明了,名字很清楚。但是我们必须要挖掘一下,看看peter清单里有没有什么解释。

  • perter列表里的清单解释非常地简单,就是这意思。但是我们在下面,又发现了一个其他的参数 --disable-extensions-except 看下解释: 禁用除逗号分隔列表中指定的扩展之外的扩展。如果不希望打开,但是又要加载插件,可以使用这个,也算是看文档的意外收获。

疑问3:如何指定插件?
  • 刚才我们已经解决了插件功能被关闭的问题,那么接下来实现加载插件。

  • 先说一个题外话,怎么把现在chrome里安装好的,商店的插件,拿出来:

    • 地址栏: chrome://version/

    • 然后看到:个人资料路径。电脑里打开这个路径找到 Extensions 这个文件夹,里面就全部都是谷歌插件的安装包,具体名称需要根据插件 ID 去核对。

image-20200318143751635.png

  • 那么接下来,我们先拿到自己的插件路径(绝对路径,或者node解析出来的路径),开始加载,话不多说,上代码:

 const browser = await puppeteer.launch({
   ...    args : [`--disable-extensions-except=${插件路径1},${插件路径2},${插件路径3}...`]
  });

这样就轻松解决了问题。

  • 其他坑:可能你会遇到插件加载有问题,这是可能插件文件夹里面存在着一些乱七八糟的文件。这个可以参考谷歌插件开发文档,里面的东西尽可能保持干净即可。windows下可能还会出现隐藏文件,如果实在删不掉可以尝试新建文件夹复制出来一份。

  • 如有遇到其他问题,评论下方可以联系我,共同学习排坑。


  • 2019-12-05 17:01:36

    Vue 结合 Axios 接口超时统一处理

    当网路慢的时候。又或者公司服务器不在内地的时候,接口数据请求不回来超时报错的情况相信大家肯定遇到过的,这里我把我公司项目请求超时的处理方法分享下,希望看过后有帮助。

  • 2019-12-05 17:13:40

    JS模板工具lodash.template的简单用法

    lodash是从underscore分支的一个项目,之前我写了一篇JS模板工具underscore.template的简单用法,lodash跟underscore很相似,这也简单介绍一下lodash的template方法。 先把underscore的文章中用过的代码贴过来,把underscore的js文件换成lodash的js,其他一字不改,然后我们试试:

  • 2019-12-06 10:47:29

    date-fns日期工具的使用方法详解

    isToday() 判断传入日期是否为今天 isYesterday() 判断传入日期是否为昨天 isTomorrow() 判断传入日期是否为 format() 日期格式化 addDays() 获得当前日期之后的日期 addHours() 获得当前时间n小时之后的时间点 addMinutes() 获得当前时间n分钟之后的时间 addMonths() 获得当前月之后n个月的月份 subDays() 获得当前时间之前n天的时间 subHours() 获得当前时间之前n小时的时间 subMinutes() 获得当前时间之前n分钟的时间 subMonths() 获得当前时间之前n个月的时间 differenceInYears() 获得两个时间相差的年份 differenceInWeeks() 获得两个时间相差的周数 differenceInDays() 获得两个时间相差的天数 differenceInHours() 获得两个时间相差的小时数 differenceInMinutes() 获得两个时间相差的分钟数

  • 2019-12-06 10:49:39

    npm 查看源 换源

    npm,cnpm,查看源,切换源,npm config set registry https://registry.npmjs.org

  • 2019-12-06 11:01:31

    npm发布包流程详解 有demo

    npm发布包步骤,以及踩过的坑(见红颜色标准): 1.注册npm账号,并完成Email认证(否则最后一步提交会报Email错误) 2.npm添加用户或登陆:npm adduser 或 npm login

  • 2019-12-06 13:16:18

    vue mixins组件复用的几种方式

    最近在做项目的时候,研究了mixins,此功能有妙处。用的时候有这样一个场景,页面的风格不同,但是执行的方法,和需要的数据非常的相似。我们是否要写两种组件呢?还是保留一个并且然后另个一并兼容另一个呢? 不管以上那种方式都不是很合理,因为组件写成2个,不仅麻烦而且维护麻烦;第二种虽然做了兼容但是页面逻辑造成混乱,必然不清晰;有没有好的方法,有那就是用vue的混合插件mixins。混合在Vue是为了提出相似的数据和功能,使代码易懂,简单、清晰。

  • 2019-12-06 13:26:30

    vue的mixins混入合并规则

    混入minxins:分发vue组件中可复用功能的灵活方式。混入对象可以包含任意组件选项。组件使用混入对象时,所有混入对象的选项将混入该组件本身的选项。

  • 2019-12-06 16:50:34

    Intellij idea 如何关闭无用的提示

    Linux:Settings —> Editor —> Inspections —> General —> Duplicated Code Mac:Preferences --> Editor —> Inspections —> General —> Duplicated Code fragment 将对应的勾去掉。