如何点击Javascript中的大量元素而不会出错?

How to click a lot of elements in Javascript without errors?

我一直在尝试在 Nord VPN 网站上下载所有美国和加拿大服务器:https://nordvpn.com/ovpn/

我尝试手动下载它,但每次都向下滚动并识别每个与美国相关的服务器非常耗时,所以我只写了简单的 Javascript 可以 运行 on [=34] =] 检查元素控制台:

var servers = document.getElementsByClassName("mr-2");
var inc_servers = [];
for (var i = 0; i < servers.length; i++) {
  var main_server = servers[i];
  var server = servers[i].innerText;
  if(server.includes("ca")){
        var parent_server = main_server.parentElement.parentElement;
        parent_server.querySelector(".Button.Button--primary.Button--small").click();
        inc_servers.push(server);
  }
}
console.log(JSON.stringify(inc_servers));

我还编写了简单的 python 自动点击“保存”文件的脚本:

while True:
    try:
        app2 = pywinauto.Application().connect(title=u'Save As', found_index=0)
        app2.SaveAs.Save.click()
    except:
        pass

它获取所有元素,它在那里工作,但是,当我让 javascript 单击每个元素时,可能因为元素太多,它 returns 一个错误:

VM15575:8 限制导航以防止浏览器挂起。参见 https://crbug.com/1038223。命令行开关 --disable-ipc-flooding-protection 可以用来绕过保护

对于我的问题,还有其他最佳替代方案吗?或者如何修复上面的错误消息?我在我的命令提示符中尝试了 运行ning 这个命令:switch --disable-ipc-flooding-protection

但它returns也是一个错误:'switch'不被识别为内部或外部命令, 可运行的程序或批处理文件。

我只会基本的Javascript和Python。谢谢

马上,您的程序只是下载文件太快了。

在每个文件下载之间添加一个小的延迟允许您 JavaScript 到 运行。

var servers = document.getElementsByClassName("mr-2");
var inc_servers = [];
for (var i = 0; i < servers.length; i++) {
  var main_server = servers[i];
  var server = servers[i].innerText;
  if(server.includes("ca")){
        var parent_server = main_server.parentElement.parentElement;
        // Add 1 second delay between each download (fast enough on my computer.. Might be too fast for yours.)
        await new Promise(resolve => setTimeout(resolve, 1000));
        parent_server.querySelector(".Button.Button--primary.Button--small").click();


  }
}
// Remove the logging. Just tell the user that it's worked
console.log("Done downloading all files.");

这更像是一个临时解决方案,但这个脚本似乎只需要 运行 一次,所以暂时可以使用。

(您的 python 代码 运行 没问题。无事可做)

希望对您有所帮助。