Откройте Chrome / Chromium из командной строки и отправьте действие javascript на консоль chrome / chromium - PullRequest
0 голосов
/ 26 июня 2018

Вкл. Ubuntu 18.04 , я пытаюсь создать оповещение, чтобы помнить меня, чтобы отслеживать мой рабочий день каждый день.

Создать файл sh put_hours.sh

#!/bin/bash

zenity \
    --forms \
    --title="TIME TRACKING" \
    --text="Please track your time" \
    --add-entry="¿ What have you done ?" \
    --ok-label "GO"

case $? in
    0) chromium-browser http://site/that/I/want/to/open
    ;;
    1)
   ;;
esac

Сделать его исполняемым

chmod +x put_hours.sh

Запустите его

./put_hours.sh

the window created by zenity

Как видите, это работает, но мой вопрос:

Как отправить команду javascript на консоль chrome / chromium в открытом URL-адресе?

Мне нужно выполнить простую команду, такую ​​как:

document.getElementById("my_id").value = 'nothing to do'

значение для отправки в виде строки 'ничего не делать' должно быть значением, переданным окном, открытым Zenity.

Я использую Zenity для создания окна, но я не обязан использовать это программное обеспечение.

1 Ответ

0 голосов
/ 27 декабря 2018

Сначала получите значение

Zenity напечатает количество часов, которое пользователь ввел в стандартный вывод после нажатия GO.

Первым шагом будет изменение вашего скрипта для захвата результата и присвоения его переменной:

hours=$(zenity \
    --forms \
    --title="TIME TRACKING" \
    --text="Please track your time" \
    --add-entry="¿ What have you done ?" \
    --ok-label "GO")

Опции

Что вы можете сделать дальше, зависит от типа доступа и контроля над сайтом. Некоторые варианты хаки.

Для каждого из следующих параметров передайте переменную $hours на веб-сайт в качестве параметра запроса, например:

case $? in
    0) chromium-browser "http://site/that/I/want/to/open?hours=$hours"

Вариант A - Веб-сайт поддерживает заполнение поля параметром запроса

Возможно, вам повезет, и все вышеперечисленное сработает. Если это не сработает вначале, возможно, у вас неверное имя параметра запроса.

Чтобы определить правильное имя параметра запроса, изучите исходный код и его поведение при отправке формы вручную.

например. https://www.google.com? Д = до + заполнения + кнопки + поиск + бар

Вариант B - написать скрипт пользователя для этого в браузере

Используйте инструмент Tamper Monkey для запуска пользовательского сценария при загрузке страницы, который извлекает параметр запроса и устанавливает поле.

// ==UserScript==
// @name         Set Hours
// @match        http://site/that/I/want/to/open*
// ==/UserScript==
(function() {
    var urlParams = new URLSearchParams(window.location.search); // Reference: https://stackoverflow.com/a/47566165/241294

    if (urlParams.has('hours')) {
        var hours = urlParams.get('hours');

        document.getElementById("my_id").value = hours;

        alert('well done ad3luc you did ' + hours + ' hours today');
    }
})();

Недостатком, конечно, является логика в двух местах: ваш скрипт и ваш браузер.

Это хак, но мне нравится разделять проблемы. Скрипт отправляет значение на сайт. Сайт, задающий значение поля.

Вы также должны убедиться, что выбранный вами параметр не конфликтует ни с одним из существующих параметров запроса, используемых сайтом.

Вариант C - Изменить сайт

Измените исходный код сайта, чтобы он поддерживал вариант A.

...