Polis-JSスクレイピング
Polisの詳細レポートの画面から情報を抜き出してChatGPTに入れたかったので作ったnishio.icon
都合のいいIDなどが振られていないので開発者ツールでインスペクトしてクエリーセレクターで無理やり取り出している、これは壊れやすいと思う
code:js
colsToData = (cols) => {
groups = cols.slice(2).map((g) => g.title.replace(/\n/g, ", "));
return {
statement_id: cols0,
statement: cols1.innerText,
groups,
};
};
printForGPT = (table, target = 1) => {
group_id = "A", "B", "C", "D", "E"target - 1;
rows = ...table.children.slice(1);
result = [];
rows.forEach((row) => {
cols = ...row.children;
data = colsToData(cols);
result.push(
${data.statement}\n OVERALL: ${data.groups[0]}\n GROUP ${group_id}: ${data.groups[target]}
);
});
console.log(result.join("\n\n"));
};
// printForGPT(table, 1);
num_group = 4;
for (let i = 0; i < num_group; i++) {
table = document.querySelector(
`#root > div > div > div:nth-child(2) > div:nth-child(5) > div > div:nth-child(${
i + 3
}) > div`
);
printForGPT(table, i + 1);
console.log("\n\n");
}
memo
code:js
table = document.querySelector("#root > div > div > div:nth-child(2) > div:nth-child(5) > div > div:nth-child(3) > div")
[...table.children0.children].map((x)=>x.innerText)
// (6) 'STATEMENT', 'OVERALL30', 'A4', 'B9', 'C12', 'D5'
...table.children.slice(1).map((x)=>...x.children.map((x)=>x.innerText))
row = ...table.children.slice(1)0
cols = ...row.children
// table B
table = document.querySelector("#root > div > div > div:nth-child(2) > div:nth-child(5) > div > div:nth-child(4) > div")
// table C
table = document.querySelector("#root > div > div > div:nth-child(2) > div:nth-child(5) > div > div:nth-child(5) > div")