Виснит регулярка при получении страницы через GET запрос. Баг?

Регистрация
22.12.2015
Сообщения
96
Благодарностей
1
Баллы
8
Здравствуйте!

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

При работе зенопостера он просто не мог пройти дальше, как будто завис, но при этом работал... Стал смотреть в ПМ, оказалось, что шаблон не может выполнить кубик с регуляркой. Ошибок ни каких не выдает. В статусе кубика показано, что он выполняется, но при этом не может выполниться:-) Начал тестить регулярку в тестере регулярок, такая же история... Идет процесс выполнения, но не выполняется.

Такая проблема у меня появилась с сайтом plus.google.com и еще на других.

Что делает шаблон:
1. GET запросом получает содержимое страницы сайтов.
2. При помощи регулярки <head[\w\W]*head> получает содержимое тегов head
3. При помощи регулярки (?<=charset ?= ?"?)[A-Za-z0-9\-]*?(?=[ ">]) получает значение charset

Кубик с регуляркой виснит на 2 этапе.

НО! Что самое интересное:
если вместо GET запроса получить содержимое страницы через браузер при помощи "outerhtml" и положить в ту же переменную, запустить тот же кубик с регуляркой, то он выполняется быстро без зависаний.

Такая проблема была еще на нескольких сайтах. Виснит кубик с регуляркой, если содержимое страницы было получено при помощи GET запроса.

Кто сможет помочь разобраться и объяснить почему так происходит? Или это все же БАГ?

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

Шаблон.jpg


Очень хотелось бы разобраться. Заранее спасибо:-)
 

Вложения

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113
Здравствуйте!

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

При работе зенопостера он просто не мог пройти дальше, как будто завис, но при этом работал... Стал смотреть в ПМ, оказалось, что шаблон не может выполнить кубик с регуляркой. Ошибок ни каких не выдает. В статусе кубика показано, что он выполняется, но при этом не может выполниться:-) Начал тестить регулярку в тестере регулярок, такая же история... Идет процесс выполнения, но не выполняется.

Такая проблема у меня появилась с сайтом plus.google.com и еще на других.

Что делает шаблон:
1. GET запросом получает содержимое страницы сайтов.
2. При помощи регулярки <head[\w\W]*head> получает содержимое тегов head
3. При помощи регулярки (?<=charset ?= ?"?)[A-Za-z0-9\-]*?(?=[ ">]) получает значение charset

Кубик с регуляркой виснит на 2 этапе.
НО! Что самое интересное: если вместо GET запроса получить содержимое страницы через браузер при помощи "outerhtml" и положить в ту же переменную, запустить тот же кубик с регуляркой, то он выполняется быстро без зависаний.

Такая проблема была еще на нескольких сайтах. Виснит кубик с регуляркой, если содержимое страницы было получено при помощи GET запроса.

Кто сможет помочь разобраться и объяснить почему так происходит? Или это все же БАГ?

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

Посмотреть вложение 14492

Очень хотелось бы разобраться. Заранее спасибо:-)
попробовал у себя, да, тоже виснет полсле гет-запроса, в логе длинный текст ошибки по поводу какого то невыполнившегося макроса, причем приходится выходить из ПМ полностью после этого, ПМ нерабочий после этой ошибки..

кстати, в гет-запросе обязательно нужно указывать полный урл с http:// или https://
но это так, не касаемо именно этой проблемы..

PS: скорее всего проблема в том, что код отдаваемый из браузера и из гет-запроса разный, и в случае с гет-запросом в исходном коде есть какая то конструкция, по синтаксису напоминающая макрос зенки и он пытается этот макрос обработать, но не получается.. выход: предварительно нужно очистить исходный код из гет-запроса от конструкций, напоминающих макрос, типа {- что то тут -}, эти конструкции скорее всего во встроенном CSS есть..

Ну вобщем то заколдованный круг получается, при попытке очистить, та же самая ошибка будет, по поводу несуществующего макроса..
:cg:
 
Последнее редактирование:
  • Спасибо
Реакции: VladZen

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113
попробуйте этот вариант, вроде отрабатывает, не быстро, но все же, в процессе как бы зависает, но отвисает потом..
 

Вложения

Регистрация
22.12.2015
Сообщения
96
Благодарностей
1
Баллы
8
в гет-запросе обязательно нужно указывать полный урл с http:// или https://
Обязательно? А почему? Вроде и так работает без ошибок:-)

предварительно нужно очистить исходный код из гет-запроса от конструкций, напоминающих макрос, типа {- что то тут -}, эти конструкции скорее всего во встроенном CSS есть..

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

Больше тут ничего не придумать?

А можно ли сделать так: если кубик с регуляркой не выполнится в течении 10 секунд, то перейти к другому действию?

Мой шаблон постоянно об такие сайты тыкается и виснет, не знаю что делать:(
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113
Обязательно? А почему? Вроде и так работает без ошибок:-)



Запустил Ваш пример. Сработало, но очень долго выполняется...

Больше тут ничего не придумать?

А можно ли сделать так: если кубик с регуляркой не выполнится в течении 10 секунд, то перейти к другому действию?

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

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
подбирай регулярку, так иногда бывает не тот символ в регулярке и ожидание происходит
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113

rashk1n

Client
Регистрация
03.11.2015
Сообщения
20
Благодарностей
2
Баллы
3
у меня такое предупреждение выскакивает
Тип Время Сообщение
23:43:32 Выполнение макроса группа действий: поле: В базе макросов такого макроса нет: moz-animation:buttonSlideIn .2s .2s both;animation:buttonSlideIn .2s .2s both;position:relative}@keyframes buttonSlideIn{0%{left:-BUTTON_BORDER_WIDTH;opacity:0;width:0}to{left:0;opacity:1;width:34px}}.h9UQe.aKZ15{color:#fff;background-color:transparent;-moz-box-shadow:none;box-shadow:none}.h9UQe.aKZ15.RDPZE{color:#fff;background-color:transparent}.h9UQe.aKZ15.FuHVqe{color:rgba(255,255,255,0.54)}.h9UQe.aKZ15 .RveJvd{margin:0}.HJR8Ub{display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.aBTjDf.x95qze{color:#03a9f4}.zOw8kb{height:19px;width:19px}.iPjLOe{background-color:#fff;cursor:pointer;color:#6f6f6f}.IYZ3vd{bottom:114px;margin:0 auto;left:0;height:48px;width:48px;position:absolute;right:0}.IYZ3vd path{fill:currentColor}.Pjg9Lb{bottom:83px;font-size:16px;text-align:center;left:0;line-height:20px;position:absolute;right:0}.yoF6tc{margin:12px;text-align:center}sentinel{}
/*# sourceURL=/_/scs/social-static/_/ss/k=boq.PlusAppUi.pbyg2wlc42kb.L.F4.O/m=featuredcollexions,_b,_tp/am=jEkJMAiAgATAAAk/d=1/rs=AGLTcCPQBIrO2x10nwpFN2Z3BUu0uVbK4Q */</style><script nonce="O0TuKpZW5x+BZB2Q7+9rRAMDnco">onCssLoad();</script><style nonce="O0TuKpZW5x+BZB2Q7+9rRAMDnco">@font-face {
 

rashk1n

Client
Регистрация
03.11.2015
Сообщения
20
Благодарностей
2
Баллы
3
Вот c# код, работает быстро

Код:
Regex rgx = new Regex(@"<head[\w\W]*head>");
Regex rgx2 = new Regex(@"(?<=charset ?= ?""?)[A-Za-z0-9\-]*?(?=[ "">])");

string head = project.Variables["head"].Value = rgx.Match(project.Variables["dom"].Value).Value;

project.Variables["charset"].Value = rgx2.Match(head).Value.Last().ToString();
 
Регистрация
22.12.2015
Сообщения
96
Благодарностей
1
Баллы
8
Вот c# код, работает быстро

Код:
Regex rgx = new Regex(@"<head[\w\W]*head>");
Regex rgx2 = new Regex(@"(?<=charset ?= ?""?)[A-Za-z0-9\-]*?(?=[ "">])");

string head = project.Variables["head"].Value = rgx.Match(project.Variables["dom"].Value).Value;

project.Variables["charset"].Value = rgx2.Match(head).Value.Last().ToString();
А не могли бы вы помочь встроить его в шаблон? А то в C# не силен)
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 885
Баллы
113
А что его встраивать? Свой код - C# - и вставляйте в этот кубик данные, которые Вам скинули.
 
Регистрация
22.12.2015
Сообщения
96
Благодарностей
1
Баллы
8
А что его встраивать? Свой код - C# - и вставляйте в этот кубик данные, которые Вам скинули.
Протестил. Вставил после GET запроса кубик с кодом C#, отрабатывает, но почему то вторая регулярка работает плохо, т.е. вместо utf-8 она находит просто 8. Хотя если эту регулярку протестить в тестере, то находит utf-8...
 

rashk1n

Client
Регистрация
03.11.2015
Сообщения
20
Благодарностей
2
Баллы
3
Протестил. Вставил после GET запроса кубик с кодом C#, отрабатывает, но почему то вторая регулярка работает плохо, т.е. вместо utf-8 она находит просто 8. Хотя если эту регулярку протестить в тестере, то находит utf-8...
вот так будет выходить utf-8

Код:
Regex rgx = new Regex(@"<head[\w\W]*head>");
Regex rgx2 = new Regex(@"(?<=charset ?= ?""?)[A-Za-z0-9\-]*?(?=[ "">])");
string head = project.Variables["head"].Value = rgx.Match(project.Variables["dom"].Value).Value;
project.Variables["charset"].Value = rgx2.Match(head).Value;
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 714
Баллы
113
Регистрация
22.12.2015
Сообщения
96
Благодарностей
1
Баллы
8
Последнее редактирование:

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