def get_index_ec(self): url = get_url("selective_course") html = self._get_html(url) not_error_page(html) courses = parse_standard_table(html, "kcmcgrid", pure=True) url_code = re.findall(r'xkkh=(.*?)&', html) return url_code, courses
def select_PE_class(self, code1, code2): url = get_url("pe_class") html, url = self._get_html(url, only_html=False) viewstate = get_viewstate(html) data = { "__EVENTTARGET": "ListBox1", "__EVENTARGUMENT": "", "__VIEWSTATE": viewstate, "DropDownList1": "项目".encode("gb2312"), "ListBox1": code1 } html = safe_post(url, data=data, headers=self._headers, cookies=self._cookies).text _t = { "__VIEWSTATE": get_viewstate(html), "ListBox2": code2, "RadioButtonList1": "0", "button3": "选定课程" } data.update(_t) html = safe_post(url, data=data, headers=self._headers, cookies=self._cookies).text result = safe_re(r"alert\('(.*)'\)", html) return result
def get_course_category(self): special = "xnxq=%s&xh=%s" _t = ("2016-20171", self._info["xh"]) url = get_url("course_category", special) html = self._get_html(url, _t) not_error_page(html, self.uid) selects = self.selects_to_list(html, "ListBox1") return selects
def evaluate_teacher(self, mark): course_list = self.get_evaluate_course() url = get_url("base") for index in range(len(course_list)): html = self._get_html(url + course_list[index], complete_url=True) viewstate = get_viewstate(html) page = etree.HTML(html) alert = page.xpath('//*[@id="Form1"]/script[2]') if alert: not_error_page(alert[0].text) current_course = page.xpath( '//*[@id="pjkc"]/option[@selected="selected"]/@value') print("\nStart evaluating %s ..." % current_course[0]) hidden_input = page.xpath('//*[@id="DataGrid1"]//input/@name') selects = page.xpath('//*[@id="DataGrid1"]//select/@name') data = { "__EVENTTARGET": "", "__EVENTARGUMENT": "", "__VIEWSTATE": viewstate, "pjkc": current_course[0], "pjxx": "", "txt1": "", "TextBox1": "0", "Button1": "保 存" } for i in range(len(hidden_input)): _data = { hidden_input[i]: "", selects[i]: mark.encode("gb2312") } data.update(_data) if index == len(course_list) - 1: data.pop("Button1") data["Button2"] = " 提 交 " html = safe_post(url + course_list[index], data=data, headers=self._headers, cookies=self._cookies).text page = etree.HTML(html) alert = page.xpath('//*[@id="Form1"]/script[2]') if alert: raise PageError(alert.text) if index < len(course_list) - 1: print("Finish and sleep for 2s") time.sleep(2) elif index == len(course_list) - 1: print("Finish") return "\nEvaluation finish"
def get_course_detail(self, url_code): special = "xkkh=%s&xh=%s" _t = (url_code, self._info["xh"]) url = get_url("course_detail", special) html = self._get_html(url, _t) not_error_page(html, self.uid) classroom_selection = re.findall(r'value="(.*?)".*?xkkh', html) result = parse_standard_table(html, "xjs_table", pure=True) return result, classroom_selection
def get_PEC_category(self, category=None): url = get_url("pe_class") html, url = self._get_html(url, only_html=False) if category: viewstate = get_viewstate(html) data = { "__EVENTTARGET": "ListBox1", "__EVENTARGUMENT": "", "__VIEWSTATE": viewstate, "DropDownList1": "项目".encode("gb2312"), "ListBox1": category } html = safe_post(url, data=data, headers=self._headers, cookies=self._cookies).text select_name = "ListBox2" else: select_name = "ListBox1" selects = self.selects_to_list(html, select_name) return selects
def select_elective_course(self, url_code, selected_classroom): special = "xkkh=%s&xh=%s" _t = (url_code, self._info["xh"]) url = get_url("course_detail", special) html, url = self._get_html(url, _t, only_html=False) viewstate = get_viewstate(html) data = { "__EVENTTARGET": "Button1", "__EVENTARGUMENT": "", "__VIEWSTATE": viewstate, "xkkh": selected_classroom, "RadioButtonList1": 0, } html = safe_post(url, data=data, headers=self._headers, cookies=self._cookies).text result = safe_re(r"alert\('(.*)'\)", html) return result
def get_elective_course(self, category): while True: url = get_url("selective_course") html, url = self._get_html(url, only_html=False) if "三秒防刷" in html: print("\n检测到三秒防刷,程序将睡眠三秒钟。") time.sleep(3) else: break viewstate = get_viewstate(html) post_data = { "__EVENTTARGET": "", "__EVENTARGUMENT": "", "__VIEWSTATE": viewstate, "zymc": "", "xx": "", "Button2": "选修课程" } html = safe_post(url=url, data=post_data, headers=self._headers, cookies=self._cookies).text post_data["zymc"] = (category + "|院公选课5").encode("gb2312") del post_data["Button2"] num = 0 current_page = 1 courses = [] url_code = [] page_num = [] while True: try: post_data["__VIEWSTATE"] = get_viewstate(html) html = safe_post(url=url, data=post_data, headers=self._headers, cookies=self._cookies).text _t = parse_standard_table(html, "kcmcgrid", pure=True) courses.extend(_t) _t = re.findall(r'xkkh=(.*?)&', html) url_code.extend(_t) if num == 0: num = int(re.search(r'共(\d*)条记录!', html).group(1)) if (current_page % 10) == 1: page_num = re.findall(r'kcmcgrid\$_ctl\d*\$_ctl\d*', html) if (current_page // 10) == 1: _n = 10 - (num // 10 - 9) page_num = [ page_num[i] for i in range(len(page_num)) if i > _n ] if len(page_num) == 0: break current_page += 1 post_data["__EVENTTARGET"] = page_num.pop(0).replace("$", ":") except AttributeError: print("\n检测到三秒防刷,程序将睡眠三秒钟。") time.sleep(3) return url_code, courses
def get_evaluate_course(self): url = get_url("evaluate_list", special="xh=%s") html = self._get_html(url, special_parameter=self._info["xh"]) page = etree.HTML(html) course_list = page.xpath('//*[@id="headDiv"]/ul/li[4]/ul/li/a/@href') return course_list