Ejemplo n.º 1
0
    def is_have_ticket(self, train_list):
        """是否有票"""

        # 二等座剩余数
        have_ticket_xpath = '//tbody[@id="queryLeftTable"]/tr/td[4]'
        have_ticket_list = ele_utils.get_include_hide_elements_for_wait(
            self.driver, By.XPATH, have_ticket_xpath, timeout=1)
        if not have_ticket_list:
            return False

        # 无座剩余数
        no_seat_xpath = '//tbody[@id="queryLeftTable"]/tr/td[11]'
        no_seat_list = ele_utils.get_include_hide_elements_for_wait(
            self.driver, By.XPATH, no_seat_xpath, timeout=1)
        if not no_seat_list:
            return False

        # 所有预订的按钮
        book_list_xpath = '//tbody[@id="queryLeftTable"]/tr/td[13]'
        book_list = ele_utils.get_include_hide_elements_for_wait(
            self.driver, By.XPATH, book_list_xpath)
        if not book_list:
            return False

        # 获取所有的车次号
        train_num_list_xpath = '//tbody[@id="queryLeftTable"]/tr/td/div/div/div/a'
        train_num_list = ele_utils.get_include_hide_elements_for_wait(
            self.driver, By.XPATH, train_num_list_xpath)
        if not train_num_list:
            return False

        total_train = len(train_num_list)
        if (total_train != len(have_ticket_list)) and (total_train !=
                                                       len(book_list)):
            return False
        for t in range(total_train):
            train_name = train_num_list[t].text
            # print(train_name)
            if train_name in train_list:
                remainder_ticket = have_ticket_list[t].text
                # print(remainder_ticket)
                if remainder_ticket == '有':
                    book_list[t].click()
                    return True
                if remainder_ticket.isdigit():
                    if int(remainder_ticket) > 0:
                        book_list[t].click()
                        return True
                no_seat_remainder = no_seat_list[t].text
                if no_seat_remainder == '有':
                    book_list[t].click()
                    return True
                if no_seat_remainder.isdigit():
                    if int(no_seat_remainder) > 0:
                        print("book_list_count:", len(book_list))
                        print("t:", t)
                        book_list[t].click()
                        return True
Ejemplo n.º 2
0
    def choose_date(self, day, is_left=True):
        """日期选择"""
        train_date_xpath = '//input[@id="train_date"]'
        train_date = ele_utils.get_include_hide_element_for_wait(
            self.driver, By.XPATH, train_date_xpath)
        if not train_date:
            return False
        time.sleep(2)
        train_date.click()

        if is_left == True:
            # 左边日期
            dates_xpath = '//div[@class="cal"]/div[2]/div[@class="cell"]/div'
        else:
            # 右边日期
            dates_xpath = '//div[@class="cal cal-right"]/div[2]/div[@class="cell"]/div'

        date_ele_list = ele_utils.get_include_hide_elements_for_wait(
            self.driver, By.XPATH, dates_xpath)
        if not date_ele_list:
            return False
        time.sleep(2)
        for date_ele in date_ele_list:
            # print(date_ele.text)
            if date_ele.text == day:
                date_ele.click()
                break
        return True
 def get_text_ele_list(self, texts_xpath, timeout=3):
     """
     :param texts_xpath: 文本xpath
     :param timeout: 请求超时
     """
     text_ele_list = ele_utils.get_include_hide_elements_for_wait(
         self.driver, By.XPATH, texts_xpath, timeout=timeout)
     if not text_ele_list:
         return None
     return text_ele_list
Ejemplo n.º 4
0
    def operate_event(self, data, bet_stake):
        ''' 找盘口,并打开 '''
        print '-------------operate_event----------'
        event_teams_xpath = '//span[@class="c-events__teams"]'
        while True:
            event_teams_ele_list = ele_utils.get_include_hide_elements_for_wait(self._driver,\
                By.XPATH, event_teams_xpath, 20)
            if not event_teams_ele_list:
                return False
            for event_team_ele in event_teams_ele_list:
                teams = event_team_ele.get_attribute('title').strip()
                if (not teams) and (self.event_team_split in teams):
                    return False
                home, away = teams.split(self.event_team_split)
                home_data = data.get('home', '')
                away_data = data.get('away', '')
                # 去掉(younth)
                delete_str = ' (youth)'
                replace_str = ''
                if (delete_str in home_data) and (delete_str in away_data):
                    home_data = home_data.replace(delete_str, replace_str)
                    away_data = away_data.replace(delete_str, replace_str)
                home_fuzzy_res = fuzz.ratio(home, home_data)
                away_fuzzy_res = fuzz.ratio(away, away_data)
                if (home_fuzzy_res >= 80) or (away_fuzzy_res >= 80):
                    event_team_ele.click()
                    break
            break

        href_num = 1
        while True:
            if href_num > 9:
                return False
            current_href = self._driver.current_url
            if current_href != self._init_url:
                break
            time.sleep(1)
            href_num += 1

        # 选择展示样式(单列)
        if not self.single_column():
            return False

        # 选择时间
        period = data.get('period', '')
        if period in mybooks.period_list:
            if not self.choose_period(period):
                return False
            if period == '1st quarter':
                period_kw = '. 1  Half '
            elif period == '2nd quarter':
                period_kw = '. 2  Half '
            else:
                return False
        else:
            period_kw = ''

        bet_name = data.get('bet_name', '')
        bet_value = data.get('bet_value', '0')
        if (bet_name in mybooks.bet_1x2_list) or (bet_name in\
            mybooks.bet_double_1x2_list):
            if not self.operate_1x2(bet_name, home, away, period_kw):
                return False
        elif bet_name in mybooks.bet_ou_list:
            if not self.operate_ou(bet_name, bet_value, period_kw):
                return False
        elif bet_name in mybooks.bet_ah_list:
            if not self.operate_ah(bet_name, bet_value, home, away, period_kw):
                return False
        else:
            return False

        koef = data.get('koef', '0')
        if not self.to_do_bet(koef, bet_stake):
            print '投注失败!'
            return False
        return True