JS在弹出窗口上执行操作

时间:2018-09-18 11:55:12

标签: javascript web-scraping

因此,最近我一直在学习JS并尝试与网页进行交互,一开始是抓取,但现在也正在特定网页上进行交互。 例如,我有一个包含一个按钮的网页,我想大约每30秒按下一次该按钮,然后刷新(然后再次开始倒计时)。我写了以下脚本来做到这一点:

var klikCount = 0;
function getPlayElement() {
    var playElement = document.querySelector('.button_red');
    return playElement;
}
function doKlik() {
    var playElement = getPlayElement();
    klikCount++;
    console.log('Watched ' + klikCount);
    playElement.click();
    setTimeout(doKlik, 30000);
}
doKlik()

但是现在我需要加强我的游戏,每次单击按钮都会弹出一个新窗口,我也需要在其中执行一个操作,然后关闭它并返回到“ main”脚本。 通过JS可以做到吗?请记住,我是一个JavaScript新手,并且不了解很多基本功能。

谢谢你, 亚历克斯

1 个答案:

答案 0 :(得分:1)

DOM事件具有isTrusted属性,仅当用户生成事件时才具有true属性,而不是像el.click()情况那样是综合事件。

弹出窗口是众多Web机制之一,仅当用户执行了单击或类似操作而不是代码本身时才起作用。

赋予页面打开无限量弹出窗口的功能从来都不是一个好主意,因此很久以前,它们以多种方式终止了该功能。

您可以在自己的标签/窗口中创建iframe,并通过postMessage在这些框架中执行操作,但是我不确定这对您是否足够。

无论如何,如果从用户生成点击,代码将起作用,如下所示:

document.body.addEventListener(
  'click',
  event => {
    const outer = open(
      'about:blank',
      'blanka',
      'menubar=no,location=yes,resizable=no,scrollbars=no,status=yes'
    );
    outer.document.open();
    outer.document.write('This is a pretty big popup!');
    // post a message to the opener (aka current window)
    outer.document.write(
      '<script>opener.postMessage("O hi Mark!", "*");</script>'
    );
    // set a timer to close the popup
    outer.document.write(
      '<script>setTimeout(close, 1000)</script>'
    );
    outer.document.close();
    // you could also outer.close()
    // instead of waiting the timeout
  }
);

// will receive the message and log
// "O hi Mark!"
addEventListener('message', event => {
  console.log(event.data);
});

每个弹出窗口都有一个打开器,每个不同的窗口都可以通过postMessage进行通信。

您可以阅读more about window.open in MDN