Редактирование кода



  • Добрый вечер! Перед открытием нового топика перечитал все подобные темы на форуме, но так и не смог разобраться.
    Суть такова - требуется поменять код текущей страницы. Последовательность действий:

    1. Открываю заранее подготовленную страницу html, сохраняю ее код в переменную [[SHABLON_HTML]]
    2. Захожу на сайт, где нужно этот шаблон вставить.
    3. Выбираю поле для ввода, сохраняю его код в переменную [[POLE_VVODA]]. Код имеет следующий вид:
    <div id=":aq" ...(еще много атрибутов)... spellcheck="false"><br></div>
    

    Требуется вместо тега <br> вставить ранее сохраненный шаблон [[SHABLON_HTML]]
    Делаю это следующим образом:
    В переменной [[POLE_VVODA]] путем замены строки заменяю тег <br> на значение переменной [[SHABLON_HTML]]. В итоге получается:

    <div id=":aq" ...(еще много атрибутов)... spellcheck="false"><html>...</html></div>
    

    Результат сохраняется в переменную [[REPLACE_RESULT]].
    Теперь пытаюсь текущий код элемента (поле ввода) заменить на отредактированный код [[REPLACE_RESULT]].
    Делаю это через выполнить javascript для элемента:

    self.innerHTML([[REPLACE_RESULT]])
    

    Но, к сожалению, это не работает. Подскажите рабочий способ, пожалуйста. Вставка шаблона через буфер обмена не подходит, так как предполагается многопоточная работа



  • @Alstellar said in Редактирование кода:

    Добрый вечер! Перед открытием нового топика перечитал все подобные темы на форуме, но так и не смог разобраться.
    Суть такова - требуется поменять код текущей страницы. Последовательность действий:

    1. Открываю заранее подготовленную страницу html, сохраняю ее код в переменную [[SHABLON_HTML]]
    2. Захожу на сайт, где нужно этот шаблон вставить.
    3. Выбираю поле для ввода, сохраняю его код в переменную [[POLE_VVODA]]. Код имеет следующий вид:
    <div id=":aq" ...(еще много атрибутов)... spellcheck="false"><br></div>
    

    Требуется вместо тега <br> вставить ранее сохраненный шаблон [[SHABLON_HTML]]
    Делаю это следующим образом:
    В переменной [[POLE_VVODA]] путем замены строки заменяю тег <br> на значение переменной [[SHABLON_HTML]]. В итоге получается:

    <div id=":aq" ...(еще много атрибутов)... spellcheck="false"><html>...</html></div>
    

    Результат сохраняется в переменную [[REPLACE_RESULT]].
    Теперь пытаюсь текущий код элемента (поле ввода) заменить на отредактированный код [[REPLACE_RESULT]].
    Делаю это через выполнить javascript для элемента:

    self.innerHTML([[REPLACE_RESULT]])
    

    Но, к сожалению, это не работает. Подскажите рабочий способ, пожалуйста. Вставка шаблона через буфер обмена не подходит, так как предполагается многопоточная работа

    https://www.google.com/search?q=site%3Ahttps%3A%2F%2Fcommunity.bablosoft.com+innerHTML

    Первая же ссылка ведёт на тему с примером

    https://community.bablosoft.com/topic/10992/не-вставляет-текст-self-innerhtml/2



  • @Fox , было бы все так просто, этой темы здесь не было бы. Аналогично с указанным тобою постом, заменить на обычный текст получается, на переменную с шаблоном html - нет. в моем случае шаблон html - это прямо целый одностраничник практически.

    Через ввод его вставить тоже не получается, кстати. Если убрать эмуляцию мыши, то вообще ничего не происходит, а если включить эмуляцию и поставить интервал ввода 0, то это занимает слишком много времени, так как кусок кода довольно большой, и скрипт стопается с ошибкой



  • @Fox все же почти получилось победить. там действительно нужно пропустить код через компрессор. однако, почему-то с помощью экшена выполнить код не получается заменить все ненужные пробелы...
    было:

    ...</tbody></table></td> </tr> </tbody></table> </div> </body></html>
    

    стало:

    </tbody></table></td></tr></tbody></table></div> </body></html>
    

    в некоторых местах почему-то пробел не удалился, что мешает корректной замене кода на странице.
    Выполнял замену таким образом:

    [[SHABLON_PAGE_HTML_REPLACE]]=[[SHABLON_PAGE_HTML]].replace(/\"\n"/g,"");
    [[SHABLON_PAGE_HTML_REPLACE]]=[[SHABLON_PAGE_HTML_REPLACE]].replace(/\"\t"/g,"");
    [[SHABLON_PAGE_HTML_REPLACE]]=[[SHABLON_PAGE_HTML_REPLACE]].replace(/\> </g,"><");
    [[SHABLON_PAGE_HTML_REPLACE]]=[[SHABLON_PAGE_HTML_REPLACE]].replace(/\>&nbsp;</g,"><");
    [[SHABLON_PAGE_HTML_REPLACE]]=[[SHABLON_PAGE_HTML_REPLACE]].replace(/"/g,'\\"');
    

    Может есть способ более надежный, не подскажешь?



  • @Alstellar said in Редактирование кода:

    @Fox все же почти получилось победить. там действительно нужно пропустить код через компрессор. однако, почему-то с помощью экшена выполнить код не получается заменить все ненужные пробелы...
    было:

    ...</tbody></table></td> </tr> </tbody></table> </div> </body></html>
    

    стало:

    </tbody></table></td></tr></tbody></table></div> </body></html>
    

    в некоторых местах почему-то пробел не удалился, что мешает корректной замене кода на странице.
    Выполнял замену таким образом:

    [[SHABLON_PAGE_HTML_REPLACE]]=[[SHABLON_PAGE_HTML]].replace(/\"\n"/g,"");
    [[SHABLON_PAGE_HTML_REPLACE]]=[[SHABLON_PAGE_HTML_REPLACE]].replace(/\"\t"/g,"");
    [[SHABLON_PAGE_HTML_REPLACE]]=[[SHABLON_PAGE_HTML_REPLACE]].replace(/\> </g,"><");
    [[SHABLON_PAGE_HTML_REPLACE]]=[[SHABLON_PAGE_HTML_REPLACE]].replace(/\>&nbsp;</g,"><");
    [[SHABLON_PAGE_HTML_REPLACE]]=[[SHABLON_PAGE_HTML_REPLACE]].replace(/"/g,'\\"');
    

    Может есть способ более надежный, не подскажешь?

    Должна сработать простая регулярка

    \s+
    

    проще всего использовать модуль "регулярные выражения", действие "Заменить строку"

    50859fdb-fae8-4af8-9a49-26c4be8597bc-изображение.png

    Тестовый скрипт



  • @Fox совет с регулярками сработал, спасибо, с помощью них подогнал код 1в1 с тем, что получается после компрессии. Возникла другая проблема теперь - в скрипте так и не выполняется замена кода. Однако, если я получившийся после преобразований код выведу в лог, скопирую его оттуда и вставлю в переменную - в таком случае замена срабатывает. Не понимаю, из-за чего подобное может быть



  • @Alstellar said in Редактирование кода:

    @Fox совет с регулярками сработал, спасибо, с помощью них подогнал код 1в1 с тем, что получается после компрессии. Возникла другая проблема теперь - в скрипте так и не выполняется замена кода. Однако, если я получившийся после преобразований код выведу в лог, скопирую его оттуда и вставлю в переменную - в таком случае замена срабатывает. Не понимаю, из-за чего подобное может быть

    Скорее всего в переменной у вас массив, а регулряные выражения работают со строками



  • @Fox а как можно этот массив в одну строку объединить? совсем голова под вечер не соображает... экшен Объединить в строку не работает



  • @Fox просто даже разница в том, что если я копирую код с онлайн компрессора руками - в текстовый файл сохраняется одной строкой код...если все тоже самое делаю в басе - сохраняется многострочный код

    P.S. просто удалил "переносы" строк и всё заработало =)



  • @Alstellar said in Редактирование кода:

    P.S. просто удалил "переносы" строк и всё заработало =)

    На будущее, проще всего помочь решить проблему будет если вы приложите тестовый скрипт. Это избавит других пользователей от необходимости гадать



  • @Fox понимаю, что так проще, но данная часть скрипта доступна лишь после авторизации и ещё пары манипуляций, завязанных на предыдущих данных... Не представлялось возможным выделить лишь необходимую часть скрипта и кода сайта



  • @Alstellar said in Редактирование кода:

    @Fox понимаю, что так проще, но данная часть скрипта доступна лишь после авторизации и ещё пары манипуляций, завязанных на предыдущих данных... Не представлялось возможным выделить лишь необходимую часть скрипта и кода сайта

    Ну вы столкнулись с проблемой замены текста, тестовый скрипт можно было сделать просто сохранив код страницы и описав, что вы хотите из него получить



  • @Fox добрый вечер!
    К сожалению, моя старая проблема вернулась и на этот раз все мои костыли здесь бессильны... Помоги, пожалуйста.

    Суть такая - необходимо вставить html-шаблон в поле ввода. Полный код шаблона задаю переменной в одну строку - выполнение js на элементе поля ввода просто молча ничего не делает. Если я копирую значение заданной переменной с кодом, полезу в код руками прямо на той же странице и вставлю его - все работает.

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

    Пример скрипта прилагаю (нужна гугл почта)
    Тест_шаблон.xml


Log in to reply