ChromeDriver的npm之路
博客专区 > Mr_Qi 的博客 > 博客详情
ChromeDriver的npm之路
Mr_Qi 发表于3个月前
ChromeDriver的npm之路
  • 发表于 3个月前
  • 阅读 196
  • 收藏 6
  • 点赞 0
  • 评论 1

移动开发云端新模式探索实践 >>>   

背景

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

老项目中逐渐越来越多的使用心得技术 这不一个项目使用了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

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 245
博文 292
码字总数 307897
评论 (1)
cyper
worked, thank you
×
Mr_Qi
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: