Объекты среды выполнения
Регистр
Регистр - это условная переменная, которая неявно передается в команду и изменяется этой командой. На примере ниже можно проследить как меняется содержимое регистра в зависимости от шага итерации.
К примеру, мы имеем следующий HTML код на странице:
<ul>
<li>Какой-то текст</li>
<li>Еще какой-то текста</li>
<li>А теперь еще больше текста</li>
</ul>
Если мы будем искать элементы страницы используя путь ul > li, команда Find найдет 3 блока и будет итерировать по ним начиная с первого:
- find:
path: ul > li
do:
- parse
# СЕЙЧАС МЫ НАХОДИМСЯ В ПЕРВОМ LI
- parse
# В РЕГИСТРЕ БУДЕТ ЗНАЧЕНИЕ "Какой-то текст"
# ТЕПЕРЬ МЫ НАХОДИМСЯ ВО ВТОРОМ LI
- parse
# В РЕГИСТРЕ БУДЕТ ЗНАЧЕНИЕ "Еще какой-то текст"
# И НАКОНЕЦ В ТРЕТЬЕМ LI
- parse
# В РЕГИСТРЕ БУДЕТ ЗНАЧЕНИЕ "А теперь еще больше текста"
Теперь попробуем сделать небольшой диггер и на его примере посмотрим что у нас получится в логе отладки.
---
config:
agent: Firefox
debug: 2
do:
- walk:
to: https://www.diggernaut.com/sandbox/meta-lang-register-ru.html
do:
- find:
path: ul > li
do:
- parse
Запустим диггер предварительно переведя его в режим Отладка и после выполнения заглянем в лог.
Значения регистра блока выделены зеленым цветом.
Последовательность исполенения сценария диггера показана оранжевой стрелкой.
Обратите внимание на пять основных моментов о регистре:
- Это сущность хранящая какие-либо данные в контексте блока
- Практически все команды блокового контекста в качестве исходных данных для своей работы принимают текущее значение регистра
- Практически все команды блокового контекста возвращают результат своей работы в регистр
- Регистр контекстно-зависим, поэтому при заходе в новый блок регистр инициализируется пустым значением
- Во время итераций по блокам, в момент захода в каждый из блоков регистр инициализируется пустым значением