如何从Chrome网上商店下载给定ID的CRX文件?

107
我想从webstore下载一个扩展的.crx文件,我使用Fiddler分析了从webstore安装扩展时的网络请求并得到了下载链接。
例如,对于扩展:https://chrome.google.com/webstore/detail/bjclhonkhgkidmlkghlkiffhoikhaajg
下载链接是:

https://clients2.googleusercontent.com/crx/download/OgAAADQ_Loe5gfVPF2OUaB35tvex-NKlmA8V4K5YlWuvLCknMH7egLLmnMoFuCZePl_idE1GMf8jZC2KbjQqyyLDoDAAxlKa5eDp-z9frOppHWtQsRU3-iGrrrrA/extension_1_7_11.crx
现在,我想知道是否有一种通用方法来获取扩展的.crx文件,问题是Google是如何加密

bjclhonkhgkidmlkghlkiffhoikhaajg

转换成

OgAAADQ_Loe5gfVPF2OUaB35tvex-NKlmA8V4K5YlWuvLCknMH7egLLmnMoFuCZePl_idE1GMf8jZC2KbjQqyyLDoDAAxlKa5eDp-z9frOppHWtQsRU3-iGrrrrA的?

任何想法都将有所帮助。


2
据我们所知,它们可能只是存储在数据库中的两个随机数字,没有实际的映射关系。为什么你要这样做 - 你想要机械地从网站上刮下所有的扩展名吗? - Rup
1
您也可以使用“Give Me CRX”——一款谷歌浏览器扩展程序来获取Web Store上任何Chrome扩展的源.crx文件。附:我是这个扩展程序的创建者和发布者。扩展程序链接:Give Me CRX (a Chrome Extension) - iAnuj
13个回答

150
CRX文件本身可以直接从以下网址下载:
https://clients2.google.com/service/update2/crx?response=redirect&prodversion=[PRODVERSION]&acceptformat=crx2,crx3&x=id%3D[EXTENSIONID]%26uc

  • [PRODVERSION] 是 Chrome 的版本号,至少必须是 31.0.1609.0,而
  • [EXTENSIONID] 是扩展的 ID。

(2018年更新) acceptformat=crx2,crx3 指示服务器也用CRX3格式回应扩展(当扩展不可用作CRX2时返回204无内容)。

如果您使用的扩展包含特定于操作系统的模块(例如NaCl),则必须添加其他参数(osarchnacl_arch)。

要生成完整CRX下载URL的完整逻辑,请参见https://github.com/Rob--W/crxviewer/blob/master/src/cws_pattern.js中的get_crx_url函数。

这是Chrome Web Store中的Chrome Extension Source Viewer扩展的一部分:https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin


请注意,在Chrome浏览器中打开上述URL将不会触发下载,因为Chrome会自动拦截响应内容类型设置为application/x-chrome-extension的请求。如果你想在Chrome扩展程序中编程下载crx文件,请将MIME类型更改为application/octet-stream(例如如src/lib/crx-to-zip.js中所做的那样)。

1
注意:某些扩展包含需要额外查询字符串参数的NaCl模块。请参阅我的crxviewer扩展的源代码以获取URL的组成方式:https://github.com/Rob--W/crxviewer/commit/49a84243c9dadfd0401955a4c839bcc13ad53ce9 - Rob W
Chrome在尝试打开此URL时出现了问题,如果您使用的是Windows,则可以在IE中打开它以无问题地下载。 - craastad
@craastad 因为Chrome将该文件识别为扩展。安装Chrome扩展源代码查看器扩展可以轻松访问Chrome/Opera中的扩展源代码。 - Rob W
这可以用于在Microsoft Edge(Chromium)中安装主题,而无需信任第三方网站或扩展程序来获取CRX;只需将指定的URL直接输入地址栏,Edge就会完成其余操作。 - Ashley
显示剩余2条评论

30

为了实现我的一个扩展功能,我需要通过扩展ID自动下载其他CRX文件。我解决了这个问题,通过打开以下URL:

http://clients2.google.com/service/update2/crx?response=redirect&x=id%3D<EXTENSION_ID_HERE>%26uc%26lang%3Den-US&prod=chrome

这个页面将会把你重定向到这个地址:https://clients2.googleusercontent.com/crx/download/

我已经不记得我是怎么找到这个URL的了(可能是在页面源码中或者使用了网络嗅探),但自从去年12月以来一直很好用,看起来很可靠。


1
哦,你是“扩展程序库和网络商店检查器”的开发者吗?非常感谢! - wong2
17
看起来谷歌最近更改了某些东西,这种方法不再奏效(它会返回204)。有人知道发生了什么变化吗?chrome-extension-downloader.com的作者似乎已经修复了它,但没有更新文档。 - Matthew Gertner
5
不再起作用。我收到了204 No Content的响应。即使将 %3D 替换为 =,将 %26 替换为 & 仍然是如此。 - Dan Dascalescu
9
确认该URL已失效,我也得到了“204无内容”的响应。请看提到PRODVERSION的答案,那个是有效的。 - i336_
1
以下是我使用的适用于本机和非本机扩展的代码:https://clients2.google.com/service/update2/crx?response=redirect&os=linux&arch=x86-64&nacl_arch=x86-64&prod=chromiumcrx&prodchannel=unknown&prodversion=49.0.2623.108&x=id%3D{ID}%26uc,其中 {ID} 是扩展的 ID。 - damio
显示剩余4条评论

8
我写了一个小的Python脚本来自动化这个过程,@serg @Rob W。你也可以使用它。请参考以下链接:https://gist.github.com/arulrajnet/2424bc1ffc40324f3786
python ChromeAppDownloader.py -u https://chrome.google.com/webstore/detail/google-maps/lneaknkopdijkpnocmklfnjbeapigfbh

这是使用方法。


7
您可以使用以下URL模板:
https://clients2.google.com/service/update2/crx?response=redirect&prodversion=[PRODVERSION]&x=id%3D[EXTENSIONID]%26uc
PRODVERSION是Chrome浏览器的版本号,可以从设置->帮助->关于Google Chrome中获取。 例如:版本号69.0.3497.100(官方构建)(64位)。 EXTENSIONID是扩展程序的id。 例如:这里有一个样例插件,https://chrome.google.com/webstore/detail/jetbrains-ide-support/hmhgeddbohgjknpmjagkdomcpobmllji?hl=en,其id为hmhgeddbohgjknpmjagkdomcpobmllji
因此,下载的示例请求将为https://clients2.google.com/service/update2/crx?response=redirect&prodversion=69.0.3497.100&x=id%3Dhmhgeddbohgjknpmjagkdomcpobmllji%26uc

5

3
要从给定的ID下载Chrome扩展程序,您只需使用以下方式:
var currentEXTId = 'bjclhonkhgkidmlkghlkiffhoikhaajg';    
let downloadURL = https://clients2.google.com/service/update2/crx?response=redirect&x=id%3D" + currentEXTId + "%26uc&prodversion=32;

上面是Chrome扩展程序的下载链接。此外,还有一个Chrome扩展程序可以帮助您将Chrome扩展程序下载为zip或crx文件。https://chrome.google.com/webstore/detail/crx-extractordownloader/ajkhmmldknmfjnmeedkbkkojgobmljda 此外,如何完成此操作的代码在GitHub repo中可用。

1
请不要仅仅将某个工具或库作为答案发布。至少在答案中演示它是如何解决问题的。 - Zoe stands with Ukraine

3
这是一种比使用Fiddler更低技术的方法,我知道这已经有三年历史了,但我总是会看看是否有其他人解决了这个问题。所以我发现有人已经解决了这个问题,并且我成功地多次使用了他们的解决方案。他们的解决方案是一个可以下载其他扩展程序的扩展程序,名为Give Me CRX: https://chrome.google.com/webstore/detail/give-me-crx/acpimoebmfjpfnbhjgdgiacjfebmmmci

2
此外,我建议尝试这个网站http://crxextractor.com。在这里,您可以通过Chrome Webstore的URL下载扩展,并在浏览器中提取其源代码,无需额外的软件,只需点击一两下即可完成所有操作。

Chrome在没有给我保留文件的选项的情况下阻止了下载,除了丢弃按钮之外。如何解决这个问题? - echo

2

创建一个书签,将JavaScript函数添加为地址。 浏览到您想要下载的Chrome扩展程序,然后单击书签,它应该开始下载。

javascript:(function(){
    var pathname = location.pathname;pathArray = pathname.split("/");   
    location = ("http://clients2.google.com/service/update2/crx?response=redirect&x=id"+"%" + "3D" + pathArray[pathArray.length -1]+"%" + "26uc%" + "26lang%" + "3Den-US&prod=chrome"); })();

Thanks


1
@adardesign你尝试过吗?这根本不起作用,原因有两个:1.使用location.pathname而不是location.href。如果URL包含?lang=en,那么此代码段将失败。2.Chrome不会“开始下载”,而是要求您安装扩展程序。 - Rob W
你是对的,我只是试图用以下要点回答这个问题,但是我看到了这个答案,在那个书签中使用了相同的想法。不,我没有尝试过。请查看要点..https://gist.github.com/adardesign/c0dff591556b90fefcc5 - adardesign
location.href = 'http://clients2.google.com/service/update2/crx?response=redirect&prodversion=42&x=' + encodeURIComponent('uc&id=' + location.pathname.split('/').pop()); - Alf Eaton
1
这是我使用的代码:javascript:(function(){ location.href = 'https://clients2.google.com/service/update2/crx?response=redirect&prodversion=38.0&x=' + encodeURIComponent('id=' + location.pathname.split('/').pop() + '%26installsource%3Dondemand%26uc'); })(); - goat
我的版本:javascript:window.location.href=%22https://clients2.google.com/service/update2/crx?response=redirect&prodversion=95&acceptformat=crx2,crx3&x=id%253D%22+window.location.href.split(%27/%27).at(-1).split(%27?%27)[0]+%22%2526uc%22 使用自动转义 - Luke Miles

2
我写了一个简单的Python脚本,用于从Chrome Web Store下载扩展程序的CRX文件:
它没有外部依赖项,并且可与Python 2或3一起使用。
感谢Rob W提供原始解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接