LeetCode Contest: Open All Problems

Add an "Open All Problems" button on the LeetCode Contest page. Note that Pop-up windows need to be allowed in the web browser.

// ==UserScript==
// @name        LeetCode Contest: Open All Problems
// @namespace   JohnZhu04
// @match       https://leetcode.com/contest/*-contest-*/
// @grant       none
// @version     1.1
// @author      JohnZhu04
// @license     MIT
// @supportURL  https://github.com/JohnZhu04/LeetScript/issues
// @icon        https://www.google.com/s2/favicons?sz=64&domain=leetcode.com
// @exclude     https://leetcode.com/contest/*/problems/*/
// @description Add an "Open All Problems" button on the LeetCode Contest page. Note that Pop-up windows need to be allowed in the web browser.
// ==/UserScript==

const openAllProblems = () => {
  const problemsClass = "ul.contest-question-list li a";
  const problems = document.querySelectorAll(problemsClass);
  // console.log(problems.length);
  problems.forEach((problem) => {
    window.open(problem.href);
  });
};

const main = () => {
  const whichClass = ".col-md-6";
  const buttonClass = "btn btn-default panel-hover";
  const buttonText = "Open All Problems";
  if (document.querySelector(whichClass) === null) {
    // wait for the page to load
    window.setTimeout(main, 2000);
  }
  const button = document.createElement("button");
  button.innerText = buttonText;
  button.addEventListener("click", openAllProblems);
  button.className = buttonClass;
  document.querySelector(whichClass).appendChild(button);
};

main();