0

我正在使用 Google Chrome Dev Console 来执行这个脚本:

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

function checkbtn(btn) {
    if (btn.singleNodeValue != null) {
        console.log('Success!')
        btn.singleNodeValue.click();
        throw new Error();
    } else {
        console.log('button not here yet - next button');
    };
}

function check() {
    url = window.location.href;
    var newwindow = window.open(url, 'tab2');
    //sleep 250ms
    await sleep(250);
    var newwindow2 = window.open(url, 'tab3');
    //sleep 250ms
    await sleep(250);
    var newwindow3 = window.open(url, 'tab4');
    var loginbtn;
    while (true) {
        loginbtn = newwindow.document.evaluate("//*[text()='5544']/../../td[@class='action']/form/input[@type='submit' and not(@disabled)]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
        console.log('trying button 1');
        checkbtn(loginbtn);
        loginbtn = newwindow2.document.evaluate("//*[text()='5544']/../../td[@class='action']/form/input[@type='submit' and not(@disabled)]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
        console.log('trying button 2');
        checkbtn(loginbtn);
        loginbtn = newwindow3.document.evaluate("//*[text()='5544']/../../td[@class='action']/form/input[@type='submit' and not(@disabled)]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
        console.log('trying button 3');
        checkbtn(loginbtn);     
    };
};

但是,这只会导致在当前活动选项卡中执行的单击,我在其中发布代码的控制台。有没有办法让点击发生在例如第三个选项卡中,或者由于安全原因这是不可能的?

编辑:由于重复原因:跨浏览器选项卡调用javascript函数:给定的帖子没有说明代码是否从浏览器控制台运行。我想知道是否有任何方法可以操纵其他选项卡(本地)以单击按钮。另外:如果不可能:是否可以扩展?

4

2 回答 2

0

我使用将函数 checkbtn() 添加到新选项卡的扩展来完成此操作。然后我通过控制台调用它

newwindow.checkbtn(args)

但是,这似乎有点太复杂了,因为我不需要处理像 Selenium 这样的第三方库的调用,这似乎有点过头了,因此,我正在努力使整个脚本由扩展名。

于 2019-02-14T17:30:21.823 回答
0

这可以使用浏览器扩展来实现。您可以在所有选项卡中注入一个内容脚本文件来操作 DOM,并在后台脚本来查询所需的选项卡。此选项需要在后台查询选项卡,然后将消息发送到内容脚本以执行 JS 代码。

或者您可以使用chrome.tabs.queryand chrome.tabs.executeScript,它仅在后台上下文中可用,因此您不需要将内容脚本用作注入文件。

于 2019-02-14T00:03:50.247 回答