在折腾eve online转存国内加速的过程中,碰到个需求,即从动态网站获取最新的下载链接。
需求
目标网站:
https://www.eveonline.com/download
示例链接:
https://binaries.eveonline.com/EveLauncher-1669171.exe
需求是在Windows上编写bat脚本,能从https://www.eveonline.com/download
网站获取https://binaries.eveonline.com/EveLauncher-1669171.exe
下载链接。
最开始使用wget尝试下载网站所有文件,原以为链接是静态的。结果在wget下载的所有网站文件内都没搜到下载链接。
于是开始缩小索引范围。
搜索binaries.eveonline.com/EveLauncher
,在main.f7d7a958.chunk.js
文件中找到了线索:
launcherVersionDownloadUrl="https://binaries.eveonline.com/EveLauncher-"
因此确定了链接是动态生成的。
虽然可以用浏览器的CTRL+S来保存渲染完成的HTML文件,但这样就不好写脚本了。
phantomjs
最开始,通过谷歌搜索,我查到了一个工具:PhantomJS
PhantomJS作为“headless browser”,可以通过命令保存网页JS渲染完成后的浏览器界面到一个HTML文件中。
虽然PhantomJS已经停止更新了。但还可以用:
choco install phantomjs
来安装。
测试下效果:
首先创建save_page.js
文件来设置保存的方案。
var system = require('system');
var page = require('webpage').create();
page.open(system.args[1], function()
{
console.log(page.content);
phantom.exit();
});
接着在save_page.js
所在目录执行:
phantomjs save_page.js https://www.eveonline.com/download > eveonline.html
获得的html文件虽然不能用浏览器打开,但可以用编辑器(vim,nano一类)打开,生成的速度比较慢,要等段时间。
接下来就可以用正则啥的匹配下载链接了。
HTTP GET
虽然我上面那个方法能实现需求,简单粗暴,但实在是太浪费系统资源了。虽然好用
我在群里问了下后,UCW大佬帮我找到了网站提供版本的js文件。
https://launcher.eveonline.com/launcherVersions.json
使用HTTP GET请求后,得到
{
"win": 1669171,
"mac": 1669171,
"linux": 1548102
}
即实时最新的版本号。
在Windows下可以用powershell的Invoke-WebRequest
组件来发送GET请求。
则可以用powershell脚本来获取json格式的版本号了。
Invoke-WebRequest -Method Get "https://launcher.eveonline.com/launcherVersions.json" -OutFile "C:\eveonline\new_launcherVersions.txt"
再通过分离,匹配,管道传输参数,则可以生成最新下载文件的完整下载地址了。
成功高大上的完成了“Windows脚本从动态网站获取最新的下载链接”需求。
参考:
How to get WGET to download exact same web page html as browser
Invoke-WebRequest
版权属于:寒夜方舟
本文链接:https://www.wnark.com/archives/68.html
本站所有原创文章采用署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)。 您可以自由地转载和修改,但请注明引用文章来源和不可用于商业目的。声明:本博客完全禁止任何商业类网站转载,包括但不限于CSDN,51CTO,百度文库,360DOC,AcFun,哔哩哔哩等网站。