Javascript, выполняющий click () на другой вкладке Chrome с помощью консоли разработчика - PullRequest
0 голосов
/ 14 февраля 2019

Я использую 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 на вкладках браузера : Данный пост не разъясняет, запускается ли код из консоли браузера.Я хочу знать, есть ли способ манипулировать другой вкладкой (локально), чтобы нажать кнопку.Также: если невозможно: возможно ли расширение?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Я сделал это, используя расширение, которое добавляет функцию checkbtn () на новую вкладку.Затем я вызываю его через консоль, используя

newwindow.checkbtn(args)

Однако это кажется слишком сложным, и, поскольку мне не нужно обрабатывать вызов через стороннюю библиотеку, такую ​​какSelenium, это кажется немного излишним, и поэтому я работаю над тем, чтобы весь скрипт выполнялся расширением.

0 голосов
/ 14 февраля 2019

Это возможно с помощью расширения браузера.Вы можете вставить файл сценария содержимого во все вкладки для управления DOM и фоновый сценарий для запроса нужных вкладок.Эта опция потребует запроса вкладок в фоновом режиме и последующей отправки сообщений в скрипт содержимого для выполнения кода JS.

Или вы можете использовать chrome.tabs.query и chrome.tabs.executeScript, которые доступны только в фоновом контексте, таким образом, вам не нужно будет использовать скрипты содержимого как внедренные файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...