硒的软件给出断言python3

时间:2018-10-03 08:20:11

标签: python python-3.x selenium

我正在尝试为IQO创建自动交易二进制程序的机器人。我想拥有一种人性化的感觉。因此,我决定将Selenium与Chrome浏览器一起使用。我没有开始,因此尝试了以下脚本,但发现了错误:

my_dist_calculator <- function(a, b, metric = "euclidean"){
  if(metric == "manhattan"){
    mydistance<-function(a,b){
      d<-abs(a-b)
      d<-sum(d)
      return(d)
    }

  }else{
    mydistance<- function(a, b){
      d<-(a-b)^2
      d<-sum(d)
      d<-sqrt(d)
      return(d)
    }

  }

  return(mydistance(a,b)) ### <------ mydistance changed to mydistance(a,b)
}
a = c(1.7, 5)
b = c(4, 72)

my_dist_calculator(a, b, metric = "manhattan")
my_dist_calculator(a, b)

我得到的错误如下:

#!/usr/bin/python
# -*- coding: utf8 -*-

__author__ = 'Testing'
from win32gui import FindWindow, FindWindowEx, SendMessage
from win32con import EM_GETLINE
import random
from struct import pack
from time import localtime, strftime, sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.common.exceptions import NoSuchElementException, ElementNotVisibleException
from optparse import OptionParser

#Config
URL = 'https://iqoption.com/en'
TITLE_ENG = 'Alert'
WINDOW_ID = '#32770'
TIMEOUT = 10
BUY_TEXT = 'Buy'
SELL_TEXT = 'Sell'
TURBO = 'Турбо опцион'
BIN = 'Бинарный опцион'
TEST_MESSAGES = ['Buy', 'Sell']
MODES = ['test', 'real', 'demo']

#Locators
LOGIN_BUTTON = '//button[@ng-click="login()"]'
EMAIL = '//input[@name="email"]'
PASSWORD = '//input[@name="password"]'
SUBMIT = '//button[@type="submit"]'
BUY_UP_BUTTON = '//button[contains(@ng-click,"call")]'
BUY_DOWN_BUTTON = '//button[contains(@ng-click,"put")]'
BUY_UP_CONFIRM_BUTTON = '//button[contains(@ng-show, "call")][text()="Купить"]'
BUY_DOWN_CONFIRM_BUTTON = '//button[contains(@ng-show, "put")][text()="Купить"]'
CONTINUE_DEMO_BUTTON = """//button[contains(@ng-click, "opt.game.newRate()")]
[text()="Продолжить демо-торги"]"""
CONTINUE_REAL_BUTTON = """//button[contains(@ng-click, "opt.game.newRate()")]
[text()="Новый опцион"]"""
BALANCE = '//a[contains(@value,"user.profile.balance")]'
CLOSE_BUTTON = '//button[@ng-click="close()"][text()="Закрыть"]' 
NAV_BAR = 'bs-example-navbar-collapse-1'
TURBO_BUTTON = '//a[@href="/ru/options/turbo"]'
BIN_BUTTON = '//a[@href="/ru/options/binary"]'
LANG_CNTRL = '//ul[@ng-controller="ChangeLangCtrl"]'
DROPDOWN_MENU = '//ul[@class="dropdown-menu"]'
ENG_LANG = '/li/a[text()="English"]'
RUS_LANG = '/li/a[text()="Русский"]'
CONSPIRACY_TIME_CNTRL = '//div[@ng-change="opt.onChangeTime(opt.data.expTime)"]'
SOUND_BUTTON = '//div[@ng-show="sound"]'
ACTIVE_CNTRL = '//ul[contains(@class, "all-actives")]'
PAIRS_TAB = '//a[contains(text(), "Валютные пары")]'
ACTIVE_BUTTON = '//div[contains(@class, "active")]/div/table'
DEPOSIT_BUTTON = '//input[@name="deposit"]'


class Iq():
    """
    Iq-bot class
    """

    def __init__(self, *args):
        self.user = OPTIONS.user
        self.pwd = OPTIONS.pwd
        self.mode = OPTIONS.mode
        self.option = OPTIONS.option
        self.lang = OPTIONS.lang
        self.active = OPTIONS.active
        self.sound = OPTIONS.sound
        self.bet = OPTIONS.bet
        self.chrome = OPTIONS.chrome
        self.time = strftime("%Y-%m-%d %H:%M:%S", localtime())
        self.chrome_options = webdriver.ChromeOptions()
        if self.chrome: 
            self.chrome_options.add_argument(self.chrome)
        self.browser = webdriver.Chrome(chrome_options=self.chrome_options)
        self.browser.implicitly_wait(TIMEOUT)
        self.start_session(self.mode)

    @property
    def get_time(self):
        """ Получаем текущее локальное время """
        return self.time

    def check_login(self):
        """ Ищем кнопку логина """
        try:
            self.browser.find_element_by_xpath(LOGIN_BUTTON)
            return False
        except NoSuchElementException:
            assert 0, 'Не могу найти элемент %s' % LOGIN_BUTTON
            return True

    def get_balance(self):
        """ Получаем текущий баланс """
        balance = self.browser.find_element_by_xpath(BALANCE).text
        return balance.replace(' ', '')

    def wait_navbar(self):
        """Ожидание появления NAV_BAR"""
        WebDriverWait(self.browser, 10).until(ec.presence_of_element_located(
            (By.ID, NAV_BAR)))

    def login_action(self):
        """ Логинимся """
        if not self.check_login():
            print('%s Логинемся на %s' % (self.get_time, URL))
            self.browser.find_element_by_xpath(LOGIN_BUTTON).click()
            self.browser.find_element_by_xpath(EMAIL).send_keys(self.user)
            self.browser.find_element_by_xpath(PASSWORD).send_keys(self.pwd)
            self.browser.find_element_by_xpath(SUBMIT).click()
            self.wait_navbar()
        else:
            print('%s Уже залогинен' % self.get_time)

    def get_windows_title(self):
        """ Язык Title для окна MT Alert """
        if self.lang == 'eng':
            return TITLE_ENG
        return TITLE_RUS

    def get_message_text(self):
        """ Получаем win32 MT Alert window/panel/message Текст """
        title = self.get_windows_title()
        window = FindWindow(WINDOW_ID, title)
        panel = FindWindowEx(window, 0, "Edit", None)
        bufferlength = pack('i', 255)
        linetext = bufferlength + "".ljust(253)
        linelength = SendMessage(panel, EM_GETLINE,
                                 0, linetext)
        text = ''.join(linetext[:linelength])
        return text

    def continue_button_exist(self, mode):
        """ Ищем кнопку Продолжить торги """
        try:
            if mode == 'real':
                return self.browser.find_element_by_xpath(CONTINUE_REAL_BUTTON)
            else:
                return self.browser.find_element_by_xpath(CONTINUE_DEMO_BUTTON)
        except (NoSuchElementException, ElementNotVisibleException):
            return False

    def error_button_exist(self):
        """ Ищем кнопку Закрыть """
        try:
            self.browser.find_element_by_xpath(CLOSE_BUTTON)
            return True
        except (NoSuchElementException, ElementNotVisibleException):
            return False

    def error_window_close():
        """Зыкрываем окно с ошибкой"""
        try:
            self.browser.find_element_by_xpath(CLOSE_BUTTON).click()
        except (NoSuchElementException, ElementNotVisibleException):
            return False

    def continue_action(self, mode):
        """ Нажимаем кнопку Продолжить торги """
        while not self.continue_button_exist(mode):
            pass
        try:
            self.continue_button_exist(mode).click()
        except (NoSuchElementException, ElementNotVisibleException):
            return False

    def sell_buy_action(self, updated_message):
        """ Покупаем/продаем """
        if BUY_TEXT in updated_message:
            print('%s Покупаем' % self.get_time)
            self.browser.find_element_by_xpath(BUY_UP_BUTTON).click()
            sleep(1) # For test only
            try:
                self.browser.find_element_by_xpath(BUY_UP_CONFIRM_BUTTON).click()
            except NoSuchElementException:
                return False
        elif SELL_TEXT in updated_message:
            print('%s Продаем' % self.get_time)
            self.browser.find_element_by_xpath(BUY_DOWN_BUTTON).click()
            sleep(1) # For test only
            try:
                self.browser.find_element_by_xpath(BUY_DOWN_CONFIRM_BUTTON).click()
            except NoSuchElementException:
                return False
        else:
            print('%s Нет информации о продаже/покупке' % self.get_time)

    def check_result(self, begin_balance):
        """ Получаем новый баланс """
        print('%s Ждем результата' % self.get_time)
        sleep(TIMEOUT)  # Необходимо подождать прогрузку баланса
        end_balance = self.get_balance()
        profit = float(end_balance) - float(begin_balance)
        if float(end_balance) > float(begin_balance):
            print('%s Новый баланс = %s(''+''%s)' % (self.get_time,
                                                      end_balance, profit))
        else:
            print('%s Новый баланс = %s(%s)' % (self.get_time,
                                                 end_balance, profit))

    def wait_message_update(self, work_message):
        """ Проверяем уникальность сообщения """
        print('%s Ждем сообщение от MT alert' % self.get_time)
        while work_message == self.get_message_text():
            pass
        print('%s Сообщение от MT Alert: "%s"' % (self.get_time,
                                                   self.get_message_text()))
        updated_message = self.get_message_text()
        return updated_message

    def select_option(self):
        """ Переходим в раздел опциона """
        if self.option == 'turbo':
            print('%s Переходим на %s' % (self.get_time, TURBO))
            self.browser.find_element_by_xpath(TURBO_BUTTON).click()
        elif self.option == 'bin':
            print('%s Переходим на %s' % (self.get_time, BIN))
            self.browser.find_element_by_xpath(BIN_BUTTON).click()
        else:
            assert 0, '%s Неверно указан опцион для торговли %s' % (self.get_time, self.option)

    def select_active(self):
        """ Выбираем актив торовли """
        if self.active:
            print('%s Выбираем актив %s' % (self.get_time, self.active))
            try:
                self.browser.find_element_by_xpath(ACTIVE_CNTRL).click()
                try:
                    self.browser.find_element_by_xpath(PAIRS_TAB).click()
                    try:
                        self.browser.find_element_by_xpath(ACTIVE_BUTTON+'//span[text()="'+self.active.upper()+'"]').click()
                    except NoSuchElementException:
                        assert 0, '%s Не могу найти элемент %s' % (self.get_time, PAIRS_TAB)        
                except NoSuchElementException:
                    assert 0, '%s Не могу найти элемент %s' % (self.get_time, PAIRS_TAB)
            except NoSuchElementException:
                assert 0, '%s Не могу найти элемент %s' % (self.get_time, ACTIVE_CNTRL)

    def select_conspiracy_time(self):
        """ Выбираем последнее время конспирации """
        if self.option == 'turbo':
            try:
                button = self.browser.find_element_by_xpath(CONSPIRACY_TIME_CNTRL).click()
                try:
                    times = self.browser.find_elements_by_xpath(CONSPIRACY_TIME_CNTRL+DROPDOWN_MENU+'//li/a')
                    element = times[3] # Последний элемент в списке
                    print('%s Выбираем время конспирации %s' % (self.get_time, element.text))
                    element.click()
                except NoSuchElementException:
                    assert 0, '%s Не могу найти элемент %s' % (self.get_time, select_time)
            except NoSuchElementException:
                assert 0, '%s Не могу найти элемент %s' % (self.get_time, button)

    def select_language(self):
        """ Выбираем язык страницы """
        if self.lang == 'rus':
            try:
                button = self.browser.find_element_by_xpath(LANG_CNTRL)
                button.click()
                try:
                    rus_lang = self.browser.find_element_by_xpath(LANG_CNTRL+DROPDOWN_MENU+RUS_LANG)
                    rus_lang.click()
                except NoSuchElementException:
                    assert 0, '%s Не могу найти элемент %s' % (self.get_time, rus_lang)
            except NoSuchElementException:
                assert 0, '%s Не могу найти элемент %s' % (self.get_time, button)

    def turn_off_sound(self):
        """ Выключаем звук """
        if self.sound == 'off':
            try:
                print('%s Выключаем звук' % (self.get_time))
                self.browser.find_element_by_xpath(SOUND_BUTTON).click()
            except (NoSuchElementException, ElementNotVisibleException):
                return False
        elif self.sound == 'on':
            pass

    def select_bet(self):
        """ Выбираем текущую ставку"""
        if self.bet:
            try:
                print('%s Выбираем текущую ставку %s' % (self.get_time, self.bet))
                element = self.browser.find_element_by_xpath(DEPOSIT_BUTTON)
                element.clear()
                element.send_keys(self.bet)
            except (NoSuchElementException, ElementNotVisibleException):
                return False

    def select_work_time(self):
        """ Выбираем время работы """
        pass

    def start_session(self, mode):
        """ Запуск сессии """
        print('%s started %s' % (self.get_time, mode))
        self.browser.get(URL)
        self.login_action()
        self.turn_off_sound()
        #self.select_language() #For future mb
        self.select_option()
        self.select_active()
        print('%s Начальный баланс: %s' % (self.get_time, self.get_balance()))
        print('-' * 19)
        while True:
            begin_balance = self.get_balance()
            if mode == 'test':
                updated_message = random.choice(TEST_MESSAGES)
            else:
                work_message = self.get_message_text()
                updated_message = self.wait_message_update(work_message)
            self.select_conspiracy_time()
            self.select_bet()
            self.sell_buy_action(updated_message)
            if self.error_button_exist():
                self.error_window_close()
                self.sell_buy_action(updated_message)
            self.continue_action(mode)
            self.check_result(begin_balance)
            print('-' * 19)

    def stop_session(self):
        """ Close Browser """
        self.browser.quit()


if __name__ == '__main__':
    PARSER = OptionParser(usage="""Usage: iq.py
        -u <""""""Email пользователя>
        -p <""""""Пароль пользователя>
        -m <""""""Выбор режима работы [demo, real, test]>
        -o <""""""Выбор опциона [turbo, bin]>
        -l <""""""Выбор языка MT alert окна [eng, rus]>
        -a <""""""Выбор актива [eur/usd, aud/cad]>
        -c <""""""Опции для запуска Chrome>
        -s <""""""Вкл/Выкл звуки страницы [on, off]>
        -b <""""""Текущая ставка>""",
                          version='1.0')
    PARSER.add_option('-u', '--user',
                      dest='user',
                      default='',
                      help='Email пользователя', )
    PARSER.add_option('-p', '--pwd',
                      dest='pwd',
                      default='',
                      help='Пароль пользователя', )
    PARSER.add_option('-m', '--mode',
                      dest='mode',
                      default='',
                      help='Выбор режима работы [demo, real, test]', )
    PARSER.add_option('-o', '--option',
                      dest='option',
                      default='bin',
                      help='Выбор опциона (bin or turbo)', )
    PARSER.add_option('-l', '--lang',
                      dest='lang',
                      default='eng',
                      help='Выбор языка MT alert окна (rus or eng)', )
    PARSER.add_option('-a', '--active',
                      dest='active',
                      default='eur/usd',
                      help='Выбор актива', )
    PARSER.add_option('-c', '--chrome',
                      dest='chrome',
                      default='',
                      help='Опции для Chrome browser (http://peter.sh/experiments/chromium-command-line-switches/)', )
    PARSER.add_option('-s', '--sound',
                      dest='sound',
                      default='off',
                      help='Вкл/Выкл звуки страницы', )
    PARSER.add_option('-b', '--bet',
                      dest='bet',
                      default='1',
                      help='Текущая ставка', )

    (OPTIONS, ARGS) = PARSER.parse_args()

    if not OPTIONS.user:
        PARSER.error('Не указан Email пользователя')
    if not OPTIONS.pwd:
        PARSER.error('Не указан Пароль пользователя')
    if not OPTIONS.mode:
        PARSER.error('Не указан Режим работы')
    if not OPTIONS.mode in MODES:
        PARSER.error('Неверно указан Режим работы')

    Iq(OPTIONS)

请帮助我链接遗漏的点,以便使我了解如何使该过程适用于自动过程。

0 个答案:

没有答案