Сниппет вставки из буфера обмена для ZennoPoster (многопоточный, с блокировками) [Дон шампиньон]

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
Иногда при постинге на чьём-то WEB 2.0 ресурсе возникает такая хрень, что поставлен какой-то хитрый кастомный WYSIWYG-редактор, в который не так то просто запихать текст, а эмуляция клавиатуры работает так долго, что ну просто не приемлемо (или просто нет желания её использовать).
Именно в такой ситуации спасает копирование текста в буфер обмена Windows, а затем вставка его в нужное поле с помощью ZennoPoster. Но при работе с буфером обмена не стоит забывать о важной особенности: буфер один, а потоков - много. Поэтому не редки ситуации, когда в нескольких потоках может вставиться один и тот же текст.

Чтобы решить эту задачу и не прострелить себе ногу - следует использовать C#-сниппет:
Код:
lock(SyncObjects.InputSyncer) // блокировка
{
    var descr = project.Variables["content"].Value;

    // сохраняем предыдущее состояние буфера
    String previous_text = null;
    previous_text = System.Windows.Forms.Clipboard.GetText();

    // сохраняем нужный текст в буфер и вставляем его (программно делаем CTRL+V)
    System.Windows.Forms.Clipboard.SetText(descr);
    instance.ActiveTab.KeyEvent("v","press","ctrl");

    // стираем буфер и возвращаем его к первоначальному состоянию
    System.Windows.Forms.Clipboard.Clear();
    System.Windows.Forms.Clipboard.SetText(previous_text);
}
Для работы этого кода нужно предварительно установить курсор (через эмуляцию клика мыши) в нужное поле. В следующий раз выложу сниппет для поиска элемента и клика мышью внутри него (если нужно?).
В данном коде нужно поменять переменную content на свою - в ней находится ваш текст для вставки.
 
Последнее редактирование:

ikibostus

Client
Регистрация
27.09.2015
Сообщения
256
Благодарностей
26
Баллы
28

lzlmrf

Client
Регистрация
14.08.2015
Сообщения
488
Благодарностей
149
Баллы
43
  • Спасибо
Реакции: Сибиряк и GHU

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
  • Спасибо
Реакции: ikibostus

ParfeniyAnton

Client
Регистрация
24.08.2014
Сообщения
300
Благодарностей
49
Баллы
28
Почему может возникать такая ошибка? http://skrinshoter.ru/s/221216/Pxedhb
У меня тоже такая ошибка возникает периодически. Шаблон - рассыльщик сообщений. Этим сниппетом вставляю текст в диалоговое окно. Бывает что шаб отправит 10 сообщений до возникновения этой ошибки, а бывает что 90 сообщений отправляет без ошибок, а потом такой же косяк. Это может быть связано с буфером обменом windows? Я имею ввиду с тем буфером обменом, которым я пользуюсь в обычной жизни паралельно с выполнением шаблона.
 

GHU

Client
Регистрация
31.12.2012
Сообщения
53
Благодарностей
6
Баллы
8

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
Самый простой и на 99% работающий вариант - это кликнуть вот так:
C#:
HtmlElement he = instance.ActiveTab.FindElementById("text"); // идентификатор text нужно заменить на свой, на тот id, по которому нужно кликнуть
he.Click();
 

ParfeniyAnton

Client
Регистрация
24.08.2014
Сообщения
300
Благодарностей
49
Баллы
28
Самый простой и на 99% работающий вариант - это кликнуть вот так:
C#:
HtmlElement he = instance.ActiveTab.FindElementById("text"); // идентификатор text нужно заменить на свой, на тот id, по которому нужно кликнуть
he.Click();
Можете дать какие-то комментарии по поводу это ошибки?
Иногда шаб выполняется полностью без неё, иногда вылазит эта ошибка.
 

ParfeniyAnton

Client
Регистрация
24.08.2014
Сообщения
300
Благодарностей
49
Баллы
28
Обратил внимание, что если в буфере обмена нет ничего, то код 100% выдаёт ошибку: по всей видимости во время сохранения изначального состояния буфера обмена.
Если в буфере обмена лежит не текст, а картинка, то так же в 100% тестов выдаёт ошибку.
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 777
Благодарностей
1 447
Баллы
113
Обратил внимание, что если в буфере обмена нет ничего, то код 100% выдаёт ошибку: по всей видимости во время сохранения изначального состояния буфера обмена.
Если в буфере обмена лежит не текст, а картинка, то так же в 100% тестов выдаёт ошибку.
Да нечего сложно нету, вам предоставили готовый вариант, даже закоментировали, например у вас на странице нужно нажать регистрация, вот и пишите вместо text слово регистрация и будет работать.
  1. HtmlElement he = instance.ActiveTab.FindElementById("text"); // идентификатор text нужно заменить на свой, на тот id, по которому нужно кликнуть
  2. he.Click();
 
  • Спасибо
Реакции: booldozer

ParfeniyAnton

Client
Регистрация
24.08.2014
Сообщения
300
Благодарностей
49
Баллы
28
Да нечего сложно нету, вам предоставили готовый вариант, даже закоментировали, например у вас на странице нужно нажать регистрация, вот и пишите вместо text слово регистрация и будет работать.
  1. HtmlElement he = instance.ActiveTab.FindElementById("text"); // идентификатор text нужно заменить на свой, на тот id, по которому нужно кликнуть
  2. he.Click();
Извиняюсь. Я перепутал во время ответа код.
Я говорил об ошибках кода, который работает с буфером обмена.
 

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
Либо можно использовать
Код:
var a = instance.ActiveTab.FindElementByAttribute("a", "innertext", "Rental\\ Apartment\\ Bedroom\\ Ideas\\ Collection\\ Living\\ Room\\ Interior\\ Design", "regexp", 0); // тут атрибуты поиска
a.RiseEvent("click", "full"); // собственно клик по элементу
 

lzlmrf

Client
Регистрация
14.08.2015
Сообщения
488
Благодарностей
149
Баллы
43
Этот? да ) я про него и хотел написать. перепутал тему. Но код вроде же один с тем постом.
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
Этот? да ) я про него и хотел написать. перепутал тему. Но код вроде же один с тем постом.
Ага, этот. Я его сколько юзал в многопотоке - ни разу траблов не было если что
 

lzlmrf

Client
Регистрация
14.08.2015
Сообщения
488
Благодарностей
149
Баллы
43
незнаю в чем дело.. На разных компах с разной виндой и разной версией зенки - тупит макрос..Как вообще может быть так что кубик выходит по красной? При запуске в 5 потоков - парочка зависает в том месте где идет постинг..вставки нет а шаб как бы встал на этом кубике. и может висеть хоть до посинения. Инстанс открыт, все подгрузки браузера итд завершены, фокус в поле куда надо постить..
Думал из за вин10 такое..но нет и на вин 7 также .
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
незнаю в чем дело.. На разных компах с разной виндой и разной версией зенки - тупит макрос..Как вообще может быть так что кубик выходит по красной? При запуске в 5 потоков - парочка зависает в том месте где идет постинг..вставки нет а шаб как бы встал на этом кубике. и может висеть хоть до посинения. Инстанс открыт, все подгрузки браузера итд завершены, фокус в поле куда надо постить..
Думал из за вин10 такое..но нет и на вин 7 также .
Если кубик висит (а не выходит по красной), то значит он как раз ожидает разлочивания. А почему в каком-то из шаблонов залочилось и не делает "release" - тут уже не известно. Может ты в другом месте также лочишь и там дольше выполняется. А может текст слишком большой и очень долго вставляет (маловероятно). Может зенка "взглюкнула" или версия с багом (но не встречал такого).
Вообщем, ситуаций много может быть. Поэтому наверняка в чем дело - не скажет никто.
 

lzlmrf

Client
Регистрация
14.08.2015
Сообщения
488
Благодарностей
149
Баллы
43
[/QUOTE]
такая же ошибка. Не всегда, но возникает. При этом текст в поле ввода вставляется. Имя параметра - это не переменная и не значение.
Что это такое вообще?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
такая же ошибка. Не всегда, но возникает. При этом текст в поле ввода вставляется. Имя параметра - это не переменная и не значение.
Что это такое вообще?
Вроде как решили вопрос в скайпе. Вот такой код не бажит: https://pastebin.com/4JS2WxWn
Судя по всему - там в какой-то момент пустой NULL в буфер попадало (откуда - не знаю).
 
  • Спасибо
Реакции: Devostator, izubr и lzlmrf

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Столкнулся с такой же проблемой, подвисанием сниппета, что описана выше.
Вроде как решили вопрос в скайпе. Вот такой код не бажит: https://pastebin.com/4JS2WxWn
Судя по всему - там в какой-то момент пустой NULL в буфер попадало (откуда - не знаю).
Попробовал этот вариант, с первого раза почему то не вставляет данные, только со второго.

Странно, что это все началось сегодня. А было все нормально со сниппетом из первого поста.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Такое ощущение что что то лочит кобинацию Ctrl+V. В многоптоке (ZP) точно в лочит и ловиться клин а вот что мешает в одном потоке в PM не понять.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
В общем для себя сделал решение проблемы следующим образом. Зацикливаем работу снипета на ошибке пока не выполниться и делаем произвольную паузу что бы снизить совпадение с параллельными потоками. Правда на это тратится время работы потока. :(

Визуально это выглядит примерно так:

upload_2017-6-15_11-41-54.png
 
Последнее редактирование:

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
@one, а можешь сделать простой тестовый проект для проверки в многопотоке (без зацикливания)? Если бага есть - можно будет скинуть в тикетах, когда сниппет публиковался - баг точно не было, я сам его долгое время юзал, пока рес не приговорил к бану в гугле )
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Сделал тест, без циклов. Шаблон во вложении. В РМ, при отладки, не всегда сниппет (последняя версия) отрабатывает корректно. В ZP, в многопоток, в обще ужас. Баг зенки? Такую проблему наблюдаю на двух последних версиях.

upload_2017-6-15_18-13-55.png
 

Вложения

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
Сделал тест, без циклов. Шаблон во вложении. В РМ, при отладки, не всегда сниппет (последняя версия) отрабатывает корректно. В ZP, в многопоток, в обще ужас. Баг зенки? Такую проблему наблюдаю на двух последних версиях.
Очень странно, проверил 2 раза: когда другие шаблоны выполнялись и когда вообще пустая зенка была - всё ок:






PS: ZP 5.10.3.0
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Хммм... Может есть тут кто из обладателей версий 5.11.2.0 и 5.11.3.0 проверить этот же шаблон?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
Хммм... Может есть тут кто из обладателей версий 5.11.2.0 и 5.11.3.0 проверить этот же шаблон?



Единственное что я не понимаю в 5.11.2.0 - там не могут потоки разогнаться, больше этого количества в одном шаблоне не успевает запуститься. В ZP 5.11.3.0 на тех же настройках всё ок.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
На последних версиях зенки тоже все норм? Блин, у меня какая то карма не человеческая. Что делать, куда идти...
 

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Знать бы как правильно, сходил бы.
 

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