1

Тема: AHK: Получение динамически формируемого текста в переменную

Помогите пожалуста с одной задачей - необходимо скопировать со страницы данные клиента:
https://i.ibb.co/zF2S3s4/1.png
но код страницы подтягивает эти данные скриптом:
https://i.ibb.co/ZJh3H49/2.png
Как эти данные можно извлечь?

2

Re: AHK: Получение динамически формируемого текста в переменную

А если сохранить страницу в виде HTML-файла, в нём эти данные будут присутствовать?

3 (изменено: Ander, 2022-02-08 13:47:43)

Re: AHK: Получение динамически формируемого текста в переменную

ypppu
Нет их там.

4

Re: AHK: Получение динамически формируемого текста в переменную

Можно через HTTP запросы. Ищите по Получить текст с HTML страницы в переменную.

5

Re: AHK: Получение динамически формируемого текста в переменную

Ander пишет:

но код страницы подтягивает эти данные скриптом

Каким таким скриптом?
ИМХО стандартный input.

6

Re: AHK: Получение динамически формируемого текста в переменную

Подозреваю, что речь идёт о сохранённых в браузере данных для заполнения форм.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: svoboden, 2022-02-08 04:51:54)

Re: AHK: Получение динамически формируемого текста в переменную

Я, думаю, там нет никаких скриптов. А нужно просто получить данные из html страницы, например:

link := "адрес"
req := ComObjCreate("MSXML2.XMLHTTP.6.0")
req.Open("GET", link)
req.Send()
html := req.responseText

document := ComObjCreate("HTMLfile")
document.Open()
document.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
document.write(html)
document.Close()

msgbox % document.getElementsByClassName("class")[0].innerText

8 (изменено: Ander, 2022-02-08 13:47:07)

Re: AHK: Получение динамически формируемого текста в переменную

svoboden
Выведу значение переменной html

<!DOCTYPE html><html lang="en"><head>
    <meta charset="utf-8">
    <title>Личный кабинет</title>
    <base href="/">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="icon" type="image/png" sizes="32x32" href="assets/img/favicon-32x32.png">
    <style type="text/css">@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmSU5fBBc-.woff) format('woff');}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu4mxM.woff) format('woff');}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmEU9fBBc-.woff) format('woff');}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0370-03FF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0370-03FF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0370-03FF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}</style>
    <style>
      app-root:empty {
        display: block;
        height: 100%;
        width: 100%;
      }

      app-root:empty:before {
        content: '';
        display: block;
        position: absolute;
        top: 50%;
        left: 50%;
        height: 54px;
        width: 54px;
        margin: -27px 0 0 -27px;
        border: 8px transparent solid;
        border-top: 8px #3070ee solid;
        border-radius: 50%;
        -webkit-animation: bootstrap-progress-spin 1s infinite linear;
        animation: bootstrap-progress-spin 1s infinite linear;
        z-index: 1;
        box-sizing: border-box;
      }

      app-root:empty:after {
        content: '';
        display: block;
        position: absolute;
        top: 50%;
        left: 50%;
        height: 50px;
        width: 50px;
        margin: -25px 0 0 -25px;
        border: 4px #adb5cc solid;
        border-radius: 50%;
        box-sizing: border-box;
      }

      @-webkit-keyframes bootstrap-progress-spin {
        from {
          -webkit-transform: rotate(359deg);
          transform: rotate(359deg);
        }
        to {
          -webkit-transform: rotate(0deg);
          transform: rotate(0deg);
        }
      }
      @keyframes bootstrap-progress-spin {
        from {
          -webkit-transform: rotate(359deg);
          transform: rotate(359deg);
          -webkit-transform: rotate(359deg);
          transform: rotate(359deg);
        }
        to {
          -webkit-transform: rotate(0deg);
          transform: rotate(0deg);
          -webkit-transform: rotate(0deg);
          transform: rotate(0deg);
        }
      }
    </style>
    <!-- Google Tag Manager -->
    <script>
      ;(function (w, d, s, l, i) {
        w[l] = w[l] || []
        w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' })
        var f = d.getElementsByTagName(s)[0],
          j = d.createElement(s),
          dl = l != 'dataLayer' ? '&l=' + l : ''
        j.async = true
        j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl
        f.parentNode.insertBefore(j, f)
      })(window, document, 'script', 'dataLayer', 'GTM-WH8X287')
    </script>
    <!-- End Google Tag Manager -->
  <link rel="stylesheet" href="https://site.com/styles.5b803a1b2efc88affb9a.css"></head>
  <body>
    <!-- Google Tag Manager (noscript) -->
    <noscript><iframe
        src="https://www.googletagmanager.com/ns.html?id=GTM-WH8X287"
        height="0"
        width="0"
        style="display: none; visibility: hidden"
      ></iframe
    ></noscript>
    <!-- End Google Tag Manager (noscript) -->
    <app-root></app-root>
  <script src="https://site.com/runtime-es2015.bf95a3479a79831d8adf.js" type="module"></script><script src="https://site.com/runtime-es5.bf95a3479a79831d8adf.js" nomodule defer></script><script src="https://site.com/polyfills-es5.d68d7fbbf1e8279fa50b.js" nomodule defer></script><script src="https://site.com/polyfills-es2015.555720771bf6c0db2c98.js" type="module"></script><script src="site.com/main-es2015.94f4c31a9c435e5083d9.js" type="module"></script><script src="https://site.com/main-es5.94f4c31a9c435e5083d9.js" nomodule defer></script>

</body></html>

Здесь нет имени клиента .

9

Re: AHK: Получение динамически формируемого текста в переменную

Ander, ознакомьтесь, пожалуйста, с Правилами, отредактируйте свои посты. Обратите внимание на точки в конце предложений.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Получение динамически формируемого текста в переменную

https://www.w3schools.com/tags/att_input_value.asp

11

Re: AHK: Получение динамически формируемого текста в переменную

Malcev
Пожалуйста поясните, я не понимаю как Ваша ссылка относится к получаемому html документу. Вы меня сильно не пинайте - это первый мой скрипт на AHK.

12

Re: AHK: Получение динамически формируемого текста в переменную

С ahk ваша тема никак не связана.
У тага input есть атрибут value.
Его и получайте.

13

Re: AHK: Получение динамически формируемого текста в переменную

Ander пишет:

это первый мой скрипт на AHK

А на javascript?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: Получение динамически формируемого текста в переменную

teadrinker
Вообще не стыкался с JavaScript.

15

Re: AHK: Получение динамически формируемого текста в переменную

Тогда, боюсь, вы взялись за непосильную задачу. Начните изучение AHK с чего-то более простого.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

Re: AHK: Получение динамически формируемого текста в переменную

Та у меня все уперлось именно в эти 5 полей, все остальное уже работает. Потому и обратился за помощью сюда.

17

Re: AHK: Получение динамически формируемого текста в переменную

Ну смотрите, значение со страницы можно получить джаваскриптом, ссылку вам дали. Джаваскрипт вы можете запустить из адресной строки браузера. Кроме того, вам нужно как-то получить значение из джаваскрипта. Проще всего это сделать через буфер обмена, т. е. джаваскрипт должен поместить значение туда. Соответственно, вам нужно как-то решить эти задачи. Джавскрипт удобно тестировать в консоли Инструментов Разработчика в браузере.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: Получение динамически формируемого текста в переменную

У меня нужные поля достаются с помощю подобных выражений:

Item_SKU := PageInst.Evaluate("document.querySelector('СЕЛЕКТОР').innerHTML").value 

В этих 5 полях нет или я не знаю как раздобыть селектор. В принипе это и вся загвоздка со скриптом.

19

Re: AHK: Получение динамически формируемого текста в переменную

А, ну вы бы написали, что используете Chrome.ahk, как это можно было понять?
Тогда проще, по идее должно работать так:

PageInst.Evaluate("document.querySelector('input[formcontrolname=""firstName""]').value").value
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

20

Re: AHK: Получение динамически формируемого текста в переменную

Ander пишет:

Выведу значение переменной html

Так в браузере есть же эти данные. Может эти данные и подтягиваются каким-нибудь скриптом, но что выводится в переменную html при get запросе вообще непонятно.

21

Re: AHK: Получение динамически формируемого текста в переменную

teadrinker
Большое спасибо, вы очень помогли. Есть еще 2 поля, где не проходит Ваш вариант, посмотрите пожалуйста:
https://i.ibb.co/LCtcc7m/2.png
https://i.ibb.co/qntxyHG/3.png
Спасибо.

22

Re: AHK: Получение динамически формируемого текста в переменную

Ander, гуглите querySelector и querySelectorAll. Собственно по селекторам хорошая статья, например, вот, там для CSS, но то же самое подойдёт и для querySelector. Тестировать применение querySelector и querySelectorAll удобно в консоли инструментов разработчика: вводите document.querySelector('здесь селектор') (или document.querySelectorAll('здесь селектор')[индекс]), если селектор верный — элемент должен выделиться на странице.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

23

Re: AHK: Получение динамически формируемого текста в переменную

teadrinker
В элементах разработчика я стрелочкой кликаю на элемент и мне подсвечивает тег по которму, если правой кнопкой клацнуть можно скопировать селектор. Так для этих 2-х элементов этот метод не работает.

24

Re: AHK: Получение динамически формируемого текста в переменную

Такое бывает, используйте querySelectorAll.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder