Author Topic: Домашняя работа, работа над ошибками, правильный порядок действий  (Read 4238 times)

0 Members and 1 Guest are viewing this topic.

gogodanse

  • Освоившийся
  • **
  • Posts: 58
    • View Profile
Добрый день, делают бота чтобы хоть немного упростить себе работу, прошу проверить и где не хватает подсказать или поправить меня

$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

« Last Edit: June 24, 2020, 10:20:43 AM by gogodanse »

4.У.В.@.К

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

Имеем такой код:
Code: (html5) [Select]
<p id="Наш код">Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>
Ищем id:
Code: (clickermann) [Select]
$str = TFREAD("HTML_код.html", 1) // бьерем строку с id, например из файла (файл во вложении этого сообщения)

// LOGWRITE ($str)

STRSEPARATE($str, CHAR(34), $arr) // разбиваем строку на подстроки, в массив (разделитель - кавычки)

$our_code = $arr[1] // во втором элементе массива будет искомый id

LOGWRITE ($our_code) // выводим найденный id в лог

HALT

gogodanse

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

Имеем такой код:
Code: (html5) [Select]
<p id="Наш код">Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>
Ищем id:
Code: (clickermann) [Select]
$str = TFREAD("HTML_код.html", 1) // бьерем строку с id, например из файла (файл во вложении этого сообщения)

// LOGWRITE ($str)

STRSEPARATE($str, CHAR(34), $arr) // разбиваем строку на подстроки, в массив (разделитель - кавычки)

$our_code = $arr[1] // во втором элементе массива будет искомый id

LOGWRITE ($our_code) // выводим найденный id в лог

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> ? и пример можно если возможно ? я так понимаю так же сделать как вы и посчитать какой это будет масив с кавычками

Code: (clickermann) [Select]
$str = TFREAD("HTML_код.html", 6) // Берем 6 строку ?
STRSEPARATE($str, CHAR(34), $arr) // разбиваем строку на подстроки, в массив (разделитель - кавычки)
$our_code = $arr[1] // во втором элементе массива будет искомый id
« Last Edit: June 24, 2020, 09:16:51 PM by gogodanse »

4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Будет ли он записывать код обернутый в <script> ? и пример можно если возможно ? я так понимаю так же сделать как вы и посчитать какой это будет масив с кавычками

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

Пример:
Code: (clickermann) [Select]
STRSEPARATE("удобные строковые функции для работы с текстом", "функции для работы ", $arr)
LOGWRITE ($arr[0])
LOGWRITE ($arr[1])
HALT

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

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

4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Вот еще пример. Если в качестве разделителя взять подстроку "videoId":
В скрипте записать её можно так - STRCONCAT(CHAR(34), "videoId", CHAR(34), ":")

Code: (clickermann) [Select]
$str = TFREAD("HTML_код.html", 4)

STRSEPARATE($str, STRCONCAT(CHAR(34), "videoId", CHAR(34), ":"), $arr)

$our_code = STRFILTER($arr[1], CHAR(34), 0)

LOGWRITE ($our_code) // найдёт CHs0lCJVOyI

HALT

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

gogodanse

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

Code: (clickermann) [Select]
$str = TFREAD("HTML_код.html", 4)

STRSEPARATE($str, STRCONCAT(CHAR(34), "videoId", CHAR(34), ":"), $arr)

$our_code = STRFILTER($arr[1], CHAR(34), 0)

LOGWRITE ($our_code) // найдёт CHs0lCJVOyI

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.У.В.@.К

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

gogodanse

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

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

gogodanse

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Если в коде подстрока videoId не встречается до нужного нам места, то всё просто вырезается.
Здесь в $var кавычки изменены для наглядности
Code: (clickermann) [Select]
$var = "{videoRenderer':{'videoId':'CHs0lCJVOyI'Жирным выделен айди"
$sff = STRCUT2($var, STRPOS($var, "videoId")+10, 99999)
$result = STRCUT2($sff, 1, STRPOS($sff, "'")-1)  // в боевом ставим CHAR(34) вместо "'"
print($result)

Если же videoId ещё есть как часть других строк, то можно искать именно отдельное имя в кавычках + :
Code: (clickermann) [Select]
//{"contents":[{"itemSectionRenderer":{"contents":[{"channelFeaturedContentRenderer":{"items":[{"videoRenderer":{"videoId":"CHs0lCJVOyI"Жирным выделен айди. Копируем строку в буфер обмена
$var = FROMCLIP()

$sff = STRCUT2($var, STRPOS($var, STRCONCAT(CHAR(34), "videoId", CHAR(34), ":"))+11, 99999)
$result = STRCUT2($sff, 1, STRPOS($sff, CHAR(34))-1)
print($result)

log
Quote
9:15:42 CHs0lCJVOyI
9:15:42 CHs0lCJVOyI
« Last Edit: June 26, 2020, 09:17:46 AM by Vint »


4.У.В.@.К

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

Code: (clickermann) [Select]
//{"contents":[{"itemSectionRenderer":{"contents":[{"channelFeaturedContentRenderer":{"items":[{"videoRenderer":{"videoId":"CHs0lCJVOyI"Жирным выделен айди. Копируем строку в буфер обмена

$str = FROMCLIP()

STRSEPARATE($str, STRCONCAT(CHAR(34), "videoId", CHAR(34), ":", CHAR(34)), $arr_1)

STRSEPARATE($arr_1[1], CHAR(34), $arr_2)

$result = $arr_2[0]

print($result)

HALT

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

Vint

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

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


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

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


4.У.В.@.К

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

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

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

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

Vint

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

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


4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Там внизу приписка
Quote
Без регистрации в приложении Avira Phantom VPN доступно не более 500 Мбайт трафика в месяц. Зарегистрируйтесь бесплатно прямо сейчас и получите 1 Гбайт трафика в месяц.

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