Author Topic: Требуется помощь в написании простенького скрипта  (Read 4906 times)

0 Members and 1 Guest are viewing this topic.

Snake911

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Требуется взять содержимое с поля с одной вкладки, скопировать его, перейти на другую вкладку и вставить содержимое поле в поиск нажав ENTER , после поиска найти ссылку по классу, взять из найденной ссылки URL вернутся на начальную страницу и вставить URL в поле, заранее благодарю за помощь! Скрины подкрепил

Snake911

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Требуется взять содержимое с поля с одной вкладки, скопировать его, перейти на другую вкладку и вставить содержимое поле в поиск нажав ENTER , после поиска найти ссылку по классу, взять из найденной ссылки URL вернутся на начальную страницу и вставить URL в поле, заранее благодарю за помощь! Скрины подкрепил

Ссылка с который нужно взять URL находится в разных местах, нужно ее определить по классу либо айди

Атеист

  • Guest
... Скрины подкрепил
Скрины - это хорошо.
Ссылка с который нужно взять URL находится в разных местах, нужно ее определить по классу либо айди
Про классы и айди - непонятно ничего, нет таких букав на скринах. Как их "определить" то? В ТЗ чего то не хватает кажется.  ???

Snake911

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Если вы так уверены, что данный скрипт ПРОСТЕНЬКИЙ,то почему не напишите его самостоятельно?
Если бы у меня ума хватило довести это до ума , то я сам бы написал и не просил бы помощи)

Snake911

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
... Скрины подкрепил
Скрины - это хорошо.
Ссылка с который нужно взять URL находится в разных местах, нужно ее определить по классу либо айди
Про классы и айди - непонятно ничего, нет таких букав на скринах. Как их "определить" то? В ТЗ чего то не хватает кажется.  ???

Snake911

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Если вы так уверены, что данный скрипт ПРОСТЕНЬКИЙ,то почему не напишите его самостоятельно?
Если бы у меня ума хватило довести это до ума , то я сам бы написал и не просил бы помощи)
выходит; вы утверждаете, что лично у вас, не хватает ума даже на простенькие скрипты? ???
Я не нуждаюсь в ваших бесполезных комментариях! Я просил помощи у людей которые в этом разбираются, если вам нечем мне помочь, проходите мимо.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Кликер не умеет работать с классами или id HTML документа. Кликер больше по пикселам экрана.
Точнее, не умеет напрямую. Можно с плагином к мозиле меняющим стили подсветить элемент с нужным классом.

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


Атеист

  • Guest
Дело не в том, что кликер чего-то не умеет, а в засекреченности сайта, с которым нужно работать. С исходным кодом веб-страницы кликерман прекрасно разберется. Просто надо брать и пробовать. А пробовать то и не на чем... Давно бы уже что нибудь придумали.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Я и говорю, что стандартного простого метода нет, так чтоб дать универсальный пример.


Snake911

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Я и говорю, что стандартного простого метода нет, так чтоб дать универсальный пример.
Возможно лм реализовать поиск ссылки на странице по айди либо классу, чтоб кликер нашел ее на странице и кликнул на неё!?

Атеист

  • Guest
Возможно лм реализовать поиск ссылки на странице по айди либо классу, чтоб кликер нашел ее на странице и кликнул на неё!?
Да, возможно.
Code: (clickermann) [Select]
// Получаем исходный код страницы этого форума
$str = HTTPGET("http://crapware.aidf.org/forum/index.php?action=recent")
LOGWRITE ($str) // Выводим результат в лог
STRWRITELN("out.html", $str, 1) // Сохраняем результат в файл, с перезаписью файла (кодировка ANSI)
HALT

Затем находим в коде тег с нужным классом или id, берем из него в буфер обмена нужный текст и вставляем в нужное поле браузера.
Как закрепить элемент веб-страницы в браузере, для удобства, обсуждалось здесь.
Но не всё так просто и гладко. Не каждый сайт даст получить исходный код страницы без боя. Добавим сюда еще кавычки и кодировки.
Поэтому и нужно взглянуть на конкретный сайт, прежде чем давать советы.
Другой вариант - это распознавание текста и изображений на странице в браузере, там тоже не всё так просто. Но Clickermann это может сделать, если сможет человек.


UPD: Неудачную я ссылку выбрал для примера, один раз сработало и больше не хочет. Поменял ссылку на страницу Последние сообщения.
« Last Edit: June 21, 2017, 06:53:16 PM by Атеист »

Snake911

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Возможно лм реализовать поиск ссылки на странице по айди либо классу, чтоб кликер нашел ее на странице и кликнул на неё!?
Да, возможно.
Code: (clickermann) [Select]
// Получаем исходный код страницы этого форума
$str = HTTPGET("http://crapware.aidf.org/forum/index.php?action=recent")
LOGWRITE ($str) // Выводим результат в лог
STRWRITELN("out.html", $str, 1) // Сохраняем результат в файл, с перезаписью файла (кодировка ANSI)
HALT

Затем находим в коде тег с нужным классом или id, берем из него в буфер обмена нужный текст и вставляем в нужное поле браузера.
Как закрепить элемент веб-страницы в браузере, для удобства, обсуждалось здесь.
Но не всё так просто и гладко. Не каждый сайт даст получить исходный код страницы без боя. Добавим сюда еще кавычки и кодировки.
Поэтому и нужно взглянуть на конкретный сайт, прежде чем давать советы.
Другой вариант - это распознавание текста и изображений на странице в браузере, там тоже не всё так просто. Но Clickermann это может сделать, если сможет человек.


UPD: Неудачную я ссылку выбрал для примера, один раз сработало и больше не хочет. Поменял ссылку на страницу Последние сообщения.
Огромнейшее спасибо за разъяснение  :)!!
Ну если возможно то на примере ..Вот на http://hotline.ua этом сайте будет поиск элементов по классам

Атеист

  • Guest
Не поучилось у меня получить код станицы функцией HTTPGET().
Напишу как я бы сделал в таком случае. Потребуются утилиты командной строки.
Предположим, что мы знаем название товара который ищем. Дописываем к адресу сайта маску для поиска, в данном случае "/sr/?q=Vladi++140". Перейти по полученному адресу, все равно что заюзать поиск по сайту. Теперь надо получить исходник страницы http://hotline.ua/sr/?q=Vladi++140 и проверить есть ли там искомый товар. На странице могут уместиться только 20 товаров, остальные мы не увидим без дополнительных действий, поэтому запрос должен быть максимально точным.

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

Скачиваем утилиту "Swiss File Knife", чтобы заменить кавычки в коде страницы.
Code: (cmd) [Select]
sfk replace intput /\"/'/ -yes
Скачиваем утилиту "TCode", для смены кодировки страницы.
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-файл кликером по ходу выполнения сценария.

Вот такой простенький скрипт получается. :) Но всё вполне реализуемо.
Может кто-то предложит вариант проще с обработкой графики.
« Last Edit: June 22, 2017, 12:15:47 PM by Атеист »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Не поучилось у меня получить код станицы функцией HTTPGET().
Может потому что


Я же говорю, на кликере это в здравом уме не делают. Вот на питоне
[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]


Можно и в файл не выводить, сразу делать то, что нужно с сылкой
« Last Edit: June 22, 2017, 05:26:02 PM by Vint »