Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Snake911 on June 19, 2017, 12:03:41 AM

Title: Требуется помощь в написании простенького скрипта
Post by: Snake911 on June 19, 2017, 12:03:41 AM
Требуется взять содержимое с поля с одной вкладки, скопировать его, перейти на другую вкладку и вставить содержимое поле в поиск нажав ENTER , после поиска найти ссылку по классу, взять из найденной ссылки URL вернутся на начальную страницу и вставить URL в поле, заранее благодарю за помощь! Скрины подкрепил
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Snake911 on June 19, 2017, 12:17:17 AM
Требуется взять содержимое с поля с одной вкладки, скопировать его, перейти на другую вкладку и вставить содержимое поле в поиск нажав ENTER , после поиска найти ссылку по классу, взять из найденной ссылки URL вернутся на начальную страницу и вставить URL в поле, заранее благодарю за помощь! Скрины подкрепил

Ссылка с который нужно взять URL находится в разных местах, нужно ее определить по классу либо айди
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Атеист on June 19, 2017, 10:05:25 PM
... Скрины подкрепил
Скрины - это хорошо.
Ссылка с который нужно взять URL находится в разных местах, нужно ее определить по классу либо айди
Про классы и айди - непонятно ничего, нет таких букав на скринах. Как их "определить" то? В ТЗ чего то не хватает кажется.  ???
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Snake911 on June 19, 2017, 10:38:16 PM
Если вы так уверены, что данный скрипт ПРОСТЕНЬКИЙ,то почему не напишите его самостоятельно?
Если бы у меня ума хватило довести это до ума , то я сам бы написал и не просил бы помощи)
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Snake911 on June 19, 2017, 10:39:57 PM
... Скрины подкрепил
Скрины - это хорошо.
Ссылка с который нужно взять URL находится в разных местах, нужно ее определить по классу либо айди
Про классы и айди - непонятно ничего, нет таких букав на скринах. Как их "определить" то? В ТЗ чего то не хватает кажется.  ???
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Snake911 on June 20, 2017, 06:40:39 AM
Если вы так уверены, что данный скрипт ПРОСТЕНЬКИЙ,то почему не напишите его самостоятельно?
Если бы у меня ума хватило довести это до ума , то я сам бы написал и не просил бы помощи)
выходит; вы утверждаете, что лично у вас, не хватает ума даже на простенькие скрипты? ???
Я не нуждаюсь в ваших бесполезных комментариях! Я просил помощи у людей которые в этом разбираются, если вам нечем мне помочь, проходите мимо.
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Vint on June 20, 2017, 10:14:55 PM
Кликер не умеет работать с классами или id HTML документа. Кликер больше по пикселам экрана.
Точнее, не умеет напрямую. Можно с плагином к мозиле меняющим стили подсветить элемент с нужным классом.

Если страница не сильно навороченая в плане защиты, авторизаций сложных и подгрузок по скриптам, то эту задачу целесообразней сделать на другом языке. Особенно если нужно быстро или много или долговременно. Если на раз, то как уже сказал подсветить плагином и ловить по цвету.
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Атеист on June 21, 2017, 12:02:39 AM
Дело не в том, что кликер чего-то не умеет, а в засекреченности сайта, с которым нужно работать. С исходным кодом веб-страницы кликерман прекрасно разберется. Просто надо брать и пробовать. А пробовать то и не на чем... Давно бы уже что нибудь придумали.
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Vint on June 21, 2017, 06:24:20 AM
Я и говорю, что стандартного простого метода нет, так чтоб дать универсальный пример.
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Snake911 on June 21, 2017, 11:18:21 AM
Я и говорю, что стандартного простого метода нет, так чтоб дать универсальный пример.
Возможно лм реализовать поиск ссылки на странице по айди либо классу, чтоб кликер нашел ее на странице и кликнул на неё!?
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Атеист on June 21, 2017, 06:14:38 PM
Возможно лм реализовать поиск ссылки на странице по айди либо классу, чтоб кликер нашел ее на странице и кликнул на неё!?
Да, возможно.
Code: (clickermann) [Select]
// Получаем исходный код страницы этого форума
$str = HTTPGET("http://crapware.aidf.org/forum/index.php?action=recent")
LOGWRITE ($str) // Выводим результат в лог
STRWRITELN("out.html", $str, 1) // Сохраняем результат в файл, с перезаписью файла (кодировка ANSI)
HALT

Затем находим в коде тег с нужным классом или id, берем из него в буфер обмена нужный текст и вставляем в нужное поле браузера.
Как закрепить элемент веб-страницы в браузере, для удобства, обсуждалось здесь (http://crapware.aidf.org/forum/index.php?topic=3143.msg21149#msg21149).
Но не всё так просто и гладко. Не каждый сайт даст получить исходный код страницы без боя. Добавим сюда еще кавычки и кодировки.
Поэтому и нужно взглянуть на конкретный сайт, прежде чем давать советы.
Другой вариант - это распознавание текста и изображений на странице в браузере, там тоже не всё так просто. Но Clickermann это может сделать, если сможет человек.


UPD: Неудачную я ссылку выбрал для примера, один раз сработало и больше не хочет. Поменял ссылку на страницу Последние сообщения.
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Snake911 on June 21, 2017, 08:02:26 PM
Возможно лм реализовать поиск ссылки на странице по айди либо классу, чтоб кликер нашел ее на странице и кликнул на неё!?
Да, возможно.
Code: (clickermann) [Select]
// Получаем исходный код страницы этого форума
$str = HTTPGET("http://crapware.aidf.org/forum/index.php?action=recent")
LOGWRITE ($str) // Выводим результат в лог
STRWRITELN("out.html", $str, 1) // Сохраняем результат в файл, с перезаписью файла (кодировка ANSI)
HALT

Затем находим в коде тег с нужным классом или id, берем из него в буфер обмена нужный текст и вставляем в нужное поле браузера.
Как закрепить элемент веб-страницы в браузере, для удобства, обсуждалось здесь (http://crapware.aidf.org/forum/index.php?topic=3143.msg21149#msg21149).
Но не всё так просто и гладко. Не каждый сайт даст получить исходный код страницы без боя. Добавим сюда еще кавычки и кодировки.
Поэтому и нужно взглянуть на конкретный сайт, прежде чем давать советы.
Другой вариант - это распознавание текста и изображений на странице в браузере, там тоже не всё так просто. Но Clickermann это может сделать, если сможет человек.


UPD: Неудачную я ссылку выбрал для примера, один раз сработало и больше не хочет. Поменял ссылку на страницу Последние сообщения.
Огромнейшее спасибо за разъяснение  :)!!
Ну если возможно то на примере ..Вот на http://hotline.ua этом сайте будет поиск элементов по классам
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Атеист on June 22, 2017, 12:00:12 PM
Не поучилось у меня получить код станицы функцией HTTPGET().
Напишу как я бы сделал в таком случае. Потребуются утилиты командной строки.
Предположим, что мы знаем название товара который ищем. Дописываем к адресу сайта маску для поиска, в данном случае "/sr/?q=Vladi++140". Перейти по полученному адресу, все равно что заюзать поиск по сайту. Теперь надо получить исходник страницы http://hotline.ua/sr/?q=Vladi++140 и проверить есть ли там искомый товар. На странице могут уместиться только 20 товаров, остальные мы не увидим без дополнительных действий, поэтому запрос должен быть максимально точным.

Скачиваем утилиту "Download (http://www.f2ko.de/en/cmd.php)". Она может получить код страницы с того сайта.
Code: (cmd) [Select]
del "intput"
download.exe "http://hotline.ua/sr/?q=Vladi++140" "intput"

Скачиваем утилиту "Swiss File Knife (http://stahlworks.com/dev/swiss-file-knife.html)", чтобы заменить кавычки в коде страницы.
Code: (cmd) [Select]
sfk replace intput /\"/'/ -yes
Скачиваем утилиту "TCode (http://svoy-nemec.narod.ru/Soft/TCode.htm)", для смены кодировки страницы.
Code: (cmd) [Select]
tcode "intput" /auto "intput.html" /win /utf /html-
Пишем для всего этого bat-файлы, упаковываем их в Bat To Exe Converter, чтобы скрыть окно командной строки.
Но лучше не упаковывать батники, а запускать через EXECUTE() в свернутом виде через ярлыки, тогда Clickermann сможет надежно отслеживать момент завершения их работы по HWND окон.

В результате получаем файл "intput.html" из которого Clickermann вытащит названия товаров и их URL; файлы для теста во вложении, результат работы см. в логе (кодировку не менял; кавычки заменил вручную).

Это была обработка только одной страницы из выдачи поисковика сайта. Для поиска URL других товаров придется создавать bat-файл кликером по ходу выполнения сценария.

Вот такой простенький скрипт получается. :) Но всё вполне реализуемо.
Может кто-то предложит вариант проще с обработкой графики.
Title: Re: Требуется помощь в написании простенького скрипта
Post by: Vint on June 22, 2017, 05:22:42 PM
Не поучилось у меня получить код станицы функцией HTTPGET().
Может потому что
(http://savepic.net/9383584m.png) (http://savepic.net/9383584.htm)

Я же говорю, на кликере это в здравом уме не делают. Вот на питоне
[spoiler]
Code: (php) [Select]
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
PATH_SCRIPT = os.path.dirname(os.path.abspath(unicode(sys.argv[0], 'cp1251')))
sys.path.append(os.path.join(os.path.split(os.path.split(PATH_SCRIPT)[0])[0], 'A_Python', 'API'))
import colorprint as cp
import requests.api
from bs4 import BeautifulSoup


def errors(_type, arg=u''):
    if _type == 'noLoad':
        err = u'13Не можем получить страницу url: ^15_%s' % arg
    elif _type == 'noRead':
        err = u'13Не можем прочитать файл ^15_%s' % arg
    elif _type == 'noFile':
        err = u'13Нет файла ^15_%s' % arg
    else:
        err = u'13Неизвестная ошибка'
    print
    cp.cprint(err)
    cp.cprint(u'12Работа скрипта остановлена.')
    cp.cprint(u'14-------------   ^12_ERROR   ^14_---------------')
    raw_input()
    exit()

def loading_html(url, params):
    r = requests.get(url, params=params)
    if r.status_code == 200:
        return r.text
    errors('noLoad', url)

def save_file(filename, data, cod='utf-8'):
    if filename and data:
        with open(filename, 'w') as f:
            f.write(data.encode(cod))

def read_file(filename=None):
    print u'Читаем файл %s' % filename
    html = None
    if filename and os.path.isfile(filename):
        try:
            with open(filename, 'r') as f:
                html = f.read().decode('utf-8')
            return html
        except IOError:
            errors('noRead', filename)
    else:
        errors('noFile', filename)

# ------------------------------------------------------------------------------

if __name__ == '__main__':
    os.system('color 71')

    url = 'http://hotline.ua/sr/'
    params = {
            'q': u'VLADI+140'
            }

    html = loading_html(url, params)
    # save_file(u'html.txt', html)
    # html = read_file(u'html.txt')

    soup = BeautifulSoup(html, 'html.parser')
    all_tov = soup.findAll('a', attrs={'class':'g_statistic', 'data-eventlabel':'Product name'})

    cp.cprint(u'3Найдено элементов: ^4_%d \n' % len(all_tov))
    text = []
    result = []
    for num, tovar in enumerate(all_tov):
        # print tovar.prettify()
        name = tovar.contents[0].rstrip(' \n')
        href = 'hotline.ua' + tovar['href']
        result.append(name)
        result.append(href)
       
        pref = ''
        if num > 0:
            pref = u'^'
        text.append(u'%s4_%d ^1_%s' % (pref, num+1, name))
        text.append(href)
        text.append('')
    # print '\n'.join(text).encode('cp866', 'ignore')
    cp.cprint('\n'.join(text))
    save_file(u'result.txt', '\n'.join(result), 'cp1251')



здесь 80% кода это красивый вывод и обработка ошибок.
[/spoiler]

Файл result.txt
[spoiler]
Code: [Select]
VLADI Palermo 140х200
hotline.ua/dom-pledy/vladi-palermo-140h200/
VLADI Плед Dolce Vita 140х200 (409)
hotline.ua/dom-pledy/vladi-pled-dolce-vita-140h200-409/
VLADI Плед Корсика Бастия 140х200 (33604)
hotline.ua/dom-pledy/vladi-pled-korsika-bastiya-140h200-33604/
VLADI Плед полушерстяной Лондон 140x200 см Тип: плед, размер: 140x200 см
hotline.ua/dom-pledy/vladi-pled-polusherstyanoj-london-140x200-sm-tip-pled-razmer-140x200-sm/
VLADI Плед шерстяной Шарм бело-серый 140х200 см (-Шарм_140*200)
hotline.ua/dom-pledy/vladi-pled-sherstyanoj-sharm-belo-seryj-140h200-sm-sharm140200/
VLADI Плед шерстяной Чили бело-серый 140х200 см (-Чили_140*202)
hotline.ua/dom-pledy/vladi-pled-sherstyanoj-chili-belo-seryj-140h200-sm-chili140202/
VLADI Плед жаккард Кот 140*200 бежевый
hotline.ua/dom-pledy/vladi-pled-zhakkard-kot-140200-bezhevyj/
VLADI Плед жаккард Кот 140*200 серый
hotline.ua/dom-pledy/vladi-pled-zhakkard-kot-140200-seryj/
VLADI Плед Флоренция коричневый 140*200 шерсть
hotline.ua/dom-pledy/vladi-pled-florenciya-korichnevyj-140200-sherst/
VLADI Плед Флоренция фиолетовый 140*200 шерсть
hotline.ua/dom-pledy/vladi-pled-florenciya-fioletovyj-140200-sherst/
VLADI Плед Флоренция красный 140*200 шерсть
hotline.ua/dom-pledy/vladi-pled-florenciya-krasnyj-140200-sherst/
VLADI Плед Метро 140*200
hotline.ua/dom-pledy/vladi-pled-metro-140200/
VLADI хлопковое жаккардовое 140*205 см (CB0002700)
hotline.ua/dom-pokryvala/vladi-hlopkovoe-zhakkardovoe-140205-sm-cb0002700/
VLADI Плед Palermo біл-сір-чорн 140x200 140x200 см 18885 (2200000018885)
hotline.ua/dom-pledy/vladi-pled-palermo-bl-sr-chorn-140x200-140x200-sm-18885-2200000018885-10367995/
VLADI Плед "Сан-Ремо" трава 140*200 біл-беж (33512)
hotline.ua/dom-pledy/vladi-pled-san-remo-trava-140200-bl-bezh-33512/
VLADI Плед "Сан-Ремо" трава 140*200 біл-сір (31880)
hotline.ua/dom-pledy/vladi-pled-san-remo-trava-140200-bl-sr-31880/
VLADI Ковдра дит. "Букашка" 100*140 рожевий (34120)
hotline.ua/dom-pledy/vladi-kovdra-dit-bukashka-100140-rozhevij-34120/
VLADI Плед "Сан-Ремо" олень 140*200 біл-сір (34151)
hotline.ua/dom-pledy/vladi-pled-san-remo-olen-140200-bl-sr-34151/
VLADI Плед Флоренция коричневый 140*200 новый
hotline.ua/dom-pledy/vladi-pled-florenciya-korichnevyj-140200-novyj/
VLADI Плед Флоренция фиолетовый 140*200 новый
hotline.ua/dom-pledy/vladi-pled-florenciya-fioletovyj-140200-novyj/
[/spoiler]


Можно и в файл не выводить, сразу делать то, что нужно с сылкой