Exemple #1
0
def enable():
    import time
    import requests
    import settings
    from splinter import Browser
    from xvfbwrapper import Xvfb

    print "Trying to enable myself."
    vdisplay = Xvfb()
    vdisplay.start()


    email = settings.getEmail()
    password = settings.getPassword()
    team_name = settings.getTeamName()
    bot_user = settings.getBotUser()

    browser = Browser('chrome')
    url = 'https://{}.slack.com/services/{}'.format(team_name, bot_user)
    browser.visit(url)
    browser.fill('email', email)
    browser.fill('password', password)
    browser.find_by_id('signin_btn').first.click()
    browser.find_link_by_text('Enable').first.click()
    time.sleep(2) # Sometimes I saw a crash where there was no alert, so we'll wait a bit first.
    alert = browser.get_alert()
    alert.accept()
    time.sleep(2) # If you close the display too quickly, the request doesn't get processed.

    vdisplay.stop()
Exemple #2
0
def lj():
    global b
    b = Browser(driver_name='firefox')
    b.visit(url)
    b.execute_script('alert("Begin input!~~~")')
    time.sleep(1)
    b.get_alert().dismiss()

    while b.is_element_present_by_id("cmdOK"):
        login()
        if b.url == init_url:
            break
    b.find_by_text(u"展开全部").click()
    time.sleep(1)
    b.find_by_xpath(".//*[@id='ext-gen74']/li[1]/div/a/span").click()
    b.driver.switch_to_frame("dynamic_added_tabxnode1")
    while b.is_element_not_present_by_xpath(
            ".//*[@id='ext-gen45']/div[2]/table/tbody/tr/td[7]/div/a/img"):
        time.sleep(2)
        continue
    b.find_by_xpath(
        ".//*[@id='ext-gen45']/div[3]/table/tbody/tr/td[7]/div/a/img").click()

    b.driver.switch_to_default_content()
    b.driver.switch_to_frame("ext-gen107")
    while b.is_element_not_present_by_xpath(".//*[@id='t101003015']"):
        time.sleep(2)
        continue
    b.find_by_xpath(".//*[@id='t101003015']").click()

    b.find_by_xpath(".//*[@id='101003015']/div[4]").click()
    b.driver.switch_to_frame("ext-gen18")
    while b.is_element_not_present_by_text(u"重新选择"):
        time.sleep(2)
        continue
    b.find_by_text(u"重新选择").click()
Exemple #3
0
def login(user, pwd, dir):
    DiverUrl = dir + "\\driver\\chromedriver.exe"
    executable_path = {'executable_path': DiverUrl}
    if not os.path.exists(dir + "\\temp"):
        os.mkdir(dir + "\\temp")
    imagURL = dir + "\\temp\\ocr.jpg"
    loginFlag = True
    dailyFlag = True
    browser = Browser("chrome", **executable_path)
    while (loginFlag or dailyFlag):  #循环直到打卡成功
        try:
            alert = browser.get_alert()  #如果有代理登陆提示,则点击取消
        except Exception:
            pass
        else:
            alert.dismiss()
        try:
            if loginFlag:  #将登陆与打卡动作分离,便于判断
                browser.visit("http://kq.neusoft.com")
                input = browser.find_by_tag("input")
                input[4].fill(user)
                input[5].fill(pwd)
                screenshot_path = browser.find_by_id(
                    "tbLogonPanel").screenshot(
                        imagURL, full=True
                    )  #因单独截取验证码图片会出现偏离而无法识别,故而截取整个Form,再对识别结果进行处理,最终返回一个截图的路径
                ocrResult = imgOcr(screenshot_path)
                os.remove(screenshot_path)  #删除验证码截图
                if ocrResult is 0:  #避免识别错误导致页面刷新从而出现bug
                    logOut("图片路径:" + screenshot_path + ",识别失败")
                    continue
                print(time.strftime("%D %H:%M:%S", time.localtime()),
                      "识别验证码为:", ocrResult)
                input[6].fill(ocrResult)  #填入验证码识别结果
                browser.find_by_id("loginButton").click()  #点击登陆按钮
                if browser.is_text_present('打卡'):
                    loginFlag = False
                    logOut("登陆成功")
            if dailyFlag:
                timeNow = time.strftime("%H:%M", time.localtime())
                browser.find_by_text("打卡").first.click()  #直接执行js语句
                if browser.find_by_tag("tr").last.find_by_tag(
                        "td").last.text[0:5] == timeNow:
                    dailyFlag = False
                    logOut("打卡成功")
        except Exception as identify:
            logOut("打卡失败:" + str(identify))  #直接进入下一循环
    browser.quit()
Exemple #4
0
browser.fill('Skin$ctl08$LoginPasswordText', config.password)

browser.find_by_name('Skin$ctl08$ctl14').click()
browser.click_link_by_text(config.jobTitle)

browser.find_link_by_text('Go to time sheet').first.click()

# browser.find_link_by_text('Start time sheet').first.click()

# alert = browser.get_alert()
# alert.accept()


def addShift(shift):
    browser.click_link_by_text('Add New Entry')
    browser.find_by_id('Skin_body_ctl01_WDL').find_by_css('option')[
        shift.day].click()
    browser.find_by_id('Skin_body_ctl01_StartDateTime1').select(shift.start)
    browser.find_by_id('Skin_body_ctl01_EndDateTime1').select(shift.end)
    browser.find_by_value('Add').first.click()


for shift in config.shifts:
    addShift(shift)

browser.find_link_by_text('Submit time sheet »').first.click()
browser.find_by_name('Skin$body$SubmitButton').click()

alert = browser.get_alert()
alert.accept()
class SplinterBrowserDriver(BaseBrowserDriver):
    """
        This is a BrowserDriver for splinter
        (http://splinter.cobrateam.info)
        that implements the BaseBrowserDriver API.

        To use it, you must have splinter installed on your env.

        For itself it's a browser driver that supports multiple browsing
        technologies such as selenium, phantomjs, zope, etc.
    """

    driver_name = 'splinter'

    def __init__(self):
        super(SplinterBrowserDriver, self).__init__()
        if not splinter_available:
            raise ImportError(
                "In order to use splinter Base Driver you have to install it. "
                "Check the instructions at http://splinter.cobrateam.info")
        self._browser = Browser(config.default_browser)

    def _handle_empty_element_action(self, element):
        if not element:
            raise ActionNotPerformableException(
                "The action couldn't be perfomed because the element couldn't "
                "be found; Try checking if your element"
                "selector is correct and if the page is loaded properly.")

    @property
    def page_url(self):
        return self._browser.url

    @property
    def page_source(self):
        return self._browser.html

    @property
    def page_title(self):
        return self._browser.title

    def open_url(self, url):
        self._browser.driver.get(url)

    def quit(self):
        return self._browser.quit()

    def is_element_visible(self, element):
        return element.visible

    def get_element_text(self, element):
        return element.text

    def get_element_by_xpath(self, selector):
        return self._browser.find_by_xpath(selector)

    def get_element_by_css(self, selector):
        return self._browser.find_by_css(selector)

    def get_element_by_id(self, selector):
        return self._browser.find_by_id(selector)

    def get_element_by_tag(self, selector):
        return self._browser.find_by_tag(selector)

    @element_action
    def type(self, element, text, slowly=False):
        return element.type(text, slowly)

    @element_action
    def fill(self, element, text):
        return element.fill(text)

    @element_action
    def clear(self, element):
        self.fill(element, '')

    @element_action
    def click(self, element):
        return element.click()

    @element_action
    def check(self, element):
        return element.check()

    @element_action
    def uncheck(self, element):
        return element.uncheck()

    @element_action
    def mouse_over(self, element):
        return element.mouse_over()

    @element_action
    def mouse_out(self, element):
        return element.mouse_out()

    def reload(self):
        return self._browser.reload()

    def go_back(self):
        return self._browser.back()

    def go_forward(self):
        return self._browser.forward()

    def execute_script(self, script):
        """This method is deprecated. Use `execute_javascript` instead.
        """
        return self._browser.evaluate_script(script)

    def execute_javascript(self, script):
        return self._browser.evaluate_script(script)

    def get_iframe(self, iframe_id):
        return self._browser.get_iframe(iframe_id)

    def get_alert(self):
        return self._browser.get_alert()

    def attach_file(self, input_name, file_path):
        return self._browser.attach_file(input_name, file_path)

    def wait_pageload(self, timeout=30):
        wait_interval = 0.05
        elapsed = 0

        while self.execute_javascript('document.readyState') != 'complete':
            self.wait(wait_interval)
            elapsed += wait_interval

            if elapsed > timeout:
                raise PageNotLoadedException

    def click_and_wait(self, element, timeout=30):
        self.click(element)
        self.wait_pageload(timeout)
countryList = ['australia','chile']

countryTypeList = ['developed_', 'developing_']

typeaNameList = ['Existing_Scotia_Public', 'Existing_Scotia_Private', 'Non_Scotia_Public', 'Non_Scotia_Private']
devdCompanyNameList = ['TOYOTA TSUSHO CORPORATION','BASCO DESEMBUAGE','A&T CORPORATION','asdf']
devgCompanyNameList = [countryList[1],countryList[1],countryList[1],'asdf']

# open browser, navigate to the right page, configure, 
from splinter import Browser
browser = Browser()

from selenium.webdriver.common.keys import Keys
from selenium import webdriver

browser.visit('https://clientnet-uat.gbm.bns:8090/CNETADMIN/login.jsp?ssosrc=http%3A%2F%2Fclientnet-uat.gbm.bns%2FCNETCORP%2Findex.do')
browser.fill('uid', 'ychoe')
browser.fill('pwd', 'Winter15')
browser.find_by_name('signin').first.click()

browser.fill('clientSearchString', 'jason\'s client')
browser.find_by_name('search').first.click()
browser.find_by_value('GO').first.click()


while len(browser.find_link_by_text('Delete'))>0:
	browser.find_link_by_text('Delete').first.click()
	browser.get_alert().accept()

Exemple #7
0
class SplinterBrowserDriver(BaseBrowserDriver):
    """
        This is a BrowserDriver for splinter
        (http://splinter.cobrateam.info)
        that implements the BaseBrowserDriver API.

        To use it, you must have splinter installed on your env.

        For itself it's a browser driver that supports multiple browsing
        technologies such as selenium, phantomjs, zope, etc.
    """

    driver_name = 'splinter'

    def __init__(self):
        super(SplinterBrowserDriver, self).__init__()
        if not splinter_available:
            raise ImportError(
                "In order to use splinter Base Driver you have to install it. "
                "Check the instructions at http://splinter.cobrateam.info")
        self._browser = Browser(config.default_browser)

    def _handle_empty_element_action(self, element):
        if not element:
            raise ActionNotPerformableException(
                "The action couldn't be perfomed because the element couldn't "
                "be found; Try checking if your element"
                "selector is correct and if the page is loaded properly.")

    @property
    def page_url(self):
        return self._browser.url

    @property
    def page_source(self):
        return self._browser.html

    @property
    def page_title(self):
        return self._browser.title

    def open_url(self, url):
        self._browser.driver.get(url)

    def quit(self):
        return self._browser.quit()

    def is_element_visible(self, element):
        return element.visible

    def get_element_text(self, element):
        return element.text

    def get_element_by_xpath(self, selector):
        return self._browser.find_by_xpath(selector)

    def get_element_by_css(self, selector):
        return self._browser.find_by_css(selector)

    def get_element_by_id(self, selector):
        return self._browser.find_by_id(selector)

    def get_element_by_tag(self, selector):
        return self._browser.find_by_tag(selector)

    @element_action
    def type(self, element, text, slowly=False):
        return element.type(text, slowly)

    @element_action
    def fill(self, element, text):
      return element.fill(text)

    @element_action
    def clear(self, element):
      self.fill(element, '')

    @element_action
    def click(self, element):
        return element.click()

    @element_action
    def check(self, element):
        return element.check()

    @element_action
    def uncheck(self, element):
        return element.uncheck()

    @element_action
    def mouse_over(self, element):
        return element.mouse_over()

    @element_action
    def mouse_out(self, element):
        return element.mouse_out()

    def reload(self):
        return self._browser.reload()

    def go_back(self):
        return self._browser.back()

    def go_forward(self):
        return self._browser.forward()

    def execute_script(self, script):
        return self._browser.evaluate_script(script)

    def get_iframe(self, iframe_id):
        return self._browser.get_iframe(iframe_id)

    def get_alert(self):
        return self._browser.get_alert()

    def attach_file(self, input_name, file_path):
        return self._browser.attach_file(input_name, file_path)

    def wait_pageload(self, timeout=30):
        wait_interval = 0.05
        elapsed = 0

        while self.execute_script('document.readyState') != 'complete':
            self.wait(wait_interval)
            elapsed += wait_interval

            if elapsed > timeout:
                raise PageNotLoadedException

    def click_and_wait(self, element, timeout=30):
        self.click(element)
        self.wait_pageload(timeout)
Exemple #8
0
class Crawler():
    def __init__(self, url, headers=None, proxies=None):
        self.url = url
        self.headers = headers
        self.proxies = proxies

        self.browser = None
        self.BROWSER_LIST = ['firefox', 'chrome']
        self.FIND_MODE = ['css', 'xpath', 'tag', 'name', 'text', 'id', 'value']

    def set_url(self, url):
        self.url = url

    def get_url(self):
        return self.url

    def set_headers(self, headers):
        self.headers = headers

    def get_headers(self):
        return self.headers

    def set_proxies(self, proxies):
        self.proxies = proxies

    def get_proxies(self):
        return self.proxies

    def get_response(self, url=None):
        if url:
            return requests.get(url,
                                proxies=self.proxies,
                                headers=self.headers)
        return requests.get(self.url,
                            proxies=self.proxies,
                            headers=self.headers)

    def get_select_element_list(self, select_tag, full_text=None):
        if not full_text:
            full_text = self.get_response().text
        soup = BeautifulSoup(full_text, "html.parser")
        element_list = soup.select(select_tag)
        return element_list

    def get_parent(self, element):
        return element.find_parent()

    def get_previous_element(self, element):
        return element.previous_element

    def get_previous_sibling(self, element):
        return element.previous_sibling

    def get_next_element(self, element, neighbor_tag=None):
        if neighbor_tag:
            return element.find_next(neighbor_tag)
        return element.next_element

    def need_login(self, select_tag, full_text=None):
        if not full_text:
            full_text = self.get_response().text
        login_button = self.get_select_element_list(select_tag,
                                                    full_text=full_text)
        if login_button:
            return True
        return False

    def login(self, login_url, login_parameter):
        response = requests.post(login_url,
                                 login_parameter,
                                 proxies=self.proxies,
                                 headers=self.headers)

    def remove_html(self, select_tag, full_text=None):
        if not full_text:
            full_text = self.get_response().text
        soup = BeautifulSoup(full_text, "html.parser")
        delete_elements = soup.select(select_tag)
        for element in delete_elements:
            element.decompose()
        return soup

    def open_browser(self, browser_name=None):
        if browser_name:
            if browser_name in self.BROWSER_LIST:
                self.browser = Browser(browser_name)
            else:
                raise AttributeError('browser unsupport, support list: ' +
                                     str(self.BROWSER_LIST))
        else:
            self.browser = Browser()
        self.browser.visit(self.url)

    def close_browser(self):
        if not self.browser:
            raise Exception('Please call open_browser() first')
        self.browser.quit()
        self.browser = None

    def go_to_url(self, url=None):
        if not self.browser:
            raise Exception('Please call open_browser() first')
        if url:
            self.browser.visit(url)
        else:
            self.browser.visit(self.url)

    def find_element_list(self, mode, select_tag):
        element_list = None
        if not self.browser:
            raise Exception('Please call open_browser() first')
        if mode not in self.FIND_MODE:
            raise AttributeError('mode unsupport, mode list: ' +
                                 str(self.FIND_MODE))
        if mode == 'css':
            element_list = self.browser.find_by_css(select_tag)
        elif mode == 'xpath':
            element_list = self.browser.find_by_xpath(select_tag)
        elif mode == 'tag':
            element_list = self.browser.find_by_tag(select_tag)
        elif mode == 'name':
            element_list = self.browser.find_by_name(select_tag)
        elif mode == 'text':
            element_list = self.browser.find_by_text(select_tag)
        elif mode == 'id':
            element_list = self.browser.find_by_id(select_tag)
        elif mode == 'value':
            element_list = self.browser.find_by_value(select_tag)
        else:
            raise Exception('find_element_list exception: ' + mode)
        return element_list

    def get_browser_html(self):
        if not self.browser:
            raise Exception('Please call open_browser() first')
        return self.browser.html

    def get_browser_url(self):
        if not self.browser:
            raise Exception('Please call open_browser() first')
        return self.browser.url

    def fix_vaild_file_name(self, file_name):
        invalid_char_list = ['\\', '/', ':', '*', '?', '"', '<', '>',
                             '|']  # for windows invalid file name
        for invalid_char in invalid_char_list:
            file_name = file_name.replace(invalid_char, '')
        return file_name

    def download_image(self, download_url, image_name=None):
        if not image_name:
            image_name = download_url.split('/')[-1]
        image_name = self.fix_vaild_file_name(image_name)
        response = requests.get(download_url,
                                proxies=self.proxies,
                                headers=self.headers)
        with open(image_name, 'wb') as file:
            file.write(response.content)

    def get_cookie(self):
        if not self.browser:
            raise Exception('Please call open_browser() first')
        return self.browser.cookies.all()

    def get_alert(self):
        if not self.browser:
            raise Exception('Please call open_browser() first')
        return self.browser.get_alert()

    def get_html_tag(self, element):
        string = str(element)
        first_index = string.find('<') + 1
        last_index = string.find('>')
        if last_index > string.find(' '):
            last_index = string.find(' ')
        tag = string[first_index:last_index]
        return tag

    def get_all_feature(self, element):
        feature_dict = {}
        keys = element.attrs.keys()
        for key in keys:
            feature_dict[key] = element.get(key)
        return feature_dict

    def get_element_feature(self, element):
        id = element.get('id')
        if id:
            return 'id', id

        tag = self.get_html_tag(element)
        feature_dict = self.get_all_feature(element)
        xpath = '/' + tag + '['
        for feature, value in feature_dict.items():
            xpath = xpath + '@' + feature + '=\'' + value + '\''
            xpath = xpath + ' and '
        xpath = xpath[:-5]  # delete ' and '
        xpath = xpath + ']'

        while tag != 'div' and tag != 'tbody':
            element = self.get_parent(element)
            tag = self.get_html_tag(element)
            if tag:
                xpath = '//' + tag + xpath
        if feature:
            return 'xpath', xpath

        raise Exception('no match feature')
browser.cookies.add({'whatever': 'and ever'})  # add a cookie
browser.cookies.all()  # retrieve all cookies
browser.cookies.delete('mwahahahaha')  # deletes the cookie 'mwahahahaha'
browser.cookies.delete('whatever', 'wherever')  # deletes two cookies
browser.cookies.delete()  # deletes all cookies

# Frames, alerts and prompts
# Using iframes,You can use the get_iframe method and the with statement to interact with iframes. You can pass the
# iframe's name, id, or index to get_ifram

with browser.get_iframe('iframemodal') as iframe:
    iframe.do_stuff()

# Chrome support for alerts and prompts is new in Splinter 0.4.Only webdrivers (Firefox and Chrome) has support for
# alerts and prompts.
alert = browser.get_alert()
alert.text
alert.accept()
alert.dismiss()

prompt = browser.get_alert()
prompt.text
prompt.fill_with('text')
prompt.accept()
prompt.dismiss()
# use the with statement to interacte with both alerts and prompts
with browser.get_alert() as alert:
    alert.do_stuff()

# Executing javascript
browser.execute_script("$('body').empty()")
Exemple #10
0
class OOP():
    def __init__(self):
        self.win = tk.Tk()
        self.win.geometry('700x700')
        self.win.title('Python GUI')
        self.create_settings()
        self.create_login()
        self.create_query()
        self.create_records()
        self.create_menu()

        self.valid_sites = []
        self.select_row = -1

        self.valid_td = []
        self.select_record_row = -1
        self.browser_state = 'log in'
        self.today = datetime.date.today()
        self.username = ''
        self.password = ''
        self.mobile = ''

    def create_menu(self):
        def msgbox():
            msg.showinfo(
                'Info Box',
                'This is a python GUI designed by Wenliang Zhang\n Use for fun : )'
            )

        menu_bar = Menu(self.win)
        self.win.config(menu=menu_bar)

        file_menu = Menu(menu_bar, tearoff=0)
        file_menu.add_command(label='About', command=msgbox)
        menu_bar.add_cascade(label='Menu', menu=file_menu)

    def create_settings(self):
        settings = ttk.LabelFrame(self.win, text='Settings')
        settings.grid(row=0, column=0, sticky='w' + 'e', padx=50, pady=10)

        driver_label = ttk.Label(settings,
                                 text='Driver name',
                                 width=15,
                                 anchor='center')
        driver_label.grid(row=0, column=0, padx=5, pady=5)

        self.driver_name = tk.StringVar()
        driver_option = ttk.Combobox(settings,
                                     textvariable=self.driver_name,
                                     width=17,
                                     state='readonly')
        driver_option['values'] = ('firefox', 'chrome')
        driver_option.current(0)
        driver_option.grid(row=0, column=1, padx=5)

    def log_in(self):

        try:
            driver = self.driver_name.get()
            self.browser = Browser(driver_name=driver, headless=True)
            self.browser.visit('https://elife.fudan.edu.cn/')
            self.browser.find_by_xpath("//div/input[@class='xndl']").click()
            self.browser.fill("username", self.username)
            self.browser.fill("password", self.password)
            self.browser.find_by_value(u'登录').click()
            self.note.configure(text=('Hello, ' + self.browser.find_by_xpath(
                "//div[@class='person_a']").first.text))
            self.search_button.configure(state='normal')
            self.search_button2.configure(state='normal')
            self.info_button1.configure(state='normal')
            self.info_button2.configure(state='normal')
            self.browser.cookies.all()
        except:
            self.note.configure(
                text='Failed, please check your input or Internet access')

    def search(self):

        self.browser_state = 'search'

        def select(event, row):
            self.select_row = int(row) - 1
            self.avail_scr.tag_raise('tag_all')
            self.avail_scr.tag_configure('tag_all',
                                         background='white',
                                         foreground='black')
            self.avail_scr.tag_raise('tag' + row)
            self.avail_scr.tag_configure('tag' + row,
                                         background='blue',
                                         foreground='white')

        self.avail_scr.configure(state='normal')
        self.avail_scr.delete('1.0', 'end')
        self.valid_sites = []
        self.select_row = -1

        urlcode = self.court_var.get()
        user_start_time = int(self.start_time.get()[0:2])
        user_end_time = int(self.end_time.get()[0:2])

        dtime = Timedict[self.date.get()]
        reserve_date = (self.today + timedelta(dtime, 0)).strftime('%Y-%m-%d')
        self.browser.visit(Urldict[urlcode] + '&currentDate=' + reserve_date)

        found_sites = self.browser.find_by_xpath(
            "//td[@class='site_td1']/font")
        sites = []
        for site in found_sites:
            if site.text != '':
                sites.append(site.text)
        has_reversed = self.browser.find_by_xpath(
            "//td[@class='site_td4']/font")
        all_for_reservation = self.browser.find_by_xpath(
            "//td[@class='site_td4']/span")

        if len(has_reversed) == 0:
            self.avail_scr.insert('insert', '您好,当天没有场地可以预约')
        else:

            for i in range(len(has_reversed)):
                site_time = int(sites[i][0:2])
                remain = int(all_for_reservation[i].text) - int(
                    has_reversed[i].text)
                if (site_time >= user_start_time) and (
                        site_time <= (user_end_time - 1)) and remain > 0:
                    self.valid_sites.append(i)

            if len(self.valid_sites) == 0:
                self.avail_scr.insert('insert', '该时段场地未开放或已预定完,请适当放宽筛选条件。')
            else:
                for valid_site_num in self.valid_sites:
                    self.avail_scr.insert(
                        'insert', Weekdict[int(
                            (self.today + timedelta(dtime, 0)).strftime('%w'))]
                        + ' ' + sites[valid_site_num] + ' ' +
                        namedict[urlcode] + ' \n')

                self.avail_scr.tag_add('tag_all', '1.0', 'end')

                self.avail_scr.tag_raise('tag_all')
                self.avail_scr.tag_configure('tag_all',
                                             background='white',
                                             foreground='black')  #刷新的时候把蓝色漂白

                for j in range(len(self.valid_sites)):
                    row = str(j + 1)
                    self.avail_scr.tag_add('tag' + row, row + '.0',
                                           row + '.end')
                    self.avail_scr.tag_bind(
                        'tag' + str(j + 1),
                        '<Button-1>',
                        lambda event, row=row: select(event, row))

        self.avail_scr.configure(state='disable')

    def make_appointment(self):
        dtime = Timedict[self.date.get()]
        reserve_date = (self.today + timedelta(dtime, 0)).strftime('%Y-%m-%d')
        url = Urldict[self.court_var.get()] + '&currentDate=' + reserve_date

        def wait_for_the_midnight():
            while ((self.today.strftime('%d')
                    == datetime.date.today().strftime('%d'))
                   or (datetime.datetime.now().hour < 6)):
                print('current time: ' +
                      str(datetime.datetime.now().hour).zfill(2) + ':' +
                      str(datetime.datetime.now().minute).zfill(2))
                sleep(1800)
            while ((datetime.datetime.now().hour +
                    datetime.datetime.now().minute / 60) < 6.8):
                sleep(300)
                print('current time: ' +
                      str(datetime.datetime.now().hour).zfill(2) + ':' +
                      str(datetime.datetime.now().minute).zfill(2))
            while (datetime.datetime.now().hour < 7):
                sleep(15)
                print('current time: ' +
                      str(datetime.datetime.now().hour).zfill(2) + ':' +
                      str(datetime.datetime.now().minute).zfill(2))

            try:
                self.browser.visit(url)
                self.browser.find_by_tag('img')[self.valid_sites[
                    self.select_row]].click()
                self.browser.fill('mobile', self.mobile)
                self.browser.find_by_value(u' 预 约 ').click()
                self.note2.configure(text='Job done')
            except:
                print("重新登陆")
                self.browser.visit('https://elife.fudan.edu.cn/')
                self.browser.find_by_xpath(
                    "//div/input[@class='xndl']").click()
                self.browser.fill("username", self.username)
                self.browser.fill("password", self.password)
                self.browser.find_by_value(u'登录').click()
                self.browser.cookies.all()
                print("登陆成功")
                self.browser.visit(url)
                self.browser.find_by_tag('img')[self.valid_sites[
                    self.select_row]].click()
                self.browser.fill('mobile', self.mobile)
                self.browser.find_by_value(u' 预 约 ').click()
                self.note2.configure(text='Job done')
                print("抢票成功")

        if self.select_row == -1 or self.browser_state != 'search':
            if self.browser_state != 'search':
                self.note2.configure(text='Please update the search result')

            if self.select_row == -1:
                self.note2.configure(text='Please choose a court first')

        else:
            if Timedict[self.date.get()] <= 2:
                try:
                    self.browser.visit(url)
                    self.browser.find_by_tag('img')[self.valid_sites[
                        self.select_row]].click()
                    self.browser.fill('mobile', self.mobile)
                    self.browser.find_by_value(u' 预 约 ').click()
                except:
                    self.note2.configure(text='You cannot book the court')
                else:
                    self.note2.configure(text='Job done')

            else:
                confirm_msg = msg.askokcancel(
                    '提示', '确定执行抢场功能吗,这可能需要一点时间。(场地晚上12点刷新,请保持程序运行)')
                if confirm_msg == True:
                    self.note2.configure(
                        text='Job has been queued, hold on please.')
                    _thread.start_new_thread(wait_for_the_midnight, ())

    def update(self):
        self.browser_state = 'record'
        self.record_scr.configure(state='normal')
        self.record_scr.delete('1.0', 'end')
        self.valid_td = []
        self.select_record_row = -1

        def select(event, row):
            self.select_record_row = int(row) - 1
            self.record_scr.tag_raise('tag_all')
            self.record_scr.tag_configure('tag_all',
                                          background='white',
                                          foreground='black')
            self.record_scr.tag_raise('tag' + row)
            self.record_scr.tag_configure('tag' + row,
                                          background='blue',
                                          foreground='white')

        self.valid_td = []
        self.browser.visit(
            'https://elife.fudan.edu.cn/public/userbox/index.htm?userConfirm=&orderstateselect='
        )
        record_tr_num = len(
            self.browser.find_by_xpath("//table[@class='table3']/tbody/tr"))
        record_td = self.browser.find_by_xpath(
            "//table[@class='table3']/tbody/tr/td")
        for i in range(record_tr_num):
            if record_td[5 + 7 * i].text == '待签到':
                self.valid_td.append(i)

        if len(self.valid_td) != 0:
            for j in self.valid_td:
                valid_record_name = record_td[
                    3 + 7 * j].text + '  ' + record_td[
                        4 + 7 * j].text + '  ' + record_td[2 +
                                                           7 * j].text + '\n'
                self.record_scr.insert('insert', valid_record_name)

            self.record_scr.tag_add('tag_all', '1.0', 'end')

            self.record_scr.tag_raise('tag_all')
            self.record_scr.tag_configure('tag_all',
                                          background='white',
                                          foreground='black')  #刷新的时候把蓝色漂白

            for p in range(len(self.valid_td)):
                row = str(p + 1)
                self.record_scr.tag_add('tag' + row, row + '.0', row + '.end')
                self.record_scr.tag_bind(
                    'tag' + row,
                    '<Button-1>',
                    lambda event, row=row: select(event, row))
        self.record_scr.configure(state='disable')

    def cancel(self):
        self.browser.visit(
            'https://elife.fudan.edu.cn/public/userbox/index.htm?userConfirm=&orderstateselect='
        )
        if self.select_record_row != -1:
            self.browser.find_by_xpath("//table[@class='table3']/tbody/tr/td")[
                6 + (self.valid_td[self.select_record_row]) * 7].click()
            self.browser.get_alert().accept()

            self.record_scr.configure(state='normal')
            self.record_scr.tag_raise('tag_all')
            self.record_scr.tag_configure('tag_all',
                                          background='white',
                                          foreground='black')  #刷新的时候把蓝色漂白
            self.record_scr.delete('1.0', 'end')
            self.record_scr.insert('insert', '取消预约成功,请刷新')
            self.record_scr.configure(state='disable')
        else:
            self.record_scr.configure(state='normal')
            self.record_scr.tag_raise('tag_all')
            self.record_scr.tag_configure('tag_all',
                                          background='white',
                                          foreground='black')  #刷新的时候把蓝色漂白
            self.record_scr.delete('1.0', 'end')
            self.record_scr.insert('insert', '您未选择需要取消的预约,请刷新后重试')
            self.record_scr.configure(state='disable')

    def create_login(self):
        def confirm():
            login_button_1.configure(text='modify', command=modify)
            student_ID_enter.configure(state='readonly')
            mobile_enter.configure(state='readonly')
            password_enter.configure(state='readonly')
            self.username = student_ID_var.get()
            self.password = password_var.get()
            self.mobile = mobile_var.get()

        def modify():
            login_button_1.configure(text='OK', command=confirm)
            student_ID_enter.configure(state='normal')
            mobile_enter.configure(state='normal')
            password_enter.configure(state='normal')

        login = ttk.LabelFrame(self.win, text=' Log in')
        login.grid(row=1, column=0, padx=50, pady=10, sticky='w' + 'e')

        student_ID_label = ttk.Label(login,
                                     text='Student ID',
                                     width=15,
                                     anchor='center')
        student_ID_label.grid(row=0, column=0, padx=5, pady=5)
        student_ID_var = tk.StringVar()
        student_ID_enter = ttk.Entry(login,
                                     textvariable=student_ID_var,
                                     width=20)
        student_ID_enter.grid(row=0, column=1, padx=5)

        password_label = ttk.Label(login,
                                   text='Password',
                                   width=15,
                                   anchor='center')
        password_label.grid(row=1, column=0, padx=5, pady=5)
        password_var = tk.StringVar()
        password_enter = ttk.Entry(login, textvariable=password_var)
        password_enter.grid(row=1, column=1, padx=5)

        mobile_label = ttk.Label(login,
                                 text='Mobile',
                                 width=15,
                                 anchor='center')
        mobile_label.grid(row=2, column=0, pady=5, padx=5)
        mobile_var = tk.StringVar()
        mobile_enter = ttk.Entry(login, textvariable=mobile_var)
        mobile_enter.grid(row=2, column=1, padx=5)

        img = Image.open(r"./logo.jpg")
        global tk_img
        tk_img = ImageTk.PhotoImage(img)
        logo_frame = tk.Label(login, image=tk_img)
        logo_frame.grid(row=0,
                        column=3,
                        rowspan=3,
                        columnspan=5,
                        padx=30,
                        pady=5)

        login_button_1 = ttk.Button(login,
                                    text='OK',
                                    command=confirm,
                                    width=10)
        login_button_1.grid(row=3, column=6, pady=10, padx=20, sticky='e')

        login_button_2 = ttk.Button(login,
                                    text='Log in',
                                    command=self.log_in,
                                    width=10)
        login_button_2.grid(row=3, column=7, pady=10, padx=5)

        self.note = ttk.Label(login, text='Please verify your identity')
        self.note.grid(row=3, column=0, padx=100, columnspan=4, sticky='w')

    def create_query(self):
        query = ttk.LabelFrame(self.win, text=' Query ')
        query.grid(row=2, column=0, padx=50, pady=10, sticky='w' + 'e')

        court_label = ttk.Label(query, text='Court', width=14, anchor='center')
        court_label.grid(row=0, column=0, padx=5, pady=5)
        self.court_var = tk.IntVar()
        self.court_var.set(0)
        courtRad1 = ttk.Radiobutton(query,
                                    text='正大',
                                    variable=self.court_var,
                                    value=0,
                                    width=8)
        courtRad1.grid(column=1, row=0, sticky='w', padx=5)
        courtRad2 = ttk.Radiobutton(query,
                                    text='北区',
                                    variable=self.court_var,
                                    value=1,
                                    width=8)
        courtRad2.grid(column=2, row=0, sticky='w')
        courtRad3 = ttk.Radiobutton(query,
                                    text='江湾',
                                    variable=self.court_var,
                                    value=2,
                                    width=8)
        courtRad3.grid(column=1, row=1, sticky='w', padx=5)

        date_label = ttk.Label(query, text='Day of Week', anchor='center')
        date_label.grid(row=2, column=0, padx=5, pady=5)
        self.date = tk.StringVar()
        date_option = ttk.Combobox(query,
                                   textvariable=self.date,
                                   width=17,
                                   state='readonly')
        date_option['values'] = ('Today', 'Tomorrow', '+2', '+3(rush mode)')
        #        date_option.current(int((datetime.date.today()).strftime('%w')))
        date_option.current = ('Tomorrow')
        date_option.grid(row=2, column=1, padx=5, columnspan=2)

        start_time_label = ttk.Label(query, text='Start time', anchor='center')
        start_time_label.grid(row=3, column=0, padx=5, pady=5)
        self.start_time = tk.StringVar()
        start_time_option = ttk.Combobox(query,
                                         textvariable=self.start_time,
                                         width=17,
                                         state='readonly')
        start_time_option['values'] = ('08:00', '09:00', '10:00', '11:00',
                                       '12:00', '13:00', '14:00', '15:00',
                                       '16:00', '17:00', '18:00', '19:00',
                                       '20:00', '21:00')
        start_time_option.current(0)
        start_time_option.grid(row=3, column=1, padx=5, columnspan=2)

        end_time_label = ttk.Label(query, text='End time', anchor='center')
        end_time_label.grid(row=4, column=0, padx=5, pady=5)
        self.end_time = tk.StringVar()
        end_time_option = ttk.Combobox(query,
                                       textvariable=self.end_time,
                                       width=17,
                                       state='readonly')
        end_time_option['values'] = ('09:00', '10:00', '11:00', '12:00',
                                     '13:00', '14:00', '15:00', '16:00',
                                     '17:00', '18:00', '19:00', '20:00',
                                     '22:00')
        end_time_option.current(12)
        end_time_option.grid(row=4, column=1, padx=5, columnspan=2)

        avail_label = ttk.Label(query, text='Available', width=10)
        avail_label.grid(row=0, column=3, padx=30, pady=5, sticky='w')

        self.avail_scr = scrolledtext.ScrolledText(query, width=33, height=7)
        self.avail_scr.grid(row=1,
                            column=3,
                            padx=30,
                            pady=5,
                            rowspan=4,
                            columnspan=4)
        self.avail_scr.bind('<Enter>',
                            self.avail_scr.configure(cursor='arrow'))
        self.avail_scr.configure(state='disable')

        self.search_button = ttk.Button(query,
                                        text='Search',
                                        width=10,
                                        command=self.search,
                                        state='disable')
        self.search_button.grid(row=5, column=4, padx=15, pady=10, sticky='w')

        self.search_button2 = ttk.Button(query,
                                         text='Reserve',
                                         command=self.make_appointment,
                                         width=10,
                                         state='disable')
        self.search_button2.grid(row=5, column=6, padx=30, pady=10, sticky='w')

        self.note2 = ttk.Label(query, text='Please set your preference')
        self.note2.grid(row=5, column=0, padx=100, columnspan=4, sticky='w')

    def create_records(self):
        info = ttk.LabelFrame(self.win, text=' Info ')
        info.grid(row=3, column=0, padx=50, pady=10, sticky='w' + 'e')
        record_label = ttk.Label(info,
                                 text='Records',
                                 width=14,
                                 anchor='center')
        record_label.grid(row=0, column=0, padx=5, pady=5, sticky='w')

        self.record_scr = tk.Text(info, width=50, height=3)
        self.record_scr.grid(row=1,
                             column=0,
                             padx=50,
                             pady=10,
                             rowspan=2,
                             columnspan=2,
                             sticky='e')
        self.record_scr.bind('<Enter>',
                             self.avail_scr.configure(cursor='arrow'))
        self.avail_scr.configure(state='disable')

        self.info_button1 = ttk.Button(info,
                                       text='Update',
                                       width=10,
                                       command=self.update,
                                       state='disable')
        self.info_button1.grid(row=1, pady=5, padx=10, column=2)

        self.info_button2 = ttk.Button(info,
                                       text='Cancel',
                                       width=10,
                                       command=self.cancel,
                                       state='disable')
        self.info_button2.grid(row=2, pady=5, column=2)
Exemple #11
0
t = 0
week = [
    'Wednesday', 'Wednesday', 'Wednesday', 'Wednesday', 'Wednesday',
    'Wednesday', 'Wednesday', 'Wednesday', 'Wednesday'
]
day = [
    '2020-08-05', '2020-08-12', '2020-08-19', '2020-08-26', '2020-09-02',
    '2020-09-09', '2020-09-16', '2020-09-23', '2020-09-30'
]

while (t != 9):
    print("Current time: " + time.asctime(time.localtime(time.time())) + "\n")
    a = Browser('chrome')
    try:
        a.visit('http://www.ceair.com/')
        alert = a.get_alert()
        alert.dismiss()
    except:
        print("exception occured")
        a.quit()
        continue

    try:
        From = a.find_by_id('label_ID_0')
    except:
        print("exception occured")
        a.quit()
        continue
    try:
        From.click()
    except:
Exemple #12
0
for index in range(2, pages + 1):
    browser.visit("http://download.csdn.net/my/downloads/%d" % index)
    time.sleep(5)
    urls = urls + [
        url['href'] for url in browser.find_link_by_text("立即评价,通过可返分")
    ]
    for url in urls:
        print url
        try:
            browser.visit(url)
            while browser.is_element_not_present_by_value("5"):
                time.sleep(0.1)
            startControl = browser.find_by_css(
                ".star-rating"
            )[-1]  # -1 for 5 stars  -2 for 4 stars  1 for one star  also may  random
            textControl = browser.find_by_id("cc_body")[0]  #评论框
            btnComment = browser.find_by_value("发表评论")[0]  #提交框
            #print dir(startControl)
            print "loaded"
            startControl.mouse_over()  #鼠标到评分栏
            startControl.click()  #鼠标点击
            textControl.fill(random.choice(commentsList))  #填写评论
            btnComment.click()  #评论提交
            alert = browser.get_alert()  #处理 js的alert确认
            alert.accept()  #确定
            time.sleep(60)  #评论间隔要有一分钟
        except:
            print "error"
    time.sleep(4)
    urls = []
print "Hello Kitty"