He estado tratando de descargar todos los servidores de EE. UU. y CANADÁ aquí en el sitio web de Nord VPN: https://nordvpn.com/ovpn/
Traté de descargarlo manualmente, pero lleva mucho tiempo desplazarse hacia abajo cada vez e identificar cada servidor relacionado de EE. UU., así que solo escribí un Javascript simple que se puede ejecutar en Chrome Inspect Element Console:
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));También escribí un script de python simple que automáticamente hace clic en "guardar" el archivo:
while True: try: app2 = pywinauto.Application().connect(title=u'Save As', found_index=0) app2.SaveAs.Save.click() except: passObtiene todos los elementos, funciona allí, sin embargo, cuando dejo que javascript haga clic en cada elemento, tal vez debido a que hay demasiados elementos, devuelve un error:
VM15575:8 Limitación de la navegación para evitar que el navegador se cuelgue. Consulte https://crbug.com/1038223 . El interruptor de línea de comando --disable-ipc-flooding-protection se puede usar para omitir la protección
¿Hay alguna otra mejor alternativa para mi problema? ¿O tal vez cómo corregir el mensaje de error anterior? Intenté ejecutar este comando en mi símbolo del sistema: switch --disable-ipc-flooding-protection
pero también devuelve un error: 'cambiar' no se reconoce como un comando interno o externo, un programa operable o un archivo por lotes.
Solo sé Javascript básico y Python. Gracias
Entonces, de inmediato, su programa simplemente está descargando archivos demasiado rápido.
Agregar un pequeño retraso entre cada descarga de archivo permite que su JavaScript se ejecute.
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.");Esta es más una solución temporal, pero parece que este script solo necesita ejecutarse una vez, por lo que funcionará por ahora.
(su código Python funciona bien. No hay nada que hacer allí)
Espero que esto haya ayudado.