文档章节

ChromeDriver的npm之路

Mr_Qi
 Mr_Qi
发布于 02/11 12:55
字数 646
阅读 379
收藏 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

粉丝 276
博文 356
码字总数 365332
作品 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
chromedriver_win32下载失败

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

李道福
01/14
0
0
Vue.js安装教程

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

俞其荣
2017/12/21
0
0
使用cordova把h5应用打包成apk

由于h5应用开发不是本例重点,因此直接提供一个最简单的h5应用代码,此应用使用vue-cli框架开发 此h5应用叫vue1,用webstrom打开vue1,进行npm install安装引用 vue1代码可从百度网盘下载:链...

canneljls
04/21
0
0
WebDriver - 启动浏览器

我们已经创建了Selenium maven工程,下去开始真正进入到WebDriver的实战中。 既然WebDriver是用于Web的UI自动化测试,那么测试Web的第一步就是启动浏览器。那WebDriver都支持哪些浏览器呢? ...

米阳MeYoung
2017/10/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
10
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
3
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
20
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部