Запустить функцию onclick для данного URL автоматически после загрузки DOM - PullRequest
0 голосов
/ 14 апреля 2020

Я новичок в js. Недавно я пытался очистить логи m3u8 без загрузки реального браузера. И целевой сайт имеет html дизайн, который мы должны нажать на кнопку эпизода, чтобы получить поток видео iframe.

Input: original video site url
Events I want: trigger onclick function to play video
Output: grab url logs like https://.../index.m3u8

Итак, я попробовал несколько способов выполнить событие click для команды (не для веб-консоли или JavaScript в браузере), включая jsdom и jsquery.

Вот часть Меня интересует источник html:

<div class="y_t">
<div id="yt_l1" class="yt_l">
<ul>
  <li><a href='#' onclick=ustv('ybynKRJsvW9ReRChsmgwM[c]oMbFtSxeBLAqtxoYzVaOK405Wa4JpWTw1sG[c]yw932SLCCrPHEGXJIuQWTwnbrOt9RPOvRiJNBnXAft9VIeDNPDBdkQEjjFaKjz3TUm','1')>1</a></li>
  <li><a href='#' onclick=ustv('ybynKRJsvW9ReUDxvm8wM[c]5bPV1WwuFOVapxoYzVaOK4xoWa4JwNAhhrQvPo9GGfKW[c]mMHNEQZAvSGz4lbzVq9RMNPMITYAwDAG[c]qA4AStTJBMRGUWaDJezig3Nrpg','2')>2</a></li>
  <li><a href='#' onclick=ustv('ybynKRJsvW9ReRP2vmUzN[c]tdP19axOJOWfNxoYzVaOK4xoWa4JwNAhhrQvPo9GGfKW[c]mMHNEQZAvSGz4lb[c]Qq9RPMPYOTYhhXFDv[a]F1XStTJBMRGUWaDJezig3Nrpg','3')>3</a></li>
  <li><a href='#' onclick=ustv('ybynKRJsvW9ReRv14zlgN[c]tQbg4Fx70bVfZxoYzVaOK4xoWa4JwNAhhrQvPo9GGfKW[c]mMHNEQZAvSGz4lb[c]Zq9RPO[c]wKTYQ1VlC4qlsJStTJBMRGUWaDJezig3Nrpg','4')>4</a></li>
  <li><a href='#' onclick=ustv('ybynKRJsvW9ReRSltWpnYKoJaV5SkLUbAaRxoYzVaOK4xoWa4JwNAhhrQvPo9GGfKW[c]mMHNEQZAvSGz4lL3Vq9RONvEPTYY8DFHrqV8BStTJBMRGUWaDJezig3Nrpg','5')>5</a></li>
  <li><a href='#' onclick=ustv('ybynKRJsvW9ReRr2420xa[c]0OMllTlLJPUKpxoYzVaOK4xoWa4JwNAhhrQvPo9GGfKW[c]mMHNEQZAvSGz4lLzQq9RJMvAITdc3W1e2[a]A4AStTJBMRGUWaDJezig3Nrpg','6')>6</a></li>
  <li><a href='#' onclick=ustv('ybynKRJsvW9ReRqgsT83NqhfaVdak7BOWPFxoYzVaOK4xoWa4JwNAhhrQvPo9GGfKW[c]mMHNEQZAvSGz4lLzZq9RJNPEITYBmDAfo9F9SStTJBMRGUWaDJezig3Nrpg','7')>7</a></li>
  <li><a href='#' onclick=ustv('ybynKRJsvW9ReROk4mk0avwJPwxSxLFPVPZxoYzVaOK4xoWa4JwNAhhrQvPo9GGfKW[c]mMHNEQZAvSGz4lL[c]Uq9RIMPwNTYMxDFbvrlhVStTJBMRGUWaDJezig3Nrpg','8')>8</a></li>
  <li><a href='#' onclick=ustv('ybynKRJsvW9ReROntmhiMKpfMl0AkL1OWKVxoYzVaOK4xoWa4JwNAhhrQvPo9GGfKW[c]mMHNEQZAvSGz5nb3Tq9RLMvcETYM0DFfo9AhVStTJBMRGUWaDJezig3Nrpg','9')>9</a></li>
  <li><a href='#' onclick=ustv('ybynKRJsvW9ReRWl5W9la[c]tbaFtWx7UbBKNxoYzVaOK4xoWa4JwNAhhrQvPo9GGfKW[c]mMHNEQZAvSGz5nb3Yq9RLNfUITdM2Cwu[c][c]l9SStTJBMRGUWaDJezig3Nrpg','10')>10</a></li>
</ul>
</div>
</div>

Я пробовал что-то вроде этого:

const jsdom = require("jsdom");
const { JSDOM } = jsdom;

JSDOM.fromURL("https://ustv123.com/xxxx/", ).then(dom => {
    console.log(dom.serialize());
    const enclosingDiv = dom.window.document.getElementById('yt_l1');
    const aNodes = enclosingDiv.getElementsByTagName("a");
    console.log('');
    console.log(`enclosingDiv: ${enclosingDiv}`);
    console.log(`enclosingDiv.childNodes: ${enclosingDiv.childNodes}`);
    console.log(`aNodes[0]: ${aNodes[0]}`);
    console.log(`aNodes[0].outerHTML: ${aNodes[0].outerHTML}`);
    aNodes[0].onclick();
    //UnhandledPromiseRejectionWarning: TypeError: aNodes[0].onclick is not a function
    aNodes[0]. click();
    console.log(`current href: ${dom.window.location.href}`);
    //current href: https://ustv123/xxxx/ (there should be a # at the end if click was success)
    //---------------------------output--------------------------
    //enclosing Div: [object HTMLDivElement] 
    //enclosing Div.childNodes: [object NodeList] 
    //aNodes [0]: https://ustv123.com/xxxx/#
    //aNodes[0].outerHTML: <a href="#" onclick="ustv('ybynkRJsVW9REUD2ED40M[c]wLMgtUlbQdU6JxoYzVaOK4zJic4YsRTQcsWO[a]t73uMOGesMjJKAc8wS2T6nb3SttRSMvwMIu43D1c4[c]L9JA5LODSVBBY XdY6Gmki0t64c', '1')">1</a>
});

  // I don't know how to get network resource logs with javascript, please give me some hint.
}                   

Пожалуйста, проведите меня через способ сделать эту работу. И я не знаю, как получить журналы сетевых ресурсов, содержащие 'index.m3u8' с javascript, пожалуйста, дайте мне подсказку.

--------------- --------- Обновления jQuery ------------------------

const jsdom = require("jsdom");
const { JSDOM } = jsdom;
var $ = require('jquery')(new jsdom.JSDOM().window);

JSDOM.fromURL("https://ustv123.com/xxxx/", ).then(dom => {
    console.log(dom.serialize());
    const enclosingDiv = dom.window.document.getElementById('yt_l1');
    const aNodes = enclosingDiv.getElementsByTagName("a");
    console.log('');
    console.log(`enclosingDiv: ${enclosingDiv}`);
    console.log(`enclosingDiv.childNodes:  ${enclosingDiv.childNodes}`);
    console.log(`aNodes[0]: ${aNodes[0]}`);
    console.log(`aNodes[0].outerHTML: ${aNodes[0].outerHTML}`);
    for(i=0; i<aNodes.length; i++){
        try{
            $(aNodes[i]).trigger('click')
        }catch(err){
            console.log(err);
        };
        console.log(i);
    }
    console.log(`current href: ${dom.window.location.href}`);
    //current href: http://ustv123.com/xxxx/
});

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Вы пробовали с jQuery как?

$(aNodes[0]).trigger('click');
0 голосов
/ 14 апреля 2020

Прежде всего, убедитесь, что вы выбираете теги привязки, а не элементы <li>. Это выберет всех <a> потомков включающего divdiv:

    const enclosingDiv = document.getElementById('yt_l1');
    const aNodes = enclosingDiv.getElementsByTagName('a');
...