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()
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()
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()
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()
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)
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()")
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] + '¤tDate=' + 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()] + '¤tDate=' + 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)
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:
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"