Объекты среды выполнения

Регистр

Регистр - это условная переменная, которая неявно передается в команду и изменяется этой командой. На примере ниже можно проследить как меняется содержимое регистра в зависимости от шага итерации.

К примеру, мы имеем следующий 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
          

Запустим диггер предварительно переведя его в режим Отладка и после выполнения заглянем в лог.

Значения регистра блока выделены зеленым цветом.
Последовательность исполенения сценария диггера показана оранжевой стрелкой.

Обратите внимание на пять основных моментов о регистре:

  1. Это сущность хранящая какие-либо данные в контексте блока
  2. Практически все команды блокового контекста в качестве исходных данных для своей работы принимают текущее значение регистра
  3. Практически все команды блокового контекста возвращают результат своей работы в регистр
  4. Регистр контекстно-зависим, поэтому при заходе в новый блок регистр инициализируется пустым значением
  5. Во время итераций по блокам, в момент захода в каждый из блоков регистр инициализируется пустым значением