Javascript: Получить значение id кнопки в переменную, которое получили в консоли браузера (инстанса)

  • Автор темы Автор темы lx2003
  • Дата начала Дата начала

lx2003

Client
Регистрация
15.02.2021
Сообщения
819
Реакции
158
Баллы
43
Здравствуйте!
В инстансе (браузер Chromium) при нажатии на кнопку выполняется код javascript, который в консоль браузера (инстанса) передает из кода ответ - id нажатой кнопки.
Каким способом сохранить значение id нажатой кнопки в переменную Zennoposter (ProjectMaker)?

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

В консоли встроенного браузера (инстанса) ответ вижу, а в переменную или в лог ProjectMaker получить не получается.


Для добавления кнопок к каждой странице сайта, по которому прохожу Зеннопостером использую вот такой скрипт:

Добавить кнопки к страницам в браузере:
Развернуть Свернуть Копировать
// Создаем стили для блока с кнопками
const styles = `
#navigationPanel {
position: fixed;
top: 0;
left: 0;
width: 100%;
background-color: #f8f9fa;
border-bottom: 1px solid #ddd;
padding: 10px 0;
box-shadow: 0 2px 4px rgba(0,0,0,.1);
z-index: 1000;
text-align: center;
}
#navigationPanel button {
margin: 0 10px;
}
`;

// Добавляем стили в документ
const styleSheet = document.createElement("style");
styleSheet.type = "text/css";
styleSheet.innerText = styles;
document.head.appendChild(styleSheet);

// Создаем блок div для кнопок
const navigationPanel = document.createElement('div');
navigationPanel.id = 'navigationPanel';

// Создаем кнопки
const buttons = [
{ id: 'prevFile', text: 'Предыдущий файл' },
{ id: 'nextFile', text: 'Следующий файл' },
{ id: 'addToRequired', text: 'В список необходимых' },
{ id: 'saveAndClose', text: 'Сохранить в файл и закрыть окно' }
];

// Функция для обработки нажатия кнопок
function handleButtonClick(event) {
const buttonValue = event.target.id;
// Передаем значение в Зеннопостер
return buttonValue;
//console.log (buttonValue);
//ZennoPoster.setVariable("buttonPressed", buttonValue);
}

// Добавляем кнопки в блок div
buttons.forEach(buttonInfo => {
const button = document.createElement('button');
button.id = buttonInfo.id;
button.textContent = buttonInfo.text;
button.onclick = handleButtonClick;
navigationPanel.appendChild(button);
});

// Добавляем блок div с кнопками в начало body
document.body.insertBefore(navigationPanel, document.body.firstChild);
 
Последнее редактирование:
Нашел вот такой код, в котором из переменной получаешь значение.

Пример:
Развернуть Свернуть Копировать
var myArray = "{-Variable.s1-}".split("+"),sum=0;
for(var i=0; i<myArray.length; i++) {
sum = (sum + parseInt(myArray[i]));
}
return sum;


Но как сделать так, чтобы:
1) Переменной из Зеннопостера назначить значение из кода Javascript;
2) Как из вставленного скрипта (javascript) с помощью кубика Скрипт JS в браузер, получить ответ в переменную Зеннопостер после нажатия кнопки.
 
В трафике отловить и положить в переменную, не?
 
  • Спасибо
Реакции: lx2003
Проще мне кажется передать в коде javascript, который добавляется, чем отлавливать трафик.
 
Ну, если проще, то "да" ))
Вопрос изначальный был как получить то, что отдает с той стороны после нажатия. Логично, что получить ответ. Это делается обычно через трафик (ну, самый очевидный вариант не видя "источника").
Перед нажатием включил мониторинг, после нажатия сниппетом получил нужный ответ и обработал.
Не исключаю, что в конкретно твоем случае на твоем сайте можно как-то упростить, но, не видя источник, сказать сложно ))

ps. Если вдруг захочется проверить.
Перед нажатием сниппет:
instance.UseTrafficMonitoring = true;
После нажатия - ищем нужное:
C#:
Развернуть Свернуть Копировать
var traffic = instance.ActiveTab.GetTraffic();
foreach (var t in traffic)
{
    if (t.Url == "https://site.ru/add_something") //Ищем запрос по урлу (первоначальный поиск)
    {
        if (t.RequestBody.Contains("что_то_показательное_из_запроса")) //Ищем нужный запрос по телу запроса (именно запроса, если надо ответа, то ResponseBody)
        {
            return System.Text.Encoding.UTF8.GetString(t.ResponseBody);  //Возвращаем что нам надо
        }
    }
}
 
  • Спасибо
Реакции: lx2003
Ну, если проще, то "да" ))
Вопрос изначальный был как получить то, что отдает с той стороны после нажатия. Логично, что получить ответ. Это делается обычно через трафик (ну, самый очевидный вариант не видя "источника").
Перед нажатием включил мониторинг, после нажатия сниппетом получил нужный ответ и обработал.
Не исключаю, что в конкретно твоем случае на твоем сайте можно как-то упростить, но, не видя источник, сказать сложно ))
А через добавление в код передачи значения в переменную при нажатии какой-то из кнопок неужели нельзя?
 
Ну, если проще, то "да" ))
Вопрос изначальный был как получить то, что отдает с той стороны после нажатия. Логично, что получить ответ. Это делается обычно через трафик (ну, самый очевидный вариант не видя "источника").
Перед нажатием включил мониторинг, после нажатия сниппетом получил нужный ответ и обработал.
Не исключаю, что в конкретно твоем случае на твоем сайте можно как-то упростить, но, не видя источник, сказать сложно ))

ps. Если вдруг захочется проверить.
Перед нажатием сниппет:
instance.UseTrafficMonitoring = true;
После нажатия - ищем нужное:
C#:
Развернуть Свернуть Копировать
var traffic = instance.ActiveTab.GetTraffic();
foreach (var t in traffic)
{
    if (t.Url == "https://site.ru/add_something") //Ищем запрос по урлу (первоначальный поиск)
    {
        if (t.RequestBody.Contains("что_то_показательное_из_запроса")) //Ищем нужный запрос по телу запроса (именно запроса, если надо ответа, то ResponseBody)
        {
            return System.Text.Encoding.UTF8.GetString(t.ResponseBody);  //Возвращаем что нам надо
        }
    }
}
Пример какой-то бы готовый
 
А через добавление в код передачи значения в переменную при нажатии какой-то из кнопок неужели нельзя?
Наверное можно. Но мы же не знаем, что там должно передаваться и как сайт воспримет то, что ты передаешь, а не то, что ему надо. Одному что угодно скормить можно, другой сам только уже после нажатия генерирует (например, id).
 
  • Спасибо
Реакции: lx2003
Пример какой-то бы готовый
Для готового примера нужно видеть сайт, куда надо отправлять. Заготовку я скинул (лично у меня работает в нескольких проектах). Дальше два кубика-сниппета. Один до клика, другой после. Первый просто включает запись трафика. Второй - ищет нужное. У тебя в консоли же есть, что нужно. Вставь урл из этого запроса в урл, и какой-нить текст из запроса/ответа - в текст для поиска.
 
  • Спасибо
Реакции: lx2003
Наверное можно. Но мы же не знаем, что там должно передаваться и как сайт воспримет то, что ты передаешь, а не то, что ему надо. Одному что угодно скормить можно, другой сам только уже после нажатия генерирует (например, id).

Написал шаблон, который открывает некоторые текстовые файлы в инстансе.
И если текстовый файл, кторый открыт нужный в данный момент, добавить его в отдельный список, если пока не нужен, то не добавлять.

Т.е. работа не с сайтами, а текстовыми файлами.
 
Ну, если проще, то "да" ))
Вопрос изначальный был как получить то, что отдает с той стороны после нажатия. Логично, что получить ответ. Это делается обычно через трафик (ну, самый очевидный вариант не видя "источника").
Перед нажатием включил мониторинг, после нажатия сниппетом получил нужный ответ и обработал.
Не исключаю, что в конкретно твоем случае на твоем сайте можно как-то упростить, но, не видя источник, сказать сложно ))

ps. Если вдруг захочется проверить.
Перед нажатием сниппет:
instance.UseTrafficMonitoring = true;
После нажатия - ищем нужное:
C#:
Развернуть Свернуть Копировать
var traffic = instance.ActiveTab.GetTraffic();
foreach (var t in traffic)
{
    if (t.Url == "https://site.ru/add_something") //Ищем запрос по урлу (первоначальный поиск)
    {
        if (t.RequestBody.Contains("что_то_показательное_из_запроса")) //Ищем нужный запрос по телу запроса (именно запроса, если надо ответа, то ResponseBody)
        {
            return System.Text.Encoding.UTF8.GetString(t.ResponseBody);  //Возвращаем что нам надо
        }
    }
}
Наверное, этот код также получится использовать.
 
Ну, если проще, то "да" ))
Вопрос изначальный был как получить то, что отдает с той стороны после нажатия. Логично, что получить ответ. Это делается обычно через трафик (ну, самый очевидный вариант не видя "источника").
Перед нажатием включил мониторинг, после нажатия сниппетом получил нужный ответ и обработал.
Не исключаю, что в конкретно твоем случае на твоем сайте можно как-то упростить, но, не видя источник, сказать сложно ))

ps. Если вдруг захочется проверить.
Перед нажатием сниппет:
instance.UseTrafficMonitoring = true;
После нажатия - ищем нужное:
C#:
Развернуть Свернуть Копировать
var traffic = instance.ActiveTab.GetTraffic();
foreach (var t in traffic)
{
    if (t.Url == "https://site.ru/add_something") //Ищем запрос по урлу (первоначальный поиск)
    {
        if (t.RequestBody.Contains("что_то_показательное_из_запроса")) //Ищем нужный запрос по телу запроса (именно запроса, если надо ответа, то ResponseBody)
        {
            return System.Text.Encoding.UTF8.GetString(t.ResponseBody);  //Возвращаем что нам надо
        }
    }
}
Это получается надо использовать обработчики одновременно и C#, и Javascript
 
С текстовыми файлами через инстанс? )))
Месье знает толк в извращениях )))
Тут я пас тогда, дольше вникать буду, думаю ))
Думается, в этом блоке можно просто в переменную класть:
C#:
Развернуть Свернуть Копировать
// Функция для обработки нажатия кнопок
function handleButtonClick(event) {
const buttonValue = event.target.id;
// Передаем значение в Зеннопостер
return buttonValue;
//console.log (buttonValue);
//ZennoPoster.setVariable("buttonPressed", buttonValue);
}
Параллельно с return
 
  • Спасибо
Реакции: lx2003
Это получается надо использовать обработчики одновременно и C#, и Javascript
Да. Я уже под конце беседы понял (и то не полностью), что у тебя там какая-то схема на JS, поэтому, возможно, "в лоб" мое решение не сработает. Был невнимателен, каюсь. Сейчас придут знатоки JS (ну или спецы по "задать" вопрос ChatGPT) и скажут, как сразу положить значение в переменную.
 
  • Спасибо
Реакции: lx2003
Да. Я уже под конце беседы понял (и то не полностью), что у тебя там какая-то схема на JS, поэтому, возможно, "в лоб" мое решение не сработает. Был невнимателен, каюсь. Сейчас придут знатоки JS (ну или спецы по "задать" вопрос ChatGPT) и скажут, как сразу положить значение в переменную.
Пробую и этот вариант. Спасибо!
 
С текстовыми файлами через инстанс? )))
Месье знает толк в извращениях )))
Тут я пас тогда, дольше вникать буду, думаю ))
Думается, в этом блоке можно просто в переменную класть:
C#:
Развернуть Свернуть Копировать
// Функция для обработки нажатия кнопок
function handleButtonClick(event) {
const buttonValue = event.target.id;
// Передаем значение в Зеннопостер
return buttonValue;
//console.log (buttonValue);
//ZennoPoster.setVariable("buttonPressed", buttonValue);
}
Параллельно с return
Вариант работы с текстовыми файлами - конечно, да, не самый привлекательный, но когда есть что-то, то используешь именно его))

Да, как раз в этом блоке в переменную положить не пойму как...

Выводить бы в лог хотя бы Зеннопостера, а не только инстанса, уже было бы хорошо.

И вариант из ИИ как это сделать пробовал, и в лог прописать пробовал...
 
Судя по всему, в Зенке - никак
 
  • Спасибо
Реакции: lx2003
Сохраняйте нужное значение в переменной виндоу. После отработки клика выполните код, который возвращает значение этой переменной.
 
  • Спасибо
Реакции: lx2003
Сохраняйте нужное значение в переменной виндоу. После отработки клика выполните код, который возвращает значение этой переменной.
Пытаюсь примерно также.
Не получается еще
Вот нашел такой постик
 
У вас же есть функция handleButtonClick, добавьте в неё window.kakyato_peremennaya = buttonValue;
И после отработки клика на кнопке забирайте жсом значение - return window.kakyato_peremennaya;
 
  • Спасибо
Реакции: lx2003
У вас же есть функция handleButtonClick, добавьте в неё window.kakyato_peremennaya = buttonValue;
И после отработки клика на кнопке забирайте жсом значение - return window.kakyato_peremennaya;
А вот чтобы сразу в переменную в ПроджектМейкер, так и надо написать?
Что-то не работает...
В консоль пишет id, а в переменную значение не передается...

function handleButtonClick(event):
Развернуть Свернуть Копировать
// Функция для обработки нажатия кнопок
function handleButtonClick(event) {
const buttonValue = event.target.id;
// Передаем значение в Зеннопостер
console.log(buttonValue);
window.kakyato_peremennaya = buttonValue;
console.log(window.kakyato_peremennaya);
return window.kakyato_peremennaya;
}
 
После клика на кнопке выполните кубик код js на странице, в котором будет return window.kakyato_peremennaya;
 
  • Спасибо
Реакции: lx2003

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)