- Регистрация
- 24.08.2013
- Сообщения
- 1 144
- Реакции
- 662
- Баллы
- 113
Вставка текста/кода мгновенно в поле формы (на сайте)
Стандартные методы автозаполнения часто вводят текст посимвольно с задержкой.
Этот способ мгновенно вставляет в поле содержимое из переменной .
Особенность:
Скрипт использует собственный внутренний буфер (в instance zennoposter), не затрагивая системный буфер обмена Windows
Это позволяет запускать шаблон Zennoposter многопоточно, без опасения что данные смогут пересекаться.
Как это работает:
1. Помещаете нужный текст (любого объёма) в переменную.
2. Кликаете например по полю textarea или input на сайте (в коде `Шаг 2` можно указать свой xpath формы для клика)
3. Содержимое переменной вставляется сразу целиком.
4. Поддерживается переход строки (если текст большой то ничего не слипается в одну сплошную строку)
Используйте для кубика C#
п.с. Получаем буфер обмена в броузере (внутри instance) - Ранее предложен мною был безопасный вариант получения буфер обмена
Стандартные методы автозаполнения часто вводят текст посимвольно с задержкой.
Этот способ мгновенно вставляет в поле содержимое из переменной .
Особенность:
Скрипт использует собственный внутренний буфер (в instance zennoposter), не затрагивая системный буфер обмена Windows
Это позволяет запускать шаблон Zennoposter многопоточно, без опасения что данные смогут пересекаться.
Как это работает:
1. Помещаете нужный текст (любого объёма) в переменную.
2. Кликаете например по полю textarea или input на сайте (в коде `Шаг 2` можно указать свой xpath формы для клика)
3. Содержимое переменной вставляется сразу целиком.
4. Поддерживается переход строки (если текст большой то ничего не слипается в одну сплошную строку)
Используйте для кубика C#
C#:
string sendi = project.Variables["input"].Value;
string escaped = sendi
.Replace("\\", "\\\\")
.Replace("'", "\\'")
.Replace("\r\n", "\\n")
.Replace("\n", "\\n")
.Replace("\r", "\\n");
// Шаг 1: Кладём текст в псевдобуфер браузера и вешаем перехватчик paste
string jsSetup = $@"
window._zpPasteText = '{escaped}';
if (!window._zpPasteHooked) {{
window._zpPasteHooked = true;
document.addEventListener('paste', function(e) {{
if (!window._zpPasteText) return;
e.preventDefault();
e.stopImmediatePropagation();
var text = window._zpPasteText;
var el = document.activeElement;
if (!el) return;
// Попытка через execCommand
var ok = document.execCommand('insertText', false, text);
if (!ok) {{
var s = el.selectionStart != null ? el.selectionStart : el.value.length;
var en = el.selectionEnd != null ? el.selectionEnd : el.value.length;
el.value = el.value.substring(0, s) + text + el.value.substring(en);
el.selectionStart = el.selectionEnd = s + text.length;
el.dispatchEvent(new Event('input', {{ bubbles: true }}));
el.dispatchEvent(new Event('change', {{ bubbles: true }}));
}}
window._zpPasteText = '';
}}, true);
}}
";
instance.ActiveTab.MainDocument.EvaluateScript(jsSetup);
// Шаг 2: Фокусируемся на элементе (если нужно — найти по XPath и кликнуть).
// Этот `Шаг 2` можете закомментировать, если используете свой кубик (focus или click) перед этим кубиком.
instance.ActiveTab.MainDocument.FindElementByXPath("//textarea[@rows='1' and contains(@class,'message-input-textarea')]", 0).Click();
// Шаг 3: Имитируем Ctrl+V через KeyEvent — браузер перехватит paste-handler выше
string jsFirePaste = @"
(function() {
var el = document.activeElement;
if (!el) return 'no_focus';
el.focus();
var e = new KeyboardEvent('keydown', {
key: 'v', code: 'KeyV',
ctrlKey: true, bubbles: true, cancelable: true
});
el.dispatchEvent(e);
// Дополнительно диспатчим paste напрямую
var dt = new DataTransfer();
dt.setData('text/plain', window._zpPasteText || '');
var pe = new ClipboardEvent('paste', {
bubbles: true, cancelable: true, clipboardData: dt
});
el.dispatchEvent(pe);
return 'fired';
})();
";
string result = instance.ActiveTab.MainDocument.EvaluateScript(jsFirePaste);
project.SendInfoToLog($"Вставка: {result}", false);
п.с. Получаем буфер обмена в броузере (внутри instance) - Ранее предложен мною был безопасный вариант получения буфер обмена



