def request_with_cookies(self, url=None, parameters=None): ''' :param url: 请求的url :param parameters: 请求的参数 :return: 返回响应对象 e.g. post_data = {'username': '******', 'password': '******'} loginUrl = "http://test2.ishop-city.com/reconciliation/admin/user/login.json" testUrl = 'http://test2.ishop-city.com/reconciliation/repayCheck/gethuizong.json' http_object = HttpUrlConnection(get_cookie_url=loginUrl, get_cookie_request_data=post_data) result=http_object.request_with_cookies(testUrl) print(result.readlines()) ''' try: # 实例化HttpUrlConnection时如果没传url则将request_with_cookies的url赋给self.__url if self.__url is None: self.__url = url # 实例化HttpUrlConnection时如果没传parameters则将request_with_cookies的parameters赋给self.__url if self.__data is None: self.__data = parameters # 已带cookie的对象必须存在且请求的链接url必传 if self.__opener is not None and self.__url is not None: html = self.__opener.open(self.__url, self.__data) return html else: return 0 except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def generator(): try: global code_list code_list = [] if not code_list: get_district_code() id = code_list[random.randint(0, len(code_list))]['code'] # 地区项 id += str(random.randint(1930, 2013)) # 年份项 da = date.today() + timedelta(days=random.randint(1, 366)) # 月份和日期项 id += da.strftime('%m%d') id += str(random.randint(100, 300)) # ,顺序号简单处理 i = 0 count = 0 weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] # 权重项 check_code = { '0': '1', '1': '0', '2': 'X', '3': '9', '4': '8', '5': '7', '6': '6', '7': '5', '8': '5', '9': '3', '10': '2' } # 校验码映射 for i in range(0, len(id)): count += int(id[i]) * weight[i] id += check_code[str(count % 11)] # 算出校验码 return id except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def request(self): try: conn = http_client.HTTPConnection(self.__host, self.__port) if self.__method == "GET": self.path = self.__path + self.__parameters_urlencode_deal conn.request(self.__method, self.__path) if self.__method == "POST": if self.__headers == {"Content-type": "application/json"}: conn.request(self.__method, self.__path, self.__jdata, self.__headers) if self.__headers == { "Content-type": "application/x-www-form-urlencoded" }: conn.request(self.__method, self.__path, self.__data, self.__headers) response = conn.getresponse() result_origin = response.read() try: result = result_origin.decode("gb2312").encode("utf8") except: result = result_origin return result except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def __init__(self, url=None, method="GET", parameters=None, cookie=None, headers={}, get_cookie_url=None, get_cookie_request_data=None, get_cookie_headers=[('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')]): ''' :param url: 请求使用的url,由于发送cookie的请求方法可以单独传url故此参数非必填。使用request方法请求时必填。 :param method: 请求的方法 :param parameters: 请求的参数 :param cookie: cookie :param headers: 请求头 :param get_cookie_url: 获取cookie的url,如果调用request_with_cookies时此参数必须传 :param get_cookie_request_data: 获取cookie时需要传的参数 :param get_cookie_headers: 获取cookie时需要加的请求头 ''' try: # 解析url if url is None: self.__url = None else: try: if type(url) == bytes: self.__url = url.decode("utf-8") if type(url) == str: self.__url = url except: self.__url = url logger.debug(self.__url) scheme, rest = urllib_parse.splittype(self.__url) # 拆分域名和路径 logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") self.__host_absolutely, self.__path = urllib_parse.splithost(rest) host_list = self.__host_absolutely.split(":") if len(host_list) == 1: self.__host = host_list[0] self.__port = 80 elif len(host_list) == 2: self.__host = host_list[0] self.__port = host_list[1] # 对所传参数进行处理 self.__method = method self.__data = parameters self.__cookie = cookie if parameters != None: self.__parameters_urlencode_deal = urllib_parse.urlencode(parameters) else: self.__parameters_urlencode_deal = "" self.__jdata = simplejson.dumps(parameters, ensure_ascii=False) self.__headers = headers self.__opener = None self.__get_cookie_request_data = None if get_cookie_url is not None: cj = ckjar.CookieJar() self.__opener = urllib_request.build_opener(urllib_request.HTTPCookieProcessor(cj)) self.__opener.addheaders = get_cookie_headers if get_cookie_request_data is not None: self.__get_cookie_request_data = urllib_parse.urlencode(get_cookie_request_data).encode("utf-8") self.__opener.open(get_cookie_url, self.__get_cookie_request_data) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def time_stamp(cls): try: # 格式化 time_format1 = '%Y%m%d%H%M%S' return time.strftime(time_format1) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def __init__(self): try: current_dir = os.getcwd() self.__ini_config_file = BASE_DIR + "/conf/" + "config.ini" self.__conf_config_file = BASE_DIR + "/conf/" + "config.conf" except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def time_stamp(cls): try: # 格式化 time_format1 = "%Y%m%d%H%M%S" return time.strftime(time_format1) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def ytdyccrm_cancel_func(self): try: self.__data_dict["dt"] = self.__time_stamp sign_str = str(self.__data_dict["dt"]) + self.__data_dict["method"] + str(2.0) + self.__secretkey_value sign = Md5.md5(sign_str) self.__data_dict["sign"] = sign return self.__data_dict except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def __init__(self, interface_code, data_dict, secretkey_value): try: # 生成时间戳 self.__time_stamp = TimeStamp.time_stamp() self.__data_dict = data_dict self.__secretkey_value = secretkey_value self.__interface_code = interface_code except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def ini_data(self, label, key, configFile=None): try: config = configparser() if configFile is None: configFile = self.__ini_config_file config.read(configFile) return config.get(label, key) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def md5(cls, strVar): try: # md5加密并小写化 md5_var = hashlib.md5() md5_var.update(strVar.encode("utf-8")) # md5_var.update(strVar) sign = md5_var.hexdigest().lower() return sign except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def processing(self): try: processing_dict = dict() # 字典生成key和value的对应关系,value为方法对象而不是执行方法 processing_dict["ytdyccrmcancel"] = self.ytdyccrm_cancel_func if self.__interface_code.decode("utf-8") in processing_dict: return processing_dict[self.__interface_code.decode("utf-8")]() else: return 0 except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def request(self): try: if self.__method == "GET": response = requests.get(url=self.__url, params=self.__parameters) else: if self.__headers == {"Content-type": "application/json"}: response = requests.post(url=self.__url, json=self.__parameters) else: response = requests.post(url=self.__url, data=self.__parameters) return response except: logger.exception("发送普通请求错误:")
def request_with_cookies(self): try: if self.__method == "GET": response = self.__session_object.get(url=self.__url, params=self.__parameters) else: if self.__headers == {"Content-type": "application/json"}: response = self.__session_object.post(url=self.__url, json=self.__parameters) else: response = self.__session_object.post(url=self.__url, data=self.__parameters) return response except: logger.exception("带cookies请求错误:")
def urldecoded(self, data): try: data_list_first = data.split("&") data_list_second = list() for tmp in data_list_first: data_list_second.append(tmp.split("=")) result = dict() for i in data_list_second: result[i[0]] = i[1] return result except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def request_with_cookies(self): try: if self.__method == "GET": response = self.__session_object.get(url=self.__url, params=self.__parameters) else: if self.__headers == {"Content-type": "application/json"}: response = self.__session_object.post( url=self.__url, json=self.__parameters) else: response = self.__session_object.post( url=self.__url, data=self.__parameters) return response except: logger.exception("带cookies请求错误:")
def member_sign_up(browser_param, url, test_data): try: result_dict = dict() browser = browser_param browser.get(url) try: time.sleep(1) browser.find_element_by_xpath("//span[@class='li-left']") time.sleep(1) browser.find_element_by_xpath("//li[@data-url='../dyc/member_perfect_info.html']").click() time.sleep(1) browser.find_element_by_xpath("//img[@data-url='../dycnew/member-set.html']").click() time.sleep(1) browser.find_element_by_xpath("//button[@class='log_out']").click() time.sleep(1) except: logger.debug("未绑卡") browser.find_element_by_id("memberPhone").send_keys(test_data[0]) browser.find_element_by_xpath("//a[@class='btn btn_verify verify_code']").click() time.sleep(2) sms_num = sms_object.get_sms_num_from_db(test_data[0]) browser.find_element_by_id("inp_verify_code").send_keys(sms_num) browser.find_element_by_id("btn_login_success").click() time.sleep(3) try: browser.find_element_by_xpath("//li[@onclick='closeErrorInfoThree()']").click() except: logger.debug("已注册") result_dict["veri_point"] = None result_dict["sms_num"] = None return result_dict time.sleep(2) browser.find_element_by_id("memberName").send_keys(test_data[1]) # 默认当前时间大约推30年 memberIdNo = generator_const(test_data[2]) browser.find_element_by_id("memberIdNo").send_keys(memberIdNo) # 推荐人手机号,非必填项 # browser.find_element_by_id("referrerPhone").send_keys("phone_num") browser.find_element_by_xpath("//a[@class='btn btn_register']").click() time.sleep(2) browser.find_element_by_xpath("//li/a[@id='confirmBtn']").click() time.sleep(3) veri_point = browser.find_element_by_xpath("//div[@class='Balance-left']").text result_dict["veri_point"] = veri_point result_dict["sms_num"] = sms_num return result_dict except: logger.exception("发现错误")
def conf_data(self, key, configFile=None): try: if configFile is None: configFile = self.__conf_config_file config_file = open(configFile, 'r') result = config_file.readlines() result_deal_list = [] key_value_list = [] for i in result: result_deal_list.append(i.strip('\n')) for j in result_deal_list: key_value_list.append(j.split('=')) result_dict = dict(key_value_list) return result_dict[key] except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def get_district_code(): try: with open(DC_PATH) as file: data = file.read() district_list = data.split('\n') for node in district_list: # print node if node[10:11] != ' ': state = node[10:].strip() if node[10:11] == ' ' and node[12:13] != ' ': city = node[12:].strip() if node[10:11] == ' ' and node[12:13] == ' ': district = node[14:].strip() code = node[0:6] code_list.append({"state": state, "city": city, "district": district, "code": code}) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def request(self): try: conn = http_client.HTTPConnection(self.__host, self.__port) if self.__method == "GET": self.path = self.__path + self.__parameters_urlencode_deal conn.request(self.__method, self.__path) if self.__method == "POST": if self.__headers == {"Content-type": "application/json"}: conn.request(self.__method, self.__path, self.__jdata, self.__headers) if self.__headers == {"Content-type": "application/x-www-form-urlencoded"}: conn.request(self.__method, self.__path, self.__data, self.__headers) response = conn.getresponse() result_origin = response.read() try: result = result_origin.decode("gb2312").encode("utf8") except: result = result_origin return result except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def get_district_code(): try: with open(DC_PATH) as file: data = file.read() district_list = data.split('\n') for node in district_list: # print node if node[10:11] != ' ': state = node[10:].strip() if node[10:11] == ' ' and node[12:13] != ' ': city = node[12:].strip() if node[10:11] == ' ' and node[12:13] == ' ': district = node[14:].strip() code = node[0:6] code_list.append({ "state": state, "city": city, "district": district, "code": code }) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def generator(): try: global code_list code_list = [] if not code_list: get_district_code() id = code_list[random.randint(0, len(code_list))]['code'] # 地区项 id += str(random.randint(1930, 2013)) # 年份项 da = date.today() + timedelta(days=random.randint(1, 366)) # 月份和日期项 id += da.strftime('%m%d') id += str(random.randint(100, 300)) # ,顺序号简单处理 i = 0 count = 0 weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] # 权重项 check_code = {'0': '1', '1': '0', '2': 'X', '3': '9', '4': '8', '5': '7', '6': '6', '7': '5', '8': '5', '9': '3', '10': '2'} # 校验码映射 for i in range(0, len(id)): count += int(id[i]) * weight[i] id += check_code[str(count % 11)] # 算出校验码 return id except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def __init__(self, url=None, method="GET", parameters=None, cookie=None, headers={}, get_cookie_url=None, get_cookie_request_data=None, get_cookie_headers=[ ('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)') ]): ''' :param url: 请求使用的url,由于发送cookie的请求方法可以单独传url故此参数非必填。使用request方法请求时必填。 :param method: 请求的方法 :param parameters: 请求的参数 :param cookie: cookie :param headers: 请求头 :param get_cookie_url: 获取cookie的url,如果调用request_with_cookies时此参数必须传 :param get_cookie_request_data: 获取cookie时需要传的参数 :param get_cookie_headers: 获取cookie时需要加的请求头 ''' try: # 解析url if url is None: self.__url = None else: try: if type(url) == bytes: self.__url = url.decode("utf-8") if type(url) == str: self.__url = url except: self.__url = url logger.debug(self.__url) scheme, rest = urllib_parse.splittype(self.__url) # 拆分域名和路径 logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") self.__host_absolutely, self.__path = urllib_parse.splithost( rest) host_list = self.__host_absolutely.split(":") if len(host_list) == 1: self.__host = host_list[0] self.__port = 80 elif len(host_list) == 2: self.__host = host_list[0] self.__port = host_list[1] # 对所传参数进行处理 self.__method = method self.__data = parameters self.__cookie = cookie if parameters != None: self.__parameters_urlencode_deal = urllib_parse.urlencode( parameters) else: self.__parameters_urlencode_deal = "" self.__jdata = simplejson.dumps(parameters, ensure_ascii=False) self.__headers = headers self.__opener = None self.__get_cookie_request_data = None if get_cookie_url is not None: cj = ckjar.CookieJar() self.__opener = urllib_request.build_opener( urllib_request.HTTPCookieProcessor(cj)) self.__opener.addheaders = get_cookie_headers if get_cookie_request_data is not None: self.__get_cookie_request_data = urllib_parse.urlencode( get_cookie_request_data).encode("utf-8") self.__opener.open(get_cookie_url, self.__get_cookie_request_data) except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def get_host(self): try: return self.__host except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def get_session_object(self): try: return self.__session_object except: logger.exception("获取带cookie对象错误")
def get_path(self): try: return self.__path except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def get_opener(self): try: return self.__opener except: logger.exception(u"捕获到错误如下:")
def get_parameters_urlencode_deal(self): try: return self.__parameters_urlencode_deal except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def get_opener(self): try: return self.__opener except Exception as e: logger.error(e) logger.exception(u"捕获到错误如下:")
def output_with_excel(self, template_file, sheet_count, data_list): ''' :param template_file: 模板文件路径 :param sheet_count: 模板文件容sheet的个数,比如5个sheet页通过这个参数可以指定就用3个 :param data_list: 数据list,其中包含sheet页list,表头list,数据list 本方法中均使用list进行数据操作,由于模板中第一行为标题,故插入数据的行数索引从1开始 ''' try: data = xlrd.open_workbook(template_file) sheet_name = data.sheet_names() sheet_list = list() # 将模板文件sheet对象存入sheet_list列表 for i in range(sheet_count): sheet_list.append(data.sheets()[i]) template_data_list = list() # 将模板文件每个sheet的数据list存入tempLate_data_list列表 for i_sheet in sheet_list: template_data_list.append(i_sheet.row_values(0)) output_file = xlwt.Workbook() # 字体设定 font = xlwt.Font() font.bold = True # 边框设定 borders = xlwt.Borders() borders.left = 1 borders.right = 1 borders.top = 1 borders.bottom = 1 # 背景色设定 backcolor = xlwt.Pattern() backcolor.pattern = xlwt.Pattern.SOLID_PATTERN backcolor.pattern_fore_colour = 5 style = xlwt.XFStyle() style.font = font style.borders = borders style.pattern = backcolor output_file_sheet_list = list() # 输出文件添加sheet并给予标题,对象存入output_file_sheet_list列表 for j in range(sheet_count): output_file_sheet_list.append( output_file.add_sheet(sheet_name[j], cell_overwrite_ok=True)) # j_sheet_num为sheet页的索引 for j_sheet_num in range(len(sheet_list)): # j_sheet_row_index为模板文件template_dataList的索引 for j_sheet_row_index in range( len(template_data_list[j_sheet_num])): output_file_sheet_list[j_sheet_num].write( 0, j_sheet_row_index, template_data_list[j_sheet_num][j_sheet_row_index], style) # 数据格式为{"sheet页数":{"列数":[当前添加的数据1,当前添加的数据2]}} filter_dict = dict() logger.debug("++++++++++++++++++++++++++++++") logger.debug(data_list) # 以追加方式添加数据 for data_num in range(len(data_list[0])): logger.debug(data_num) logger.debug(data_list) # 当前sheet的索引 data_sheet_num = int(data_list[0][data_num]) - 1 data_row_num = 1 data_col_num = int(data_list[1][data_num]) - 1 logger.debug("===================================") logger.debug(data_sheet_num) logger.debug(data_col_num) # 判断当前sheet页数是否在filter_dict中,即当前sheet是否曾经出现过 if str(data_sheet_num) not in filter_dict: # 当前sheet页数不存在filter_dict,添加对应data_sheet_num字典 filter_dict[str(data_sheet_num)] = {} # 增加对应列数的数据list filter_dict[str(data_sheet_num)][str( data_col_num)] = list() # 由于sheet页数第一次出现,故数据也一定第一次出现,所以之列列表中添加值 filter_dict[str(data_sheet_num)][str(data_col_num)].append( data_col_num) else: # 当前sheet页数存在filter_dict中,判断当前列数是否在列数字典中,即当前列数是否出现过 if str(data_col_num) not in filter_dict[str( data_sheet_num)]: # 当前列数未出现过,添加列表 filter_dict[str(data_sheet_num)][str( data_col_num)] = list() # 向列数字典列表插数据,但插入数据的当前行数为初始值,即1 filter_dict[str(data_sheet_num)][str( data_col_num)].append(data_col_num) else: # 当前列数出现过。向列数字典列表插数据,插入数据的当前行数为总出现的次数 filter_dict[str(data_sheet_num)][str( data_col_num)].append(data_col_num) data_row_num = len(filter_dict[str(data_sheet_num)][ str(data_col_num)]) logger.debug(filter_dict) data_preview_add = data_list[2][data_num] # 向excel中插入数据 output_file_sheet_list[data_sheet_num].write( data_row_num, data_col_num, data_preview_add) output_file.save(str(TimeStamp.time_stamp()) + ".xls") except: logger.exception("发现错误")