Автор Тема: Домашняя работа, работа над ошибками, правильный порядок действий  (Прочитано 816 раз)

0 Пользователей и 1 Гость просматривают эту тему.

gogodanse

  • Освоившийся
  • **
  • Сообщений: 52
    • Просмотр профиля
Добрый день, делают бота чтобы хоть немного упростить себе работу, прошу проверить и где не хватает подсказать или поправить меня

$HTML = HTTPGET ("Ссылка") //// Бот отправляет запрос httpget
if ((strpos($HTML, "СЛОВО") > 0)) /// Если бот находит слово в полученном коде
   if(wndfind(ОКНО) = 0)  /// И если окно не найдено то делаем действия для открытия

 Для открытия над понадобится айди из этого же кода который мы получили HTML

Теперь нужно скопировать в буфер этот кусочек кода  Ищем строчку и вырезаем кусок кода  (тут мне нужна помощь, каким лучше методом вытащить кусок кода, допустим он будет в 6 строчке и после слов id="Наш код")

 Открываем окно бла бла бла вставляем айди жмем старт

   END_IF
ELSE
   if(wndfind($ОКНО) > 0) /// Если окно найдено а слово не найдено то закрываем все

      Действия для закрытия окна

   END_IF
END_IF

 :o  :o  :o  :o

« Последнее редактирование: Июнь 24, 2020, 10:20:43 am от gogodanse »

4.У.В.@.К

  • Освоившийся
  • **
  • Сообщений: 77
    • Просмотр профиля
Вариантов разбора html-кода может быть очень много. Реальный html-код задачи, как я понимаю, супер секретный. По этому и решение самое упрощенное (на примерном html-коде). На другом html-коде, это решение работать не будет, если например перед id будет прописан class.

Имеем такой код:
Код: HTML
  1. <p id="Наш код">Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>

Ищем id:
Код: Clickermann
  1. $str = TFREAD("HTML_код.html", 1) // бьерем строку с id, например из файла (файл во вложении этого сообщения)
  2.  
  3. // LOGWRITE ($str)
  4.  
  5. STRSEPARATE($str, CHAR(34), $arr) // разбиваем строку на подстроки, в массив (разделитель - кавычки)
  6.  
  7. $our_code = $arr[1] // во втором элементе массива будет искомый id
  8.  
  9. LOGWRITE ($our_code) // выводим найденный id в лог
  10.  
  11. HALT

gogodanse

  • Освоившийся
  • **
  • Сообщений: 52
    • Просмотр профиля
Вариантов разбора html-кода может быть очень много. Реальный html-код задачи, как я понимаю, супер секретный. По этому и решение самое упрощенное (на примерном html-коде). На другом html-коде, это решение работать не будет, если например перед id будет прописан class.

Имеем такой код:
Код: HTML
  1. <p id="Наш код">Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>

Ищем id:
Код: Clickermann
  1. $str = TFREAD("HTML_код.html", 1) // бьерем строку с id, например из файла (файл во вложении этого сообщения)
  2.  
  3. // LOGWRITE ($str)
  4.  
  5. STRSEPARATE($str, CHAR(34), $arr) // разбиваем строку на подстроки, в массив (разделитель - кавычки)
  6.  
  7. $our_code = $arr[1] // во втором элементе массива будет искомый id
  8.  
  9. LOGWRITE ($our_code) // выводим найденный id в лог
  10.  
  11. HALT

Выглядит очень даже интересно

Допустим через GETHTTP получил вот такой код это лишь кусок если что в котором нужный айди

<script >
"accessibility":{"label":"Cancel"},"trackingParams":"CGoQ8FsiEwj41-X6hZvqAhW9wU8IHX3JBfM="}},"primaryIsCancel":false}},"popupType":"DIALOG"}}]}}]}},"trackingParams":"CGcQpjAYCCITCPjX5fqFm-oCFb3BTwgdfckF8w=="}}],"title":"Featured Channels"}}]}},"tabs":[{"tabRenderer":{"endpoint":{"clickTrackingParams":"CC0Q8JMBGAAiEwj41-X6hZvqAhW9wU8IHX3JBfM=","commandMetadata":{"webCommandMetadata":{"url":"/user/ThisIsNikolarnTV/featured","webPageType":"WEB_PAGE_TYPE_BROWSE","rootVe":3611}},"browseEndpoint":{"browseId":"UCi_VsjkIy8vPMQnRMhPu9OA","params":"EghmZWF0dXJlZA%3D%3D","canonicalBaseUrl":"/user/ThisIsNikolarnTV"}},"title":"Home","selected":true,"content":{"sectionListRenderer":{"contents":[{"itemSectionRenderer":{"contents":[{"channelFeaturedContentRenderer":{"items":[{"videoRenderer":{"videoId":"CHs0lCJVOyIЖирным выделен айди

Будет ли он записывать код обернутый в <script> ? и пример можно если возможно ? я так понимаю так же сделать как вы и посчитать какой это будет масив с кавычками

Код: Clickermann
  1. $str = TFREAD("HTML_код.html", 6) // Берем 6 строку ?
  2. STRSEPARATE($str, CHAR(34), $arr) // разбиваем строку на подстроки, в массив (разделитель - кавычки)
  3. $our_code = $arr[1] // во втором элементе массива будет искомый id
« Последнее редактирование: Июнь 24, 2020, 09:16:51 pm от gogodanse »

4.У.В.@.К

  • Освоившийся
  • **
  • Сообщений: 77
    • Просмотр профиля
Будет ли он записывать код обернутый в <script> ? и пример можно если возможно ? я так понимаю так же сделать как вы и посчитать какой это будет масив с кавычками

Кликеру с версии 4.13 без разницы во что обернут текст, и у него есть удобные строковые функции для работы с текстом. Не обязательно использовать STRSEPARATE, но если это удобно, то на здоровье.) Кстати, разделителем может быть не только символ кавычек, но и любая подстрока.

Пример:
Код: Clickermann
  1. STRSEPARATE("удобные строковые функции для работы с текстом", "функции для работы ", $arr)
  2. LOGWRITE ($arr[0])
  3. LOGWRITE ($arr[1])
  4. HALT

В логе:
удобные строковые
с текстом

В общем "по месту" подбирать надо функции. Если html код не меняется, то конечно же можно искать нужный текст в заранее известной стоке, в заранее известном месте.

4.У.В.@.К

  • Освоившийся
  • **
  • Сообщений: 77
    • Просмотр профиля
Вот еще пример. Если в качестве разделителя взять подстроку "videoId":
В скрипте записать её можно так - STRCONCAT(CHAR(34), "videoId", CHAR(34), ":")

Код: Clickermann
  1. $str = TFREAD("HTML_код.html", 4)
  2.  
  3. STRSEPARATE($str, STRCONCAT(CHAR(34), "videoId", CHAR(34), ":"), $arr)
  4.  
  5. $our_code = STRFILTER($arr[1], CHAR(34), 0)
  6.  
  7. LOGWRITE ($our_code) // найдёт CHs0lCJVOyI
  8.  
  9. HALT

Во вложении новый файл для теста.

gogodanse

  • Освоившийся
  • **
  • Сообщений: 52
    • Просмотр профиля
Вот еще пример. Если в качестве разделителя взять подстроку "videoId":
В скрипте записать её можно так - STRCONCAT(CHAR(34), "videoId", CHAR(34), ":")

Код: Clickermann
  1. $str = TFREAD("HTML_код.html", 4)
  2.  
  3. STRSEPARATE($str, STRCONCAT(CHAR(34), "videoId", CHAR(34), ":"), $arr)
  4.  
  5. $our_code = STRFILTER($arr[1], CHAR(34), 0)
  6.  
  7. LOGWRITE ($our_code) // найдёт CHs0lCJVOyI
  8.  
  9. HALT

Во вложении новый файл для теста.

Попробовал но не получилось

$HTML = HTTPGET ("https://www.youtube.com/channel/UCQyz_sj8TCsGqKIE7VZpBxQ")
if ((strpos($HTML, "NU LIVE") > 0) | (strpos($HTML, "NU LIVE") > 0))
$str = TFREAD($HTML, 319)
STRSEPARATE($str, STRCONCAT(CHAR(34), "videoId", CHAR(34), ":"), $arr)
$our_code = STRFILTER($arr[1], CHAR(34), 0)
LOGWRITE ($our_code) //
END_IF
HALT

Быть может я не правильно написал строчку для поиска ?  просто я указывал в соответствии с строчкой в браузере, а в каком формате в кликере я не могу посмотреть так как при загрузке кода с сертефикатом https там заместо кода каракули D:

4.У.В.@.К

  • Освоившийся
  • **
  • Сообщений: 77
    • Просмотр профиля
HTTPGET не сработает для сайтов на https.
Вот в этой теме Hito написал собственные dll для обхода этой проблемы:
http://crapware.aidf.org/forum/index.php?topic=4505.msg30749#msg30749
Новый WinRAR нужен чтобы открыть архив.
Я сам их так и не испытывал, небыло таких задач. Чтобы всё работало нужно использовать 32-х битную версию кликера. Короче, ответы в той теме.
 

gogodanse

  • Освоившийся
  • **
  • Сообщений: 52
    • Просмотр профиля
HTTPGET не сработает для сайтов на https.
Вот в этой теме Hito написал собственные dll для обхода этой проблемы:
http://crapware.aidf.org/forum/index.php?topic=4505.msg30749#msg30749
Новый WinRAR нужен чтобы открыть архив.
Я сам их так и не испытывал, небыло таких задач. Чтобы всё работало нужно использовать 32-х битную версию кликера. Короче, ответы в той теме.

Я не про это, я уже пол года юзаю dll hito как бы код подгружается но отображается не корректно, тоесть он работает но именно в логе отоброжается все криво, допустим фразу NU LIVE он находит в коде, а айди который надо найти в лог не пишет

gogodanse

  • Освоившийся
  • **
  • Сообщений: 52
    • Просмотр профиля
Ладно щас что-нибудь придумаю, всем спасибо за ответы =) очень выручили

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3475
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
Если в коде подстрока videoId не встречается до нужного нам места, то всё просто вырезается.
Здесь в $var кавычки изменены для наглядности
Код: Clickermann
  1. $var = "{videoRenderer':{'videoId':'CHs0lCJVOyI'Жирным выделен айди"
  2. $sff = STRCUT2($var, STRPOS($var, "videoId")+10, 99999)
  3. $result = STRCUT2($sff, 1, STRPOS($sff, "'")-1)  // в боевом ставим CHAR(34) вместо "'"
  4. print($result)

Если же videoId ещё есть как часть других строк, то можно искать именно отдельное имя в кавычках + :
Код: Clickermann
  1. //{"contents":[{"itemSectionRenderer":{"contents":[{"channelFeaturedContentRenderer":{"items":[{"videoRenderer":{"videoId":"CHs0lCJVOyI"Жирным выделен айди. Копируем строку в буфер обмена
  2. $var = FROMCLIP()
  3.  
  4. $sff = STRCUT2($var, STRPOS($var, STRCONCAT(CHAR(34), "videoId", CHAR(34), ":"))+11, 99999)
  5. $result = STRCUT2($sff, 1, STRPOS($sff, CHAR(34))-1)
  6. print($result)

log
Цитировать
9:15:42 CHs0lCJVOyI
9:15:42 CHs0lCJVOyI
« Последнее редактирование: Июнь 26, 2020, 09:17:46 am от Vint »


4.У.В.@.К

  • Освоившийся
  • **
  • Сообщений: 77
    • Просмотр профиля
STRSEPARATE поприкольней выглядит, т.к. матчит все вхождения подстроки и не тащит за собой STRPOS с костылем 99999, как STRCUT2. А так же возвращает массив, в котором каждый элемент, кроме первого, начинается с искомой нами подстроки, это удобно. Напоминает поиск по регулярке с флагом g. Отделить искомую подстроку от лишней части строки, опять же можно через STRSEPARATE, и опять без STRPOS, но с другим разделителем. Тогда в первом элементе второго массива будет то что мы ищем. Одна STRSEPARATE против пары STRCUT2 + STRPOS выглядит предпочтительней.

Код: Clickermann
  1. //{"contents":[{"itemSectionRenderer":{"contents":[{"channelFeaturedContentRenderer":{"items":[{"videoRenderer":{"videoId":"CHs0lCJVOyI"Жирным выделен айди. Копируем строку в буфер обмена
  2.  
  3. $str = FROMCLIP()
  4.  
  5. STRSEPARATE($str, STRCONCAT(CHAR(34), "videoId", CHAR(34), ":", CHAR(34)), $arr_1)
  6.  
  7. STRSEPARATE($arr_1[1], CHAR(34), $arr_2)
  8.  
  9. $result = $arr_2[0]
  10.  
  11. print($result)
  12.  
  13. HALT

В общем - варианты есть, все функции хороши и их выбор зависит от вкуса и ситуации. Я не пытаюсь спорить, просто привожу аргументы в пользу своего решения. Хотя в споре, как известно, рождается истина.
Да и вообще, тихо тут что-то. :)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3475
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
STRSEPARATE поприкольней выглядит, т.к. матчит все вхождения подстроки и не тащит за собой STRPOS с костылем 99999, как STRCUT2. А так же возвращает массив, в котором каждый элемент, кроме первого, начинается с искомой нами подстроки, это удобно...

Да, да, я не спорю. Всё удобнее. Просто привык в кликере не использовать лишний раз массивы. Ну, как-то так повелось. Они медленные, их нужно освобождать. Хотя в данном случае пофиг.


Да и вообще, тихо тут что-то.

Тихо. Я здесь закопался в парсинг. Почти все нужные сайты победил, кроме Беру. Эта падла, переодически меня обнаруживает и блокирует. Я уже и селениум спрятал (вроде)  :) пол дня искал как, и что я только не делал.
Сначала натыкался на
"Нам очень жаль, но запросы, поступившие с вашего IP-адреса, похожи на автоматические."Теперь вроде лучше
"Доступ к нашему сервису временно запрещён! Возможно, ваш компьютер заражён вредоносной программой, которая автоматически обращается к Яндексу."
Вроде бы явно не подозревают умышленность, но всё равно палят. Я уже весь мозг сломал. Прокси, правда, не использую. Бесплатные помню яндекс палил всегда, а на платные нет средств.
« Последнее редактирование: Июнь 26, 2020, 01:15:09 pm от Vint »


4.У.В.@.К

  • Освоившийся
  • **
  • Сообщений: 77
    • Просмотр профиля
Еще хочется отметить, что у функции STRSEPARATE есть свой внутренний быстрый цикл. Он работает как бы на более низком уровне, если так можно сказать, по этому будет быстрее "обычных" циклов используемых скрипте. То что делает STRSEPARATE за один вызов, можно сделать и другими функциями, но получится большая конструкция с циклами, теми-же массивами и вообще "лишними телодвижениями". Соответственно, всё это будет работать медленнее (в теории), чем STRSEPARATE. Естественно, всё зависит от задачи.
Это просто мысли вслух.))

"Нам очень жаль, но запросы, поступившие с вашего IP-адреса, похожи на автоматические."

А для этого есть халява, например у французов - https://www.avira.com/ru/free-vpn-windows
Весь трафик пойдет через их сервера, адреса которых воспринимаются сайтами нормально, в отличие от адресов сети TOR. Бренд Avira вроде внушает доверие. Но на бесплатной версии они дают только 500 Мбайт трафика в месяц. И когда трафик кончится, они отключат свою VPN без предупреждения. Надо следить за расходом трафика и успеть отключиться, чтобы не спалиться. Но всё это может не помочь, если сайт отслеживает своих посетителей по поведенческому фактору, или еще хрен их знает по каким признакам.)) Есть такие сервисы, с нейронными сетями и невообразимыми алгоритмами, например тот же Яндекс. Но это уже фантастика.))
Видимо они и ругаются тогда, когда не могут идентифицировать пользователя.)

Avira оказывается немецкое творение,)) я почему-то всегда считал, что французское.
Хотя, какая разница?.. ;D
« Последнее редактирование: Июнь 26, 2020, 02:31:49 pm от 4.У.В.@.К »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3475
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
А для этого есть халява, например у французов - https://www.avira.com/ru/free-vpn-windows
Но на бесплатной версии они дают только 500 Мбайт трафика в месяц.

Там внизу приписка
Цитировать
Без регистрации в приложении Avira Phantom VPN доступно не более 500 Мбайт трафика в месяц. Зарегистрируйтесь бесплатно прямо сейчас и получите 1 Гбайт трафика в месяц.


4.У.В.@.К

  • Освоившийся
  • **
  • Сообщений: 77
    • Просмотр профиля
Там внизу приписка
Цитировать
Без регистрации в приложении Avira Phantom VPN доступно не более 500 Мбайт трафика в месяц. Зарегистрируйтесь бесплатно прямо сейчас и получите 1 Гбайт трафика в месяц.

Ну вот, даже еще лучше стало.) Я использовал эту прогу для посещения нескольких форумов, для размещения рекламы. Защита сайтов не агрится на VPN Авиры. Еще использовал для рекламы на пиратке World of Warcraft. 500 mb мне тогда хватило. Учетку в самой Avira Phantom VPN менять не пробовал, чтобы получить еще трафик. Наверно тоже прокатит.