文档章节

ChromeDriver的npm之路

Mr_Qi
 Mr_Qi
发布于 2018/02/11 12:55
字数 646
阅读 490
收藏 6

背景

系统目前前端项目有点小爆发的感觉啊~

老项目中逐渐越来越多的使用心得技术 这不一个项目使用了chromeDriver

maven集成gulp压缩js,css方案 系统中使用了frontend-maven-plugin插件十分好用~

问题

某天小伙伴使用了chromeDriver出现了问题

[INFO] --- frontend-maven-plugin:1.3:npm (npm install) @ appclient ---
[INFO] Running 'npm install --registry=https://registry.npm.taobao.org' in /data/jenkins/workspace/f6-local-test-mobile2.0/appclient
[INFO]
[INFO] > chromedriver@2.35.0 install /data/jenkins/workspace/f6-local-test-mobile2.0/appclient/node_modules/chromedriver
[INFO] > node install.js
[INFO]
[INFO] Downloading https://chromedriver.storage.googleapis.com/2.35/chromedriver_linux64.zip
[INFO] Saving to /data/jenkins/workspace/f6-local-test-mobile2.0/appclient/node_modules/chromedriver/chromedriver/chromedriver_linux64.zip
[ERROR] ChromeDriver installation failed Error with http(s) request: Error: read ECONNRESET

报错的十分诡异 为啥还是走的chromedriver.storage.googleapis.com/???

检索

果然不止一个小伙伴碰到了

npm 安装 chromedriver 时,偶尔会出错,错误提示类似于:

> chromedriver@2.27.2 install /Users/Mario/Work/Lab/waylens-all-in-one-site/node_modules/chromedriver
> node install.js

Downloading https://chromedriver.storage.googleapis.com/2.27/chromedriver_mac64.zip
Saving to /var/folders/7l/mhhqzhps0y59by7pf04nyx5r0000gn/T/chromedriver/chromedriver_mac64.zip
events.js:161
      throw er; // Unhandled 'error' event
      ^
 Error: connect ETIMEDOUT 74.125.23.128:443
    at Object.exports._errnoException (util.js:1023:11)
    at exports._exceptionWithHostPort (util.js:1046:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1090:14)

经分析发现,某些版本下,chromedriver 的 zip 文件 url 的响应是 302 跳转,而在 install.js 里使用的是 Node.js 内置的 http 对象的 get 方法无法处理 302 跳转的情况;而在另外一些情况下,则是因为 googleapis.com 被墙了,此时即使采用科学上网的方法也仍然无法获取文件。

无论是上述哪种情况,可以使用下面的命令安装:

npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver

使用 cnpm 安装亦可。

可是我们用的插件不支持cnpm啊

final class DefaultNpmRunner extends NodeTaskExecutor implements NpmRunner {
 
    static final String TASK_NAME = "npm";
 
 
 
 
    public DefaultNpmRunner(NodeExecutorConfig config, ProxyConfig proxyConfig, String npmRegistryURL) {
 
        super(config, TASK_NAME, config.getNpmPath().getAbsolutePath(), buildArguments(proxyConfig, npmRegistryURL));
 
    }
 
 
 
 
    private static List<String> buildArguments(ProxyConfig proxyConfig, String npmRegistryURL) {
 
        List<String> arguments = new ArrayList<String>();
 
                
 
        if(npmRegistryURL != null && !npmRegistryURL.isEmpty()){
 
            arguments.add ("--registry=" + npmRegistryURL);
 
        }
 
 
 
 
        if(!proxyConfig.isEmpty()){
 
            Proxy proxy = null;
 
            if(npmRegistryURL != null && !npmRegistryURL.isEmpty()){
 
                proxy = proxyConfig.getProxyForUrl(npmRegistryURL);
 
            }
 
 
 
 
            if(proxy == null){
 
                proxy = proxyConfig.getSecureProxy();
 
            }
 
 
 
 
            if(proxy == null){
 
                proxy = proxyConfig.getInsecureProxy();
 
            }
 
 
 
 
            arguments.add("--https-proxy=" + proxy.getUri().toString());
 
            arguments.add("--proxy=" + proxy.getUri().toString());
 
        }
 
         
 
        return arguments;
 
    }
 
}

也不支持传递proxy和registy之外的参数!!!莫非这就到死路了么?

方案

  1. 使用alias 安装完cnpm然后alias为npm应该可行
  2. 在npmrc环境中添加对应cdn_url 

解决

为了最小化影响其他应用 开率采用方案2

如下~/.npmrc

chromedriver_cdnurl=https://npm.taobao.org/mirrors/chromedriver
[INFO] --- frontend-maven-plugin:1.3:npm (npm install) @ appclient --- [INFO] Running 'npm install --registry=https://registry.npm.taobao.org' in /data/jenkins/workspace/f6-local-test-mobile2.0/appclient
[INFO]
[INFO] > chromedriver@2.35.0 install /data/jenkins/workspace/f6-local-test-mobile2.0/appclient/node_modules/chromedriver
[INFO] > node install.js
[INFO]
[INFO] Downloading https://npm.taobao.org/mirrors/chromedriver/2.35/chromedriver_linux64.zip
[INFO] Saving to /data/jenkins/workspace/f6-local-test-mobile2.0/appclient/node_modules/chromedriver/chromedriver/chromedriver_linux64.zip
[INFO] Received 782K...
[INFO] Received 1564K...
[INFO] Received 2346K...
[INFO] Received 3128K...
[INFO] Received 3634K total.
[INFO] Extracting zip contents

 

© 著作权归作者所有

共有 人打赏支持
Mr_Qi

Mr_Qi

粉丝 280
博文 359
码字总数 369228
作品 0
南京
程序员
私信 提问
加载中

评论(1)

cyper
cyper
worked, thank you
npm 淘宝镜像设置

npm set registry https://registry.npm.taobao.org # 注册模块镜像npm set disturl https://npm.taobao.org/dist # node-gyp 编译依赖的 node 源码镜像 以下选择添加 npm set chromedriver......

quanpower
2016/12/28
27
0
npm install:ChromeDriver installation failed Error with http(s) request: Error: read ETIMEDOUT

项目使用vue开发,通过npm install安装全局依赖的时候,出错了,卡在了chromedriver的地方,解决: npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chrome...

littlemesieV
2018/12/30
0
0
chromedriver_win32下载失败

vue-cli ,webpack构建项目报错信息: > chromedriver@2.34.1 install G:NodeTestsimu800-wechat-adminnode_moduleschro medriver > node install.js Downloading https://chromedriver.sto......

李道福
2018/01/14
0
0
Vue npm Install安装报错 no such file or directory Failed at the chromedriver@2.45.0 install script.

Vue.js学习第一天 记录一下使用npm install时遇到的坑 先上一波截图 no such file or directory什么什么玩意的 大概意思就是说node_modules中缺少了一个依赖 然后我们去重新加载这个依赖就好...

码畜男孩
2018/12/29
0
0
Vue.js安装教程

博文出处:Vue.js安装教程,欢迎大家关注我的博客,谢谢! 安装步骤 安装 node.js (网址:https://nodejs.org/en/)。 基于 node.js ,利用淘宝 npm 镜像安装相关依赖。在 cmd 里直接输入:,回...

俞其荣
2017/12/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在 Linux 系统查询机器最近重启时间

在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到远的顺序列出该会话的特定用户、终端和主机名...

来来来来来
37分钟前
0
0
Redis协议是什么样的

前言 我们用过很多redis的客户端,有没有相过自己撸一个redis客户端? 其实很简单,基于socket,监听6379端口,解析数据就可以了。 redis协议 解析数据的过程主要依赖于redis的协议了。 我们...

春哥大魔王的博客
54分钟前
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxCool
今天
1
0
携程Apollo统一配置中心的搭建和使用(java)

一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到...

morpheusWB
今天
1
0
远程获得的有趣的linux命令

使用这些工具从远程了解天气、阅读资料等。 我们即将结束为期 24 天的 Linux 命令行玩具日历。希望你有一直在看,如果没有,请回到开始,从头看过来。你会发现 Linux 终端有很多游戏、消遣和...

Linux就该这么学
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部