Найти - Пользователи
Полная версия: самый первый вопрос новичка. Какую среду разработки скачать чтоб начать работать?
Начало » Python для новичков » самый первый вопрос новичка. Какую среду разработки скачать чтоб начать работать?
1 2
besogonskiy
Здравствуйте! я здесь впервые и впервый раз буду писать программу на языке Python. Пока я ещё не знаю какой софт нужно скачать, чтоб можно было полноценно на компьютере с ОС Windows, создавать программы и их отлаживать, а так же получать контекстную помощь (help). Научите меня, подскажите название программ. Где их взять, я догадаюсь сам.
alexsis
Для начала потребуется интерпретатор и текстовый редактор. В книге М. Лутца “Изучаем Python” довольно подробно описан процесс установки.
JOHN_16
besogonskiy
если вы не догадались попробовать Google, то ваша судьба уже предначертана. На этом форуме даны ответы на ваши вопросы и не один раз,а вы….
besogonskiy

JOHN_16
besogonskiyесли вы не догадались попробовать Google, то ваша судьба уже предначертана. На этом форуме даны ответы на ваши вопросы и не один раз,а вы….
почитал я форум и гугл. скачал Ninja и PyCharm , но на форуме нет однозначного ответа какая система является самой лучшей. да и обсуждения там с 2006 годов - за это время всё поменяться могло.А вы уж могли бы и подсказать, вместо того, чтобы умничать, раз уж не пожалели времени ответить в этой ветке.
FishHook
почитал я форум и гугл. скачал Ninja и PyCharm , но на форуме нет однозначного ответа какая система является самой лучшей. да и обсуждения там с 2006 годов - за это время всё поменяться могло.А вы уж могли бы и подсказать, вместо того, чтобы умничать, раз уж не пожалели времени ответить в этой ветке.

Как бы Вам сказать, чтобы не обидеть.
Вы, когда жениться соберётесь, не спрашивайте у друзей, какая невеста самая красивая ибо мнение большинства вполне может не совпадать с Вашими вкусами.
скачал Ninja и PyCharm
Ма-ла-дец! Буквально, красавчик. Теперь быстро и решительно попробуй и то и другое и реши для себя, что тебе интересней, а не следуй примеру буриданова осла (тот плохо кончил).
besogonskiy
FishHook
РыбаХук, а где здесь ошибка, скажи а?
http://millioner-online.ru/avtomatizaciya-yandeks-direkt

чето у моего друга этот скрипт не запускается, пришлось мне самому взяться за питон, хотя мне и своего родного 1С хватало для того, чтоб жить безбедно и иметь кучу возможностей иметь и известность и авторитет и востребованность. Но что поделать ради того, чтоб помочь другу, можно и Python освоить
FishHook
какая ошибка? Сайт работает.
Показывай скрипт сюда, будем разбираться в чем проблема
besogonskiy
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
mabut
besogonskiy
Здравствуйте! я здесь впервые и впервый раз буду писать программу на языке Python. Пока я ещё не знаю какой софт нужно скачать, чтоб можно было полноценно на компьютере с ОС Windows, создавать программы и их отлаживать, а так же получать контекстную помощь (help). Научите меня, подскажите название программ. Где их взять, я догадаюсь сам.

pycarm от jetbrains, sublime Кстати pypy быстрее стандартного интерпретатора python, если много обсчитывать))
FishHook
besogonskiy
на самом деле стыдно самому. Я попытаюсь разобраться сам.
Это хорошо, а какая ошибка то?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB