javascript - Automatice la descarga diaria de archivos csv desde el botón del sitio web.
automation phantomjs (1)
Me gustaría automatizar el proceso de visitar un sitio web, hacer clic en un botón y guardar el archivo. La única forma de descargar el archivo en este sitio es hacer clic en un botón. No puede navegar al archivo usando una url.
He intentado usar phantomjs y casperjs para automatizar este proceso, pero no he tenido éxito.
Hace poco intenté usar la solución de Brandon aquí. Capture los contenidos de los recursos en CasperJS o PhantomJS.
Aquí está mi código para eso
var fs = require(''fs'');
var cache = require(''./cache'');
var mimetype = require(''./mimetype'');
var casper = require(''casper'').create();
casper.start(''http://www.example.com/page_with_download_button'', function() {
});
casper.then(function() {
this.click(''#download_button'');
});
casper.on(''resource.received'', function (resource) {
"use strict";
for(i=0;i < resource.headers.length; i++){
if(resource.headers[i]["name"] == "Content-Type" && resource.headers[i]["value"] == "text/csv; charset-UTF-8;"){
cache.includeResource(resource);
}
}
});
casper.on(''load.finished'', function(status) {
for(i=0; i< cache.cachedResources.length; i++){
var file = cache.cachedResources[i].cacheFileNoPath;
var ext = mimetype.ext[cache.cachedResources[index].mimetype];
var finalFile = file.replace("."+cache.cacheExtension,"."+ext);
fs.write(''downloads/''+finalFile,cache.cachedResources[i].getContents(),''b'');
}
});
casper.run();
Creo que el problema podría deberse a que mi cachePath es incorrecta en cache.js
exports.cachePath = ''C:/Users/username/AppData/Local/Ofi Labs/PhantomJS'';
¿Debo usar algo además de las barras diagonales inversas para definir la ruta?
Cuando intento
casperjs --disk-cache=true export_script.js
No se descargó nada Después de una pequeña depuración, descubrí que cache.cachedResources está siempre vacío.
También estaría abierto a soluciones fuera de phantomjs / casperjs.
ACTUALIZAR
Ya no estoy tratando de lograr esto con CasperJS / PhantomJS. Estoy usando la extensión cromada Tampermonkey sugerida por dandavis. Tampermonkey fue extremadamente fácil de entender. Instalé Tampermonkey, navegué hasta la página con el enlace de descarga y luego hice clic en New Script en tampermonkey y agregué mi código de JavaScript.
document.getElementById("download_button").click();
Ahora, cada vez que navego por la página en mi navegador, el archivo se descarga. Luego creé un script por lotes que se parece a esto
set date=%DATE:~10,4%_%DATE:~4,2%_%DATE:~7,2%
chrome "http://www.example.com/page-with-dl-button"
timeout 10
move "C:/Users/user/Downloads/export.csv" "C:/path/to/dir/export_%date%.csv"
Establecí ese script por lotes para que se ejecute todas las noches con el programador de tareas de Windows.
¡Éxito!
Es muy probable que su botón emita una solicitud POST al servidor. Para rastrearlo:
- Abra la pestaña Red en las herramientas de desarrollador de Chrome
- Navega a la página y presiona el botón.
- Observe qué solicitud llevó a la descarga de archivos. Haga clic derecho sobre él y copie como cURL
- Ejecute copiado cURL
Una vez que haya funcionado el CURRICULUM puede programar descargas usando cron o el Programador de tareas dependiendo del sistema operativo que esté utilizando.