I made a little script to automatically download all my #Hetzner CSV invoices in a single file (or rather, one file per page):
let elem = Array.prototype.slice.call(document.getElementsByClassName('btn-download')).map(e=>e.href).filter(u=>u.endsWith('/csv'));
let numbers = elem.map(u=>/invoice[/]([^/]+)/.exec(u)[1]);
let filename = 'invoice-' + numbers[0] + '-' + numbers[numbers.length - 1] + '.csv';
let csv = '';
for (let url of elem)
csv += await (await fetch(url)).text();
let a = document.createElement("a");
a.download = filename;
a.href = a.href = "data:text/csv,"+encodeURIComponent(csv);
a.click();
Updates available as GitHub gist.