Как начать цикл по невидимым на странице объектам?

Поддержка
  • @fox said in Как начать цикл по невидимым на странице объектам?:

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

    BAS не открывает: ошибка загрузки файла start tag expected

    Нажал кнопку перезагрузить скрипт - весь проект в БАСе полностью обнулился. И в папке backups все проекты пустые. Глючит софтина!

  • @senerg

    Глючит софтина!

    В 99% случаев глючит софтина из за кривых рук самих пользователей. Ты как сохраняешь проект то?

    Надо вот так:
    0_1537816910522_на форум38.gif

  • @fox Я мышкой ссылку на рабочий стол перетянул, зашел в БАС и нажал открыть.
    Сохранить объект у меня нету(
    0_1537817173651_2.png

  • @senerg

    Я мышкой ссылку на рабочий стол перетянул, зашел в БАС и нажал открыть.

    Это что то новенькое.. У меня при таких же манипуляциях создаётся ярлык на ссылку
    0_1537817528265_202ac56e-bbe5-485f-b072-d8b868682028-изображение.png


    Судя по всему браузер у тебя Google Chrome, скрипт в нём сохранить можно так:
    0_1537817596137_на форум39.gif

  • @fox Точно, я не посмотрел что ссылка сохранилась, а не xml. Но весь проект у меня похерился точно не из-за этого: нажал перезапустить скрипт и все, в списке ни одного действия. И в бэкапах все сохраненки пустые, свои косяки я признаю, но это явно баг.

  • @fox Твой скрипт берет лишний урл (самый последний). Чтобы выделить только нужные ссылки я пробовал поменять регулярку на вот эту. Почему она в БАС не работает, выдает пустой список?

    0_1537820432539_2.png

    0_1537820577450_3.png

  • @senerg

    Твой скрипт берет лишний урл (самый последний)

    Интересно, а я как должен был определить какие урлы нужные, а какие не нужные?

  • @senerg попробуйте перед знаком "]" поставить знак "\"

  • @fox Я без претензий, в любом случае спасибо. Просто тут чуть сложнее. Урлы выделены в красную рамочку на картинке в первом посте в этой теме.

    "([[\s\S]*]/gmi)"
    "([[\s\S]*])"
    "([[\s\S]*?])"
    

    Эти варианты тоже выдают пустой список. Я думал после этой регулярки применить вторую и получить что хочу, но почему-то и первая не работает.

    "((http)(.*)(?=")/gmi)"
    
  • @senerg Тогда в два этапа:
    0_1537823261384_f709f04b-c1b8-427b-ae51-1278f2580985-изображение.png

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

  • @fox После выполнения скрипта шрифт размытый стал, сложно разобрать что написано. И иконки смазанные. Первый раз такое вижу.0_1537824192058_2.png

  • @senerg
    :D
    У тебя зрения упало)) Ну серьезно, по каждому чиху беспокоить сапорта, ну перезагрузи прогу - делов то :D

  • @fox
    У меня после твоего кода рука онемела, появилась аллергия на цитрусовые, что делать? :D

  • @olegtut

    У меня после твоего кода рука онемела, появилась аллергия на цитрусовые, что делать? :D

    Бегом курить кальян на святой воде! :D

  • @olegtut said in Как начать цикл по невидимым на странице объектам?:

    по каждому чиху беспокоить сапорта, ну перезагрузи прогу

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

    Мне казалось, что автор этой реально полезной проги заинтересован сделать ее лучше. По крайней мере так написано. Если о багах разработчику знать не интересно и бесплатный QA не нужен я могу о них не писать.
    0_1537879877835_ec169bd9-367e-416a-8b44-7c028209cc00-image.png

    @fox, спасибо. Стало на много понятнее. Можете прояснить еще несколько вопросов чтобы логику до конца понять:

    • Есть какая-то особенность, которая не позволяет извлечь одно совпадение с помощью "извлечь все данные"

    • Поддерживается или нет

    /gmi
    
    • Круглые скобки здесь обязательны
    [([\s\S]*?)]
    
    • Почему во втором запросе не работает выделение до закрывающей кавычки
    (http)(.*?)(?=")
    

    0_1537886220901_506ba952-f02d-44bf-bea6-74294de4e2a3-image.png

  • @senerg said in Как начать цикл по невидимым на странице объектам?:

    Мне казалось, что автор этой реально полезной проги заинтересован сделать ее лучше. По крайней мере так написано. Если о багах разработчику знать не интересно и бесплатный QA не нужен я могу о них не писать.

    А где вы сообщаете о ошибках?
    https://community.bablosoft.com/topic/2706/как-правильно-сообщить-об-ошибке


    Есть какая-то особенность, которая не позволяет извлечь одно совпадение с помощью "извлечь все данные"

    Действие "извлечь все данные" возвращает массив

    Поддерживается или нет /gmi

    В стандартных действиях BAS нет. Но они поддерживаются в действии "выполнить код", где можно создать свой RegExp.

    Круглые скобки здесь обязательны [([\s\S]*?)]

    Круглые скобки сообщают о группе. Здесь само выражение неправильное, квадратные скобки это диапазон, [([\s\S] поиск символов открывающейся круглой скобки, открывающейся квадратной скобки, пробельного символа и не пробельного символа.

    Почему во втором запросе не работает выделение до закрывающей кавычки

    Что означает фраза "во втором запросе"?

  • @fox said in Как начать цикл по невидимым на странице объектам?:

    Здесь само выражение неправильное

    Я не то вставил, хотел вставить вот это из вашего скрипта:

    [([\s\S]*?)]
    

    Раз группы не используются значит круглые скобки для первого запроса не обязательны, правильно?
    Первый и второй запросы:
    0_1537896407639_8377ff2c-abf8-4fa9-ba5f-9198e56d8a98-image.png

    Почему во втором запросе не работает выделение до закрывающей кавычки?

    (http)(.*?)(?=")
    
  • @senerg

    Я не то вставил, хотел вставить вот это из вашего скрипта: [([\s\S]*?)]

    У меня не такое выражение, присмотритесь, я экранировал внешние квадратные скобки.

    Раз группы не используются значит круглые скобки для первого запроса не обязательны, правильно?

    Почему группы не используются? оО

    Почему во втором запросе не работает выделение до закрывающей кавычки? (http)(.*?)(?=")

    Давай разберёмся что делает эта регулярка, ищем данные первой группы http, затем вторая группа это любой символ 0 и более раз, не жадные, третья группа это вперёд смотрящее утверждение. Ума не приложу зачем нужны три группы и утверждение..


    Погоди, ты спрашиваешь почему твоя регулярка не работает, а моя работает? Убери утверждение в третьей группе

    (http)(.*?)"
    
  • @fox said in Как начать цикл по невидимым на странице объектам?:

    У меня не такое выражение, присмотритесь, я экранировал внешние квадратные скобки.

    Вопрос был лишь в том обязательно ли любые символы отделять от экранированных квадратных скобок круглыми? Вот скрин из вашего скрипта:
    0_1537897426847_a612b7da-9ac0-4852-a67b-0d22a160e356-image.png

    Что делает регулярка:
    0_1537897603416_3600393d-eb5d-4ead-ab48-c8144769140d-image.png

    Смотрящее вперед утверждение в БАС разве не работает? А если там вместо jpg появится png я тоже его хочу скачать.

  • @senerg

    обязательно ли любые символы отделять от экранированных квадратных скобок круглыми?

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

    А если там вместо jpg появится png я тоже его хочу скачать.

    Я первым сообщением в этой теме скинул регулярку

    "(http.*?)"
    

    Смотрящее вперед утверждение в БАС разве не работает?

    А что по вашему означает "смотрящее вперед утверждение"?


    Утверждения

    Утверждение – это проверка символов, следующих до или после текущего символа. Простейшие утверждения закодированы последовательностями \A, \Z, ^, $ и т.д. Более сложные утверждения кодируются с помощью подшаблонов. Постараемся вкратце описать, как это делается.

    Существует два типа утверждений: те, что смотрят на текущую позицию в исходной строке ( "смотрящие вперед" ), и те, что смотрят на символы перед текущей позицией ( "смотрящие назад" ).

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

    "Смотрящие вперед" утверждения ищут совпадения в строке за текущей позицией поиска и начинаются с (?= для позитивных утверждений и с (?! для негативных. Например,

    \w+(?=;)

    совпадает со словом, заканчивающимся точкой с запятой (не включая точку с запятой в результат поиска), и

    foo(?!bar)

    совпадает с любым появлением foo, после которого нет bar.