[英]How to click a lot of elements in Javascript without errors?
我一直在嘗試在 Nord VPN 網站上下載所有美國和加拿大服務器: https ://nordvpn.com/ovpn/
我嘗試手動下載它,但每次向下滾動並識別每個美國相關服務器都很耗時,所以我只編寫了可以在 Chrome Inspect Element Console 上運行的簡單 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;
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 單擊每個元素時,可能是因為元素太多,它返回一個錯誤:
VM15575:8 限制導航以防止瀏覽器掛起。 請參閱https://crbug.com/1038223 。 命令行開關 --disable-ipc-flooding-protection 可用於繞過保護
對於我的問題,還有其他最佳選擇嗎? 或者也許如何修復上面的錯誤消息? 我嘗試在命令提示符下運行此命令: switch --disable-ipc-flooding-protection
但它也返回一個錯誤:'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 代碼運行良好。無事可做)
希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.