因工作需要,需要定期从某页面下载多个文档,是体力活。
想用chrome扩展,找了几个不行。原因是:
1、有的扩展识别不了链接,因为链接是形如:jsp?XXX=XXX的形式
2、有的扩展能批量打开链接,但打开的太快了或其他原因,触发了验证码。
想用chromedp模拟操作,感觉大材小用,也懒得费事。
决定还是用比较简单的chrome console
参考以下代码(https://bbs.csdn.net/topics/392177700?list=31152598)
(function () { var arr = ["https://www.baidu.com/","http://url2","http://url3"]; var nw = window.open(); var i = 0; function op() { console.log(arr[i]); nw.location = arr[i]; i++; if (i<arr.length) setTimeout(op, 5000); } op(); })();
我写的代码如下:其中用了正则/owner=/.test(aa[i].href)匹配链接:
(function () { var aa=$("a"); var arr=[]; for(var i=0;i<aa.length;i++){ if(/owner=/.test(aa[i].href)){ arr.push(aa[i].href); } } var nw = window.open(); var i = 0; function op() { console.log(arr[i]); nw.location = arr[i]; i++; if (i<arr.length) setTimeout(op, 5000); } op(); })();
因为我在页面上用代码访问链接时,会直接下载word。所以在启动脚本的时候,chrome会提示:想要下载多个文件? 允许就可以了。
实际使用中没有触发验证码,终于不用一个个点击鼠标右键另存为了。
后来发现这里有一个疑惑之处:我用的是$("a"),而不是$$("a"),竟然也能成功!
更好的选择办法:可以不用正则表达式,用“子串匹配属性选择器”好像更方便些,如:$("a[href*=要匹配的部分URL内容]")
补充:之前用以下代码,chrome只能打开一个新窗口
var nw =window.open("https://www.sohu.com","one"); var nw1 =window.open("https://www.cnblogs.com","two");
后来发现,浏览器为了安全考虑是不会让浏览器一次打开多个窗口的,不过如果用户需要是可以在浏览器里面进行设置的,chrome中chrome://settings/content/popups,设置为允许即可。(参考:https://blog.csdn.net/Tayshin/article/details/73614854)