function fetchAwnsers(awnserURL = "") { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: "GET", url: awnserURL, headers: { "Content-Type": "text/html", }, onload: function (response) { awnserImgs = new Map(); const results = []; const parser = new DOMParser(); const virtDom = parser.parseFromString( response.responseText, "text/html" ); let answersDom = virtDom.querySelector(".pf-content"); if (!answersDom) { answersDom = virtDom.querySelector(".thecontent"); } let index = -1; for (let childDom of answersDom.children) { index++; if (childDom.tagName === "P" || childDom.tagName === "STRONG") { // maybe a question question let innerDom = childDom.querySelector("strong"); if (innerDom === null) { if (!childDom.textContent) { continue; } innerDom = childDom; } const textContent = innerDom.textContent.trim(); const matches = textContent.match(/^[0-9]+\. (.*)$/); if (matches !== null) { const questionText = matches[1]; // most likely a question let nextChild = answersDom.children[index + 1]; if (nextChild.tagName === "P") { nextChild = answersDom.children[index + 2]; } if (nextChild === null) continue; if (nextChild.tagName === "UL") { // most likely the awnser const answers = []; for (let answerDom of nextChild.querySelectorAll("strong")) { let answerText = answerDom.textContent.trim(); if (answerText.endsWith("*")) { answerText = answerText.substring(0, answerText.length - 1); } answers.push(answerText); } results.push({ question: questionText, answers: answers, }); } } } } resolve(results); }, onerror: function(error) { reject(error) } }); }); } window.fetchAwnsers = fetchAwnsers;