文档章节

ChromeDriver的npm之路

Mr_Qi
 Mr_Qi
发布于 02/11 12:55
字数 646
阅读 301
收藏 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
粉丝 264
博文 326
码字总数 341201
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

数据新增--》id和name到对象----》dom渲染

<html> <head> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css"> <link rel="stylesheet" href="http://www.reoonet.com/plu......

柴高八斗之父
4分钟前
0
0
使用Nexus Repository 3的十二个理由

使用Nexus Repository 3的十二个理由 2017年03月14日 20:20:43 阅读数:13383 随着Nexus Repository Manager OSS 3的发布(目前更新至3.2.1),虽然目前还是Nexus 2和Nexus 3并行的状态,但是...

linjin200
5分钟前
0
0
【转】分布式锁实现(二):Zookeeper

设计实现 一、基本算法 1.在某父节点下创建临时有序节点2.判断创建的节点是否是当前父节点下所有子节点中序号最小的3.是序号最小的成功获取锁,否则监听比自己小的那个节点,进行watch,...

talen
16分钟前
0
0
dkhadoop大数据智能分析平台监控参数说明

2018年国内大数据公司50强榜单排名已经公布了出来,大快以黑马之姿闯入50强,并摘得多项桂冠。Hanlp自然语言处理技术也荣膺了“2018中国数据星技术”奖。对这份榜单感兴趣的可以找一下看看。...

左手的倒影
22分钟前
0
0
Java 读写锁实现原理

最近做的一个小项目中有这样的需求:整个项目有一份config.json保存着项目的一些配置,是存储在本地文件的一个资源,并且应用中存在读写(读>>写)更新问题。既然读写并发操作,那么就涉及到...

编辑部的故事
24分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部