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

Счетчики

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

Несколько основных моментов о счетчиках:

  1. Команды счетчиков могут быть использованы только в блоковом контексте.
  2. Счетчики существуют во всех контекстах и контекстно-независимы.
  3. Счетчики работают только с целыми числами.
  4. Могут быть использованы для подстановки данных, как переменные и аргументы.

Пример использования счетчиков:

              ---
config:
    debug: 2
    agent: Firefox
do:
- walk:
    to: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html
    do:
    # регистрируем счетчик с именем `page` и значением равным 1
    - counter_set:
        name: page
        value: 1
    - walk:
        repeat: 'yes'
        to: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html?to=<%page%>
        do:
        - find:
            path: body
            do:
            # увеличиваем значение счетчика `page` (на 1 по умолчанию)
            - counter_increment:
                name: page
            # читаем значение счетчика
            - counter_get: page
            # если значение счетчика будет равно 3, завершаем выполнение диггера
            - if:
                match: 3
                do:
                - exit
              
Время Уровень Сообщение
2017-10-21 20:24:52:954 info Stopped by exit command
2017-10-21 20:24:52:946 debug True
2017-10-21 20:24:52:940 debug Matching register value with: 3
2017-10-21 20:24:52:933 debug Set register to counter's page value: 3
2017-10-21 20:24:52:926 debug Counter page has been incremented to: 3
2017-10-21 20:24:52:918 debug Block content:  <h1>Заголовок-1</h1>
<p>Пример описания чего-то там.</p>
2017-10-21 20:24:52:910 debug Number of found blocks: 1
2017-10-21 20:24:52:902 debug Looking for: body
2017-10-21 20:24:52:890 debug Page content: <html lang="ru">
<head>
<meta charset="UTF-8"/>
<title>Diggernaut | Мета-язык | Пример объекта</title>
</head>
<body>
<h1>Заголовок-1</h1>
<p>Пример описания чего-то там.</p>
</body>
</html>
2017-10-21 20:24:52:865 debug Referers: Referer: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html
2017-10-21 20:24:52:858 debug Referer: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html
2017-10-21 20:24:52:850 info Retrieving page (GET): https://www.diggernaut.com/sandbox/meta-lang-object-ru.html?to=2
2017-10-21 20:24:52:841 debug False
2017-10-21 20:24:52:833 debug Matching register value with: 3
2017-10-21 20:24:52:821 debug Set register to counter's page value: 2
2017-10-21 20:24:52:812 debug Counter page has been incremented to: 2
2017-10-21 20:24:52:804 debug Block content:  <h1>Заголовок-1</h1>
<p>Пример описания чего-то там.</p>
2017-10-21 20:24:52:796 debug Number of found blocks: 1
2017-10-21 20:24:52:788 debug Looking for: body
2017-10-21 20:24:52:775 debug Page content: <html lang="ru">
<head>
<meta charset="UTF-8"/>
<title>Diggernaut | Мета-язык | Пример объекта</title>
</head>
<body>
<h1>Заголовок-1</h1>
<p>Пример описания чего-то там.</p>
</body>
</html>
2017-10-21 20:24:52:751 debug Referers: Referer: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html
2017-10-21 20:24:52:740 debug Referer: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html
2017-10-21 20:24:52:733 info Retrieving page (GET): https://www.diggernaut.com/sandbox/meta-lang-object-ru.html?to=1
2017-10-21 20:24:52:726 debug Set counter page to value: 1
2017-10-21 20:24:52:713 debug Page content: <html lang="ru">
<head>
<meta charset="UTF-8"/>
<title>Diggernaut | Мета-язык | Пример объекта</title>
</head>
<body>
<h1>Заголовок-1</h1>
<p>Пример описания чего-то там.</p>
</body>
</html>
2017-10-21 20:24:52:454 info Retrieving page (GET): https://www.diggernaut.com/sandbox/meta-lang-object-ru.html
2017-10-21 20:24:52:447 info Starting scrape
2017-10-21 20:24:52:434 debug Setting up default proxy
2017-10-21 20:24:52:421 debug Setting up surf
2017-10-21 20:24:52:394 info Starting digger: meta-lang-counter [1854]