Wpis z mikrobloga

Skrypt listujący wyniki kandydatów w okręgu wg liczby głosów.

Sprawdzone, działa tu: https://wybory.gov.pl/sejmsenat2023/pl/sejm/wynik/gm/181801

const komitety = Array.from(document.querySelectorAll('#root > div.res > div > div.lists.row > div'));

let kandydaci = [];

for (let komitet of komitety) {

const nazwaKomitetu = komitet.querySelector('h5').innerText.replace(/Lista nr \d+ - /,'');

const osobyZKomitetu = Array.from(komitet.querySelector('table').tBodies[0].rows);

kandydaci.push(...osobyZKomitetu.map(o => ({
imie: o.cells[1].innerText,
wynik: Number(o.cells[2].querySelector('.hidden').innerHTML),
komitet: nazwaKomitetu
})));
}

kandydaci.sort((a,b) => b.wynik - a.wynik);

console.log(kandydaci.map(k => `| ${k.imie} | ${k.wynik} | ${k.komitet} |`).join('\r\n'))

#programowanie #wybory #javascript
  • 4
  • Odpowiedz
Aktualizacja - z procentami głosów:

const komitety = Array.from(document.querySelectorAll('#root > div.res > div > div.lists.row > div'));

const razem = Number(document.querySelector('.dataTables_wrapper tfoot > tr > td:nth-child(2) > div').innerHTML);

let kandydaci = [];

for (let komitet of komitety) {

const nazwaKomitetu = komitet.querySelector('h5').innerText.replace(/Lista nr \d+ - /,'');

const osobyZKomitetu = Array.from(komitet.querySelector('table').tBodies[0].rows);

kandydaci.push(...osobyZKomitetu.map(o => ({
imie: o.cells[1].innerText,
wynik: Number(o.cells[2].querySelector('.hidden').innerHTML),
komitet: nazwaKomitetu
})));
}

kandydaci.sort((a,b) => b.wynik - a.wynik);

console.log(kandydaci.map(k => `${k.imie}\t${k.wynik}\t${Math.round(k.wynik/razem*10000)/100}%\t${k.komitet}`).join('\r\n'))
  • Odpowiedz