Форум сайта python.su
-2
Здравствуйте! я здесь впервые и впервый раз буду писать программу на языке Python. Пока я ещё не знаю какой софт нужно скачать, чтоб можно было полноценно на компьютере с ОС Windows, создавать программы и их отлаживать, а так же получать контекстную помощь (help). Научите меня, подскажите название программ. Где их взять, я догадаюсь сам.
Офлайн
9
Для начала потребуется интерпретатор и текстовый редактор. В книге М. Лутца “Изучаем Python” довольно подробно описан процесс установки.
Офлайн
221
besogonskiy
если вы не догадались попробовать Google, то ваша судьба уже предначертана. На этом форуме даны ответы на ваши вопросы и не один раз,а вы….
Офлайн
-2
JOHN_16почитал я форум и гугл. скачал Ninja и PyCharm , но на форуме нет однозначного ответа какая система является самой лучшей. да и обсуждения там с 2006 годов - за это время всё поменяться могло.А вы уж могли бы и подсказать, вместо того, чтобы умничать, раз уж не пожалели времени ответить в этой ветке.
besogonskiyесли вы не догадались попробовать Google, то ваша судьба уже предначертана. На этом форуме даны ответы на ваши вопросы и не один раз,а вы….
Офлайн
568
почитал я форум и гугл. скачал Ninja и PyCharm , но на форуме нет однозначного ответа какая система является самой лучшей. да и обсуждения там с 2006 годов - за это время всё поменяться могло.А вы уж могли бы и подсказать, вместо того, чтобы умничать, раз уж не пожалели времени ответить в этой ветке.
скачал Ninja и PyCharmМа-ла-дец! Буквально, красавчик. Теперь быстро и решительно попробуй и то и другое и реши для себя, что тебе интересней, а не следуй примеру буриданова осла (тот плохо кончил).
Офлайн
-2
FishHookРыбаХук, а где здесь ошибка, скажи а?
Офлайн
568
какая ошибка? Сайт работает. 
Показывай скрипт сюда, будем разбираться в чем проблема
Офлайн
-2
FishHookна самом деле стыдно самому. Я попытаюсь разобраться сам. Но ввиду того, Что только Hello World удалось пока поднять, сразу не пойму что делать. вот скрипт. БУду сам разбираться но и здесь выложу.
какая ошибка? Сайт работает. Показывай скрипт сюда, будем разбираться в чем проблема
from selenium import webdriver from selenium.webdriver.common.keys import Keys import os, re, random, time with open('config.txt') as f: config = dict([tuple(line.split('//')[0].rstrip().split(':')) for line in f.read().splitlines()]) # Настройки with open('yndx.txt') as f: all_accounts = f.read().splitlines() # Все аккаунты для работы with open('yndx.txt') as f: login, pwd = [acc for acc in f.read().splitlines() if len(acc.split(':')) == 2][0].split(':') # Логин и пароль от аккаунта print u"\nБудем использовать аккаунт - %s\n" % login # ---------- Настройки company_number = int(config['start_number']) # Номер кампании company_name = config['company-name'] # Название кампании title = config['title'] # Заголовок объявления text = config['text'] # Текст объявления domain = config['domain'] # Домен используемый в объявлении keywords = config['keywords'] # Ключевые слова # ---------- def direct_starter(): # Функция запуска бота resp = '' # По умолчанию ответ не определен while resp != '0': # До тех пор остаемся в программе print u"Что будем делать?\n\n\t[any number] - Создать кампании в Я.Директе\n\t0 - Выход из программы\n" resp = str(raw_input('How much company do you wish to create?: ')) if not re.search('\d', resp): print u"\nНужно выбрать число! От 0 до 10\n"; continue if resp != '0': bot = Direct_BOT(int(resp)) # Запускаем бота на нужное количество действий bot.start() # Начинаем работу with open('yndx.txt', 'w') as f: # В конце работы перезаписываем файл с аккаунтами for acc in all_accounts: if login in acc: # Если аккаунт который мы использовали для работы попался на текущей итерации f.write('%s:%s\n' % (acc, keywords)) # Сохраняем его + ключевик else: f.write('%s\n' % acc) # Иначе оставляем все как есть class Direct_BOT(object): # Класс работы с Я.Директом def __init__(self, actions_number): # Конструктор self.actions_number = actions_number # Необходимое количество кампаний self.current_number = company_number # Текущий номер кампании self.space_number = 1 # Число пробелов которые мы ставим после названия кампании (перед цифрой) self.auth_again = False # Пометка об авторизции бота self.second_step_again = False # Пометка о проходе 2-ого шага создания объявления self.third_step_again = False # Пометка о проходе 3-ого шага создания объявления self.new_company_ckick = False # Пометка о клике по даче нового объявления self.br = webdriver.Firefox(); time.sleep(1) # Создаем браузер self.br.maximize_window() # И раскрываем его полностью def go_to_moderate(self): # Последний шаг, отправка кампании на модерацию try: self.br.find_element_by_xpath('//input[@id="accept"]').click(); time.sleep(random.uniform(1, 2)) # Говорим что согласны с условиями self.br.find_element_by_xpath('//input[@id="sbm_button"]').click() # Нажимаем кнопку "Заказать" while re.search(r'Контрольные цифры'.decode('cp1251'), self.br.page_source): # Если выпала капча print u"\n* ----- ВЫПАЛА КАПЧА, ВВЕДИТЕ ЕЁ ----- *\n"; time.sleep(random.uniform(5, 15)) except Exception as err: print u"\nВозникла ошибка - '%s' на этапе отправки объявления на модерацию, спим и пробуем заного ...\n" % str(err); time.sleep(random.uniform(1, 3)); return 0 return True # Если успешно прошли данный этап - переходим к следующему def third_step(self): # Проходим третий шаг создания кампании try: print u"Минимальная цена клика по первому ключевику - %s, устанавливаем её ..." % self.min_price self.br.find_element_by_name('val-0_1').click(); time.sleep(random.uniform(1, 1)) # Кликаем по текущему значению цены for i in range(7): self.br.find_element_by_name('val-0_1').send_keys((lambda: self.third_step_again and u'\ue003' or u'\ue017')()); time.sleep(.1) # Удаляем нули с точкой 4 раза (в сумме) self.br.find_element_by_name('val-0_1').send_keys(str(random.randint(50, 299))); time.sleep(random.uniform(1, 1)) # Устанавливаем цену клика self.br.find_element_by_name('val-0_1').send_keys(Keys.RETURN); time.sleep(random.uniform(1, 1)) # И нажимаем Enter self.br.find_element_by_xpath('//input[@class="b-form-footer__action b-edit-prices-form__submit"]').click(); time.sleep(random.uniform(1, 3)) # Переходим к премодерации self.br.find_elements_by_xpath('//input[@type="submit"]')[1].click(); time.sleep(random.uniform(1, 3)) # Отправляем кампанию на модерацию while re.search(r'Контрольные цифры'.decode('cp1251'), self.br.page_source): # Если выпала капча print u"\n* ----- ВЫПАЛА КАПЧА, ВВЕДИТЕ ЕЁ ----- *\n"; time.sleep(random.uniform(5, 15)) self.third_step_again = True # Делаем пометку о том, что мы уже проходили 1 раз 3-ий этап создания объявления except Exception as err: print u"\nВозникла ошибка - '%s' на 3 этапе создания объявления, спим и пробуем заного ...\n" % str(err); time.sleep(random.uniform(1, 3)); return 0 return True # Если успешно прошли данный этап - переходим к следующему def second_step(self): # Проходим второй шаг создания кампании try: if self.second_step_again: # Если ранее на втором шаге была ошибка и мы начали его по новой - стираем оставшиеся поля print u"Второй шаг уже был ранее пройден, значит очищаем оставшиеся поля ..." self.br.find_element_by_xpath('//div[@class="b-spell-checker__frame"]').clear(); time.sleep(.5) self.br.find_element_by_xpath('//div[@class="b-spell-checker__frame b-spell-checker__frame_multiline_yes"]').clear(); time.sleep(.5) self.br.find_element_by_xpath('//input[@class="b-form-input__input b-banner-form-href__href CopyForms-Url"]').clear(); time.sleep(.5) self.br.find_element_by_xpath('//textarea[@class="wide mandatory b-word-suggestions__phrases"]').clear(); time.sleep(.5) self.br.find_element_by_xpath('//div[@class="b-spell-checker__frame"]').send_keys(title.decode('cp1251')); time.sleep(random.uniform(1, 1)) # Вставляем заголовок объявления self.br.find_element_by_xpath('//div[@class="b-spell-checker__frame b-spell-checker__frame_multiline_yes"]').send_keys(text.decode('cp1251')); time.sleep(random.uniform(1, 1)) # Вставляем текст объявления self.br.find_element_by_xpath('//input[@class="b-form-input__input b-banner-form-href__href CopyForms-Url"]').send_keys(domain.decode('cp1251')); time.sleep(random.uniform(1, 1)) # Вставляем ссылку объявления self.br.find_element_by_xpath('//textarea[@class="wide mandatory b-word-suggestions__phrases"]').send_keys(keywords.decode('cp1251')); time.sleep(random.uniform(1, 1)) # Вставляем ключи объявления self.br.find_element_by_xpath('//input[@class="b-banner-edit-validate__submit"]').click(); time.sleep(random.uniform(1, 3)) # Переходим ко третьему этапу while re.search(r'Контрольные цифры'.decode('cp1251'), self.br.page_source): # Если выпала капча print u"\n* ----- ВЫПАЛА КАПЧА, ВВЕДИТЕ ЕЁ ----- *\n"; time.sleep(random.uniform(5, 15)) self.second_step_again = True # Делаем пометку о том что второй шаг уже пройден self.min_price = re.findall(r'class="b-phrases-list-phrase__min">(.+?)<', self.br.page_source)[0] # Ловим минимальную цену клика except Exception as err: print u"\nВозникла ошибка - '%s' на 2 этапе создания объявления, спим и пробуем заного ...\n" % str(err); time.sleep(random.uniform(1, 3)); return 0 return True # Если успешно прошли данный этап - переходим к следующему def first_step(self): # Проходим первый шаг создания кампании try: # self.br.find_element_by_name('name').clear(); time.sleep(random.uniform(1, 1)) # Очищаем название кампании по умолчанию # self.br.find_element_by_name('name').send_keys(company_name.lower().decode('cp1251')); time.sleep(random.uniform(1, 1)) # Устанавливаем название кампании # self.br.find_element_by_name('name').send_keys('%s%i' % (' ' * self.space_number, self.current_number)); time.sleep(random.uniform(1, 1)) # Дополняем название текущим номером кампании self.br.find_element_by_xpath('//input[@class="b-campaign-edit__submit"]').click(); time.sleep(random.uniform(1, 3)) # Переходим ко второму этапу while re.search(r'Контрольные цифры'.decode('cp1251'), self.br.page_source): # Если выпала капча print u"\n* ----- ВЫПАЛА КАПЧА, ВВЕДИТЕ ЕЁ ----- *\n"; time.sleep(random.uniform(5, 15)) if not self.second_step_again: self.br.find_element_by_xpath('//span[@class="b-form-switch__button"]').click(); time.sleep(random.uniform(1, 2)) # Говорим что у нас нету адреса и телефона except Exception as err: print u"\nВозникла ошибка - '%s' на 1 этапе создания объявления, спим и пробуем заного ...\n" % str(err); time.sleep(random.uniform(1, 3)); self.space_number += 1; return 0 return True # Если успешно прошли данный этап - переходим к следующему def auth(self): # Авторизация и проверка выбора интерфейса try: if not self.auth_again: # Если еще ниразу не авторизовывались self.br.get('https://passport.yandex.ru/passport?mode=auth&msg=direct&retpath=https%3A%2F%2Fdirect.yandex.ru%2Fregistered%2Fmain.pl'); time.sleep(random.uniform(2, 5)) # Переходим на страницу авторизации Я.Директа self.br.find_element_by_name('login').send_keys(login); time.sleep(random.uniform(1, 1)) # Вводим логин self.br.find_element_by_name('passwd').send_keys(pwd); time.sleep(random.uniform(1, 1)) # Вводим пароль self.br.find_element_by_xpath('//input[@type="submit"]').click(); time.sleep(random.uniform(1, 2)) # Входим в систему self.auth_again = True # Пометка о том, что следующая авторизация - повторная else: # Если уже авторизовались self.br.get('https://direct.yandex.ru/registered/main.pl?cmd=editCamp&new_camp=1&mediaType=text'); time.sleep(random.uniform(1, 3)) # Тогда просто нажимаем кнопку создания объявления self.new_company_ckick = True # Помечаем что мы уже кликнули на эту кнопку while re.search(r'Контрольные цифры'.decode('cp1251'), self.br.page_source): # Если выпала капча print u"\n* ----- ВЫПАЛА КАПЧА, ВВЕДИТЕ ЕЁ ----- *\n"; time.sleep(random.uniform(5, 15)) try: try: self.br.find_element_by_xpath("//select[@class='b-choose-country__select']/option[@value='225']").click(); time.sleep(random.uniform(1, 1)) # Выбираем Россию except: time.sleep(1) self.br.find_element_by_xpath('//input[@id="b-choose-interface-type__radio-std"]').click(); time.sleep(random.uniform(1, 1)) # Выбираем профессиональный интерфейс self.br.find_element_by_xpath('//input[@type="submit"]').click(); time.sleep(random.uniform(1, 3)) # Продолжаем except Exception as err: # Если на этом аккаунте уже есть созданные кампании print u"Выбор интерфейса не требуется, на аккаунте %s уже есть созданные кампании ...\n" % login if not self.new_company_ckick: self.br.get('https://direct.yandex.ru/registered/main.pl?cmd=editCamp&new_camp=1&mediaType=text'); time.sleep(random.uniform(1, 3)) # Тогда просто нажимаем кнопку создания объявления except Exception as err: print u"\nВозникла ошибка - '%s' на этапе авторизации, спим и пробуем заного ...\n" % str(err); time.sleep(random.uniform(1, 3)); return 0 return True # Если успешно прошли данный этап - переходим к следующему def start(self): # Создание браузера и контроль за работой бота auth, step1, step2, step3, moderate = False, False, False, False, False # По умолчанию ни 1 из действий не сделано print u"\nВыбранное количество действий - '%i', запускаем бота ...\n" % self.actions_number for i in range(self.actions_number): # Создаем необходимое количество кампаний # --------------- Блок создания кампании while not auth: auth = self.auth(); time.sleep(1) # Авторизуемся и проверяем, есть уже кампании или нет while not step1: step1 = self.first_step(); time.sleep(1) # Устанавливаем основную информацию while not step2: step2 = self.second_step(); time.sleep(1) # Устанавливаем параметры объявления while not step3: step3 = self.third_step(); time.sleep(1) # Устанавливаем цену клика по ключевикам while not moderate: moderate = self.go_to_moderate(); time.sleep(1) # Отправляем новую кампанию на модерацию print u"\n\n* ----- Кампания '%s %i' создана! ----- *\n\n" % (company_name.decode('cp1251'), self.current_number) self.current_number += 1 # В конце увеличиваем номер кампании для всех последующих (что бы не сливались) self.space_number = 1 # Восстанавливаем число пробелов по умолчанию auth, step1, step2, step3, moderate = False, False, False, False, False # Снимаем успешность всех этапов (т.к. проходим круг заного) self.second_step_again = False # Снимаем пометку о том, что второй шаг уже пройден (т.к. создаем новое объявление) self.third_step_again = False # Снимаем пометку о том, что третий шаг уже пройден (т.к. создаем новое объявление) self.new_company_ckick = False # Снимаем пометку о том что мы кликали на кнопку по даче объявления time.sleep(random.uniform(3, 7)) # После создания каждой кампании - спим # --------------- direct_starter(); raw_input('\nPress Enter to exit: ') def timer(func): # Бенчмарк def wrapper(): t1 = time.clock() print u"Direct_BOT начинает работу ...\n" func() print u"\nDirect_BOT завершил работу за - %.2f секунд" % (time.clock() - t1) return wrapper
Отредактировано FishHook (Дек. 8, 2013 12:16:41)
Офлайн
0
besogonskiy
Здравствуйте! я здесь впервые и впервый раз буду писать программу на языке Python. Пока я ещё не знаю какой софт нужно скачать, чтоб можно было полноценно на компьютере с ОС Windows, создавать программы и их отлаживать, а так же получать контекстную помощь (help). Научите меня, подскажите название программ. Где их взять, я догадаюсь сам.
Отредактировано mabut (Дек. 8, 2013 12:08:48)
Офлайн
568
besogonskiyЭто хорошо, а какая ошибка то?
на самом деле стыдно самому. Я попытаюсь разобраться сам.
Офлайн