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

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
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);
 
Последнее редактирование:

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
Нашел вот такой код, в котором из переменной получаешь значение.

Пример:
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 в браузер, получить ответ в переменную Зеннопостер после нажатия кнопки.
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 410
Благодарностей
999
Баллы
113
В трафике отловить и положить в переменную, не?
 
  • Спасибо
Реакции: lx2003

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
Проще мне кажется передать в коде javascript, который добавляется, чем отлавливать трафик.
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 410
Благодарностей
999
Баллы
113
Ну, если проще, то "да" ))
Вопрос изначальный был как получить то, что отдает с той стороны после нажатия. Логично, что получить ответ. Это делается обычно через трафик (ну, самый очевидный вариант не видя "источника").
Перед нажатием включил мониторинг, после нажатия сниппетом получил нужный ответ и обработал.
Не исключаю, что в конкретно твоем случае на твоем сайте можно как-то упростить, но, не видя источник, сказать сложно ))

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

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
Ну, если проще, то "да" ))
Вопрос изначальный был как получить то, что отдает с той стороны после нажатия. Логично, что получить ответ. Это делается обычно через трафик (ну, самый очевидный вариант не видя "источника").
Перед нажатием включил мониторинг, после нажатия сниппетом получил нужный ответ и обработал.
Не исключаю, что в конкретно твоем случае на твоем сайте можно как-то упростить, но, не видя источник, сказать сложно ))
А через добавление в код передачи значения в переменную при нажатии какой-то из кнопок неужели нельзя?
 

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
Ну, если проще, то "да" ))
Вопрос изначальный был как получить то, что отдает с той стороны после нажатия. Логично, что получить ответ. Это делается обычно через трафик (ну, самый очевидный вариант не видя "источника").
Перед нажатием включил мониторинг, после нажатия сниппетом получил нужный ответ и обработал.
Не исключаю, что в конкретно твоем случае на твоем сайте можно как-то упростить, но, не видя источник, сказать сложно ))

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);  //Возвращаем что нам надо
        }
    }
}
Пример какой-то бы готовый
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 410
Благодарностей
999
Баллы
113
А через добавление в код передачи значения в переменную при нажатии какой-то из кнопок неужели нельзя?
Наверное можно. Но мы же не знаем, что там должно передаваться и как сайт воспримет то, что ты передаешь, а не то, что ему надо. Одному что угодно скормить можно, другой сам только уже после нажатия генерирует (например, id).
 
  • Спасибо
Реакции: lx2003

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 410
Благодарностей
999
Баллы
113
Пример какой-то бы готовый
Для готового примера нужно видеть сайт, куда надо отправлять. Заготовку я скинул (лично у меня работает в нескольких проектах). Дальше два кубика-сниппета. Один до клика, другой после. Первый просто включает запись трафика. Второй - ищет нужное. У тебя в консоли же есть, что нужно. Вставь урл из этого запроса в урл, и какой-нить текст из запроса/ответа - в текст для поиска.
 
  • Спасибо
Реакции: lx2003

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
Наверное можно. Но мы же не знаем, что там должно передаваться и как сайт воспримет то, что ты передаешь, а не то, что ему надо. Одному что угодно скормить можно, другой сам только уже после нажатия генерирует (например, id).
Написал шаблон, который открывает некоторые текстовые файлы в инстансе.
И если текстовый файл, кторый открыт нужный в данный момент, добавить его в отдельный список, если пока не нужен, то не добавлять.

Т.е. работа не с сайтами, а текстовыми файлами.
 

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
Ну, если проще, то "да" ))
Вопрос изначальный был как получить то, что отдает с той стороны после нажатия. Логично, что получить ответ. Это делается обычно через трафик (ну, самый очевидный вариант не видя "источника").
Перед нажатием включил мониторинг, после нажатия сниппетом получил нужный ответ и обработал.
Не исключаю, что в конкретно твоем случае на твоем сайте можно как-то упростить, но, не видя источник, сказать сложно ))

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

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
Думал сделать в winforms, потом решил, что с инстансом будет проще.
 

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
Ну, если проще, то "да" ))
Вопрос изначальный был как получить то, что отдает с той стороны после нажатия. Логично, что получить ответ. Это делается обычно через трафик (ну, самый очевидный вариант не видя "источника").
Перед нажатием включил мониторинг, после нажатия сниппетом получил нужный ответ и обработал.
Не исключаю, что в конкретно твоем случае на твоем сайте можно как-то упростить, но, не видя источник, сказать сложно ))

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
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 410
Благодарностей
999
Баллы
113
С текстовыми файлами через инстанс? )))
Месье знает толк в извращениях )))
Тут я пас тогда, дольше вникать буду, думаю ))
Думается, в этом блоке можно просто в переменную класть:
C#:
// Функция для обработки нажатия кнопок
function handleButtonClick(event) {
const buttonValue = event.target.id;
// Передаем значение в Зеннопостер
return buttonValue;
//console.log (buttonValue);
//ZennoPoster.setVariable("buttonPressed", buttonValue);
}
Параллельно с return
 
  • Спасибо
Реакции: lx2003

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 410
Благодарностей
999
Баллы
113
Это получается надо использовать обработчики одновременно и C#, и Javascript
Да. Я уже под конце беседы понял (и то не полностью), что у тебя там какая-то схема на JS, поэтому, возможно, "в лоб" мое решение не сработает. Был невнимателен, каюсь. Сейчас придут знатоки JS (ну или спецы по "задать" вопрос ChatGPT) и скажут, как сразу положить значение в переменную.
 
  • Спасибо
Реакции: lx2003

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
Да. Я уже под конце беседы понял (и то не полностью), что у тебя там какая-то схема на JS, поэтому, возможно, "в лоб" мое решение не сработает. Был невнимателен, каюсь. Сейчас придут знатоки JS (ну или спецы по "задать" вопрос ChatGPT) и скажут, как сразу положить значение в переменную.
Пробую и этот вариант. Спасибо!
 

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
С текстовыми файлами через инстанс? )))
Месье знает толк в извращениях )))
Тут я пас тогда, дольше вникать буду, думаю ))
Думается, в этом блоке можно просто в переменную класть:
C#:
// Функция для обработки нажатия кнопок
function handleButtonClick(event) {
const buttonValue = event.target.id;
// Передаем значение в Зеннопостер
return buttonValue;
//console.log (buttonValue);
//ZennoPoster.setVariable("buttonPressed", buttonValue);
}
Параллельно с return
Вариант работы с текстовыми файлами - конечно, да, не самый привлекательный, но когда есть что-то, то используешь именно его))

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

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

И вариант из ИИ как это сделать пробовал, и в лог прописать пробовал...
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 410
Благодарностей
999
Баллы
113
Судя по всему, в Зенке - никак
 
  • Спасибо
Реакции: lx2003

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
Если получится, напишу как сделал
 

Alex733

Client
Регистрация
27.11.2017
Сообщения
328
Благодарностей
239
Баллы
43
Сохраняйте нужное значение в переменной виндоу. После отработки клика выполните код, который возвращает значение этой переменной.
 
  • Спасибо
Реакции: lx2003

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
Сохраняйте нужное значение в переменной виндоу. После отработки клика выполните код, который возвращает значение этой переменной.
Пытаюсь примерно также.
Не получается еще
Вот нашел такой постик
 

Alex733

Client
Регистрация
27.11.2017
Сообщения
328
Благодарностей
239
Баллы
43
У вас же есть функция handleButtonClick, добавьте в неё window.kakyato_peremennaya = buttonValue;
И после отработки клика на кнопке забирайте жсом значение - return window.kakyato_peremennaya;
 
  • Спасибо
Реакции: lx2003

lx2003

Client
Регистрация
15.02.2021
Сообщения
505
Благодарностей
136
Баллы
43
У вас же есть функция 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;
}
 

Alex733

Client
Регистрация
27.11.2017
Сообщения
328
Благодарностей
239
Баллы
43
После клика на кнопке выполните кубик код js на странице, в котором будет return window.kakyato_peremennaya;
 
  • Спасибо
Реакции: lx2003

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