const Nightmare = require('nightmare') const nightmare = Nightmare({ show: true }) var hltv_url = "https://hltv.org"; nightmare .goto(hltv_url) .wait("div[class='teamrows']") .wait(2000) .evaluate(function(hltv_url) { var match_rows = document.querySelectorAll("div.teamrows"); var matches = []; for(var i = 0; i < match_rows.length; i++) { var match_row = match_rows[i]; var team_rows = match_row.children; var parent = match_row.parentElement; var grandparent = match_row.parentElement.parentElement; var sibling = match_row.nextElementSibling; // if (grandparent.className === "col-box a-reset") { continue; } // since the VOD boxes are always at the end we can just break if (grandparent.className === "col-box a-reset") { break; } var event_name; var start_time; var link; var stars; var lan; var team_names = []; var team_countries = []; var current_scores = []; var maps_won = []; for (var j = 0; j < team_rows.length; j++){ var team_row = team_rows[j]; if (team_row.className.includes("teamrow")) { var flag_el = team_row.getElementsByClassName("flag")[0]; var team_el = team_row.getElementsByClassName("team")[0]; team_countries.push(flag_el.getAttribute("title")); team_names.push(team_el.innerText); } } if (grandparent.className.includes("hotmatch-box")) { stars = parent.getAttribute("stars"); lan = parent.getAttribute("lan"); link = grandparent.getAttribute("href"); event_name = grandparent.getAttribute("title") start_time = "LIVE" } else if (grandparent.className.includes("col-box-con result-box")) { stars = grandparent.getAttribute("stars"); lan = grandparent.getAttribute("lan"); link = grandparent.getAttribute("href"); event_name = parent.previousElementSibling.getAttribute("title"); start_time = "OVER" } if (sibling.className === "twoRowExtra") { score_rows = sibling.children; for (var j = 0; j < score_rows.length; j++) { var score_row = score_rows[j]; if (score_row.className === "livescore twoRowExtraRow") { var score_el = score_row.querySelector("[data-livescore-current-map-score='']"); var maps_won_el = score_row.querySelector("[data-livescore-maps-won-for='']"); current_scores.push(score_el.innerText); maps_won.push(maps_won_el.innerText); } else if (score_row.className.includes("twoRowExtraRow won") || score_row.className.includes("twoRowExtraRow lost")) { maps_won.push(score_row.innerText); } } } else if (sibling.className === "middleExtra") { start_time = sibling.getAttribute("data-unix"); } link = hltv_url + link; matches.push({"event_name": event_name, "start_time": start_time, "link": link, "stars": stars, "lan": lan, "team_names": team_names, "team_countries": team_countries, "current_scores": current_scores, "maps_won": maps_won}); } return JSON.stringify(matches); }, hltv_url) .end() .then(m => console.log(m)) .then(nightmare.end()) .catch(error => { console.error(error) });