def getSelData(el, Detailstr): """ 选择查询条件的数据项 :param el: :param Detailstr: :return: """ time.sleep(1) dataList = Select(el.get()).options for i in range(len(dataList)): #if dataList[i].text.strip() == Detailstr.strip(): if Detailstr.strip() in dataList[i].text: #time.sleep(1) #value = dataList[i].get_attribute('value') #Select(el.get()).select_by_value(value) index=dataList.index(dataList[i]) Select(el.get()).select_by_index(index) break else: logging.error(u'没有数据'+Detailstr+u',请确认') exit(u'没有此数据,请确认')
def SubmitApproval(self,func,el,sub): self.clickFunction(func,el,sub,key) sleep(5) self.bSwithcfrname(el, key) self.tabcheck(el) a = EL.get_el_list('RPdataDetail', cg.path) self.checkKeys(func, el, key,sub) el.getFunctionName(a[0]) el.get_element('selWorkFlow') currentscttext = Select(el.get()).all_selected_options[0].text if u'请选择' in currentscttext: rdmod = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdmod) logging.info(Select(el.get()).all_selected_options[0].text) else: selOption = Select(el.get()).all_selected_options allOptions = Select(el.get()).options if selOption[0] in allOptions: index = allOptions.index(selOption[0]) while True: rd = random.randint(1, len(allOptions) - 1) if index != rd: Select(el.get()).select_by_index(rd) el.get_element('SubmitApproval') el.get().click() func.driver.switch_to.default_content() sleep(2) #print func.driver.current_url txtT=func.driver.find_element_by_xpath('/html/body/div[1]/table/tbody/tr[2]/td[2]/div/table/tbody/tr[1]/td/div/div[1]').text if txtT==u'新增报告': txtT=func.driver.find_element_by_xpath('/html/body/div[1]/table/tbody/tr[2]/td[2]/div/table/tbody/tr[1]/td/div/div[1]').text #print txtT if txtT==u'从默认审批人中指定': func.driver.find_elements_by_xpath('//*[@id="field_status"]')[0].find_element_by_xpath('input').click() else: self.choices_Auser(func,el)
def NewCopyDetail(self,el,args=None,ButtonKey=None,Inquiry=None): """ 复制新增功能 :param self: :param el: Element类对象 :param args: 参数组, :param ButtonKey: 操作的按钮,默认为保存 :param Inquiry: 询价方式 :return: """ if Inquiry == None: commond.Duantao(self, el) else: commond.OtherXujia(self, el, Inquiry) commond.LinkDate(el) el.getFunctionName(dataCopyNew[0]) el.get_element(dataCopyNew[1]) el.get().click() self.driver.switch_to.default_content() el.getFunctionName(MsgFrm[0]) el.get_element(MsgFrm[1]) xf = el.get() self.driver.switch_to.frame(xf) el.getFunctionName(dataDetail[0]) el.get_element('jishutuandui') ''' #当前技术团队项为 currentseltext = Select(el.get()).all_selected_options[0].text print currentseltext if u'请选择' in currentseltext: rd = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rd) #Select(el.get()).all_selected_options[0].text ''' # 技术团队 #el.get_element('jishutuandui') if len(Select(el.get()).options) < 2: el.get_element('weituoleixing') selOption = Select(el.get()).all_selected_options allOptions = Select(el.get()).options print allOptions if selOption[0] in allOptions: index = allOptions.index(selOption[0]) while True: rd = random.randint(1, len(allOptions) - 1) if index != rd: Select(el.get()).select_by_index(rd) break # 当前技术团队项 el.get_element('jishutuandui') currentseltext = Select(el.get()).all_selected_options[0].text if u'请选择' in currentseltext: rd = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rd) logging.info(u'技术团队:' + Select(el.get()).all_selected_options[0].text) el.get_element('shenfen') selProvince=Select(el.get()).all_selected_options[0].text if u'请选择'in selProvince: rdP = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdP) el.get_element('chengshi') rdC = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdC) el.get_element('xingzhengqu') rdX = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdX) el.get_element('quyu') rdQ = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdQ) el.get_element('chengshi') field_cityid=Select(el.get()).all_selected_options[0].text if u'请选择' in field_cityid: rdC = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdC) el.get_element('xingzhengqu') rdX = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdX) el.get_element('quyu') rdQ = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdQ) el.get_element('xingzhengqu') field_areaid=Select(el.get()).all_selected_options[0].text if u'请选择' in field_areaid: rdX = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdX) el.get_element('quyu') rdQ = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdQ) #el.get_element('quyu') #field_subareaid=Select(el.get()).all_selected_options[0].text #if u'请选择' in field_subareaid: #rdQ = random.randint(2, len(Select(el.get()).options) - 1) #Select(el.get()).select_by_index(rdQ) firstText=commond.NewDataDetial(el,args) if ButtonKey not in MsgBtn or ButtonKey == None: ButtonKey = 'save' if Inquiry != None: time.sleep(5)# 10s fixed 3s el.getFunctionName(MulMsgBtn[0]) # el.get_element(ButtonKey) else: el.getFunctionName(MsgBtn[0]) el.get_element(ButtonKey) el.get().click() self.driver.switch_to.default_content() time.sleep(3) commond.Switchto_Frame(self,Inquiry) commond.SelectFirstData(self,el) self.driver.switch_to.default_content() el.getFunctionName(MsgFrm[0]) el.get_element(MsgFrm[1]) xf = el.get() self.driver.switch_to.frame(xf) secondText = commond.NewDataDetial(el, args) if firstText[0]==''or firstText[0]==None: firstTXT=u'未填写' else: firstTXT=firstText[0] if secondText[0]==None or secondText[0]=='': secondTXT=u'未填写' else: secondTXT=secondText[0] #logging.info(firstText[1]+u' 复制前:'+firstTXT+u'-- 复制后:'+secondTXT) if firstText[0]==secondText[0]: return True else: return False
def parse(self, response): self.driver.get(response.url) select = Select( self.driver.find_element_by_xpath('//*[@id="selectedSubjects"]')) num_options = len(select.options) json_data = [] # Iterate over each subject listed in the combobox for i in range(num_options - 1): self.driver.get(response.url) # Wait for subjects appear in options box, then click WebDriverWait(self.driver, 10).until( EC.presence_of_element_located( (By.XPATH, '//*[@id="selectedSubjects"]'))) Select( self.driver.find_element_by_xpath( '//*[@id="selectedSubjects"]')).select_by_index(i) subject_selection = Select( self.driver.find_element_by_xpath( '//*[@id="selectedSubjects"]')).options[i].text course_subject_long = subject_selection[( subject_selection.index('-') + 2):] course_subject = subject_selection[:(subject_selection.index('-') - 1)] # Hit submit to get courses for that subject self.driver.find_element_by_xpath( '//*[@id="socFacSubmit"]').click() # Try to get the number of pages for this subject try: total_page_number = scrapy.Selector( text=unicode(self.driver.page_source) ).xpath( '//*[@id="socDisplayCVO"]/div[2]/table/tbody/tr/td[3]/text()[1]' ).extract_first(default='f 0)') total_page_number = int( total_page_number[(total_page_number.index('f') + 2):total_page_number.index(')')]) except: total_page_number = 0 # Iterate over each page in for the results of this subject for j in range(1, total_page_number + 1): self.driver.get( 'https://act.ucsd.edu/scheduleOfClasses/scheduleOfClassesStudentResult.htm?page=' + str(j)) result_selector = scrapy.Selector( text=self.driver.page_source.encode('utf-8')) course_selectors = result_selector.xpath( '//*[@id="socDisplayCVO"]/table/tbody/tr/td[3]/a/span') # Iterate over each course selector. Its neighbor element will give the professor name (cant get any # other way) for selector in course_selectors: course_title = unicode( selector.xpath('.//text()').extract_first(default='')) if ' ' in course_title: course_title = course_title[:course_title.index(' ')] course_number = unicode( selector.xpath( './/ancestor::td[1]/preceding-sibling::td[1]/text()' ).extract_first('')) professor_name = selector.xpath( './/ancestor::tr[1]//following-sibling::tr[1]/td/a/text()' ).extract_first(default=None) # Get non-linked version of name... TODO: not working if not professor_name: professor_name = selector.xpath( './/ancestor::tr[1]//following-sibling::tr[1]/td/text()' ).extract_first(default=None) if not re.search('[a-zA-z]', professor_name): professor_name = '' professor_name = unicode(professor_name) professor_name = ( professor_name[:professor_name.index(' ')] if professor_name else '') json_data.append({ "courseSubject": course_subject, "courseSubjectLong": course_subject_long, "courseName": course_title, "courseNumber": course_number, "professorName": professor_name }) self.data.write(unicode(json.dumps(json_data, indent=4)))
def Query(self,el,msgmode=None,data=None,submode=None,Inquiry=None,substate=None): """ :param self: :param el: :param msgmode: :param data: :param submode: :param Inquiry: :param substate: :return: """ if Inquiry == None: commond.Duantao(self,el,submode,substate) else: commond.OtherXujia(self,el,Inquiry,substate) el.getFunctionName(query[0]) if Inquiry!='Gaizhang': if substate!='daishenpi'and substate!='yishenpi': el.get_element('moreConditions') el.get().click() elementList = [] resultText='' if data==u'默认': data=msgmode logging.info(u'查询关键字为:%s'%msgmode) if msgmode==u'省份': if data==None: pass else: for i in [u'直辖市',u'省',u'特区',u'自治区']: if i in data: if u'直辖市' in data or u'特区' in data: if u'直辖市' in data: provinceKey=u'直辖市' city = data.split(provinceKey)[0] + u'市' else: provinceKey=u'特区' city = data.split(provinceKey)[0] dataprList=data.split(provinceKey) provincetext=data.split(provinceKey)[0]+provinceKey el.get_element('province') provinceList=Select(el.get()).options for i in range(len(provinceList)): if provinceList[i].text.strip()==provincetext: value=provinceList[i].get_attribute('value') Select(el.get()).select_by_value(value) #index=provinceList.index(provinceList[i]) #Select(el.get()).select_by_index(index) #time.sleep(5) break el.get_element('city') cityList=Select(el.get()).options for i in range(len(cityList)): if cityList[i].text.strip()==city: index=cityList.index(cityList[i]) Select(el.get()).select_by_index(index) break if len(dataprList)>=2: area=data.split(provinceKey)[1] el.get_element('area') areaList=Select(el.get()).options for i in range(len(areaList)): if areaList[i].text.strip()==area: index=areaList.index(areaList[i]) Select(el.get()).select_by_index(index) break else: if u'省' in data: provinceKey=u'省' elif u'自治区' in data: provinceKey =u'自治区' else: logging.error(u'数据格式不正确,请确认') exit(u'数据格式不正确,请确认') dataprList = data.split(provinceKey) provincetext = dataprList[0] + provinceKey el.get_element('province') getSelData(el, provincetext) el.get_element('city') if dataprList[1]!='': if u'市' in dataprList[1]: cityKey=u'市' elif u'县' in dataprList[1]: cityKey=u'地区' elif u'州' in dataprList[1]: cityKey =u'自治州' elif u'盟' in dataprList[1]: cityKey=u'盟' cityList = dataprList[1].split(cityKey,1) city = cityList[0]+ cityKey #el.get_element('city') getSelData(el, city) if cityList[1]!='': area=cityList[1] el.get_element('area') getSelData(el, area) time.sleep(5) else: area='' else: city='' resultText=[] cityOptions=Select(el.get()).options for i in cityOptions: #print i.text resultText.append(i.text) break else: logging.info(u'请检查数据格式') exit(u'请检查数据格式') if city=='': pass #resultText=''#待解决 elif area=='': resultText=city else: resultText=city+'['+area+']' elif msgmode==u'分支机构': if data!=None: elementList.append('fenzhijigou') dataList=data.split() company=dataList[0] el.get_element('company') getSelData(el, company) if len(dataList)>1: elementList.append('yewuyuansuoshubumen') department=dataList[1] el.get_element('department') getSelData(el, department) elif msgmode==u'委估对象类型': elementList.append('xunjialeixing') el.get_element('valuationTypeMode') getSelData(el, data) elif msgmode==u'来源': if data==u'默认': data=msgmode el.get_element('source') getSelData(el, data) elif msgmode==u'委托客户' or msgmode==u'客户单位': dataList=data.split() entrustCorrespondent=dataList[0] el.get_element('entrustCorrespondent') getSelData(el, entrustCorrespondent) if len(dataList)>1: bankBranch=dataList[1] el.get_element('bankBranch') getSelData(el, bankBranch) time.sleep(1) if len(dataList)>2: bankSubbranch=dataList[2] el.get_element('bankSubbranch') getSelData(el, bankSubbranch) elif msgmode==u'状态': el.get_element('state') getSelData(el, data) elif msgmode==u'估价师': #因为功能涉及流程比较复杂暂不开发 pass elif msgmode==u'查勘状态': surveystate=data xpath='td[15]/div' el.get_element('surveystate') getSelData(el, surveystate) elif msgmode==u'询价时间'or msgmode==u'申请时间' or msgmode==u'盖章时间': strdata=str(data) if '-' in strdata: dataList = strdata.split(':') begintime = dataList[0] else: dataList=[] begintime='' el.get_element('beginData') #self.driver.execute_script( #"var setDate=document.getElementById(\""+el.path+"\");setDate.removeAttribute('readonly');") #print el.path self.driver.execute_script( "var setDate=document.getElementById(\"" + el.path + "\");setDate.removeAttribute('readonly');") self.driver.execute_script("var setDate=function $(id){ return document.getElementById(id); };setDate(\""+el.path+"\").removeAttribute('readonly');") if Inquiry!='Gaizhang': el.get().clear() if begintime!='': #print begintime el.get().send_keys(begintime) el.get_element('endData') self.driver.execute_script( "var setDate=document.getElementById(\""+el.path+"\");setDate.removeAttribute('readonly');") if Inquiry!='Gaizhang': el.get().clear() if len(dataList)>1: endtime=dataList[1] el.get().send_keys(endtime) elif msgmode==u'面积': strdata=str(data) dataList=strdata.split('-') minArea=dataList[0] if minArea!='': el.get_element('minArea') el.get().clear() el.get().send_keys(minArea) if len(dataList)>1: maxArea=dataList[1] el.get_element('maxArea') el.get().click() el.get().send_keys(maxArea) elif msgmode==u'关键字查询': el.get_element('fuzzyQuery') el.get().clear() if type(data)==float: data=str(data) if data==None: pass else: el.get().send_keys(data) elif msgmode==u'提交时间': if type(data)==float: data=str(data) dataList = data.split(':') begintime = dataList[0] time.sleep(1) el.get_element('submitBeginData') # Chrome浏览器无法执行下面的代码与js #self.driver.find_element_by_xpath('//*[@id="txtQueryBeginDate"]') self.driver.execute_script("var setDate=document.getElementById(\"" + el.path + "\");setDate.removeAttribute('readonly');") el.get().clear() if begintime != '': el.get().send_keys(begintime) el.get_element('submitEndData') self.driver.execute_script("var setDate=document.getElementById(\"" + el.path + "\");setDate.removeAttribute('readonly');") el.get().clear() if len(dataList) > 1: endtime = dataList[1] el.get().send_keys(endtime) elif msgmode==u'询价单类型': elementList.append('xujiadanleixing') el.get_element('xujiadanleixing') getSelData(el, data) elif msgmode==u'物业类型': elementList.append('wuyeleixing') el.get_element('wuyeleixing') getSelData(el, data) elif msgmode==u'用户类型': if data==u'默认': data=msgmode el.get_element('UserType') getSelData(el, data) else: logging.error(u'请检查询的字段是否正确!') exit(u'请检查询的字段是否正确') time.sleep(2) el.get_element('queryKey') el.get().click() time.sleep(1) if msgmode == u'省份': xpath = u'td[13]/div' result=getAssignData(el, resultText, xpath) return result elif msgmode==u'分支机构': el.getFunctionName(elData[0]) el.get_element('checkbox') el.getDriver().implicitly_wait(1) try: # for i in range(len(el.gets())): logging.info(u'共'+str(len(el.gets()))+u'条数据') rd = random.randint(0, len(el.gets()) - 1) except: el.get_element('tabNotice') logging.info(el.get().text) return True logging.info(u'第' + str(rd + 1) + u'条数据') if substate=='yishenpi'or substate=='daishenpi': #dId=el.gets()[rd].find_element_by_xpath('td[2]/div').text dId=u'列表没有询价编号一列' else: dId = el.gets()[rd].find_element_by_xpath('td[3]/div').text #dLink = el.gets()[rd].find_element_by_xpath('td[7]/div').text logging.info(u'询价编号:' + dId) time.sleep(1) # if substate!=None: # # if 'shenpi' in substate: # # #el.gets()[rd].find_element_by_xpath('td[3]/div').click() # # else: # ActionChains(self.driver).double_click(el.gets()[rd].find_element_by_xpath('td[3]/div')).perform() # else: # ActionChains(self.driver).double_click(el.gets()[rd].find_element_by_xpath('td[3]/div')).perform() ActionChains(self.driver).double_click(el.gets()[rd].find_element_by_xpath('td[3]/div')).perform() result = getDetail(self, el, data, query, elementList) return result elif msgmode==u'来源': if Inquiry=='Zidongxujia': xpath=u'td[1]/div/img' else: xpath = u'td[2]/div/img' result=getAssignData(el, data, xpath,Inquiry) return result elif msgmode==u'委估对象类型' : el.getFunctionName(elData[0]) el.get_element(elData[1]) # for i in range(len(el.gets())): time.sleep(1) el.getDriver().implicitly_wait(1) try: lnGets=len(el.gets())-1 except: el.get_element('tabNotice') logging.info(el.get().text) return True rd = random.randint(0,lnGets) logging.info(u'第'+str(rd+1)+u'条') dId = el.gets()[rd].find_element_by_xpath('td[3]/div').text dLink = el.gets()[rd].find_element_by_xpath('td[7]/div').text logging.info(u'询价编号:' + dId) ActionChains(self.driver).double_click(el.gets()[rd].find_element_by_xpath('td[3]/div')).perform() result = getDetail(self, el, data, query, elementList) return result elif msgmode==u'委托客户'or msgmode==u'客户单位': valuationText = ''.join(data) #print valuationText if Inquiry=='Duotao': xpath = 'td[13]/div' elif Inquiry=='Zidongxujia': xpath='td[2]/div' else: xpath='td[9]/div' result=getAssignData(el, valuationText, xpath) #print result return result elif msgmode==u'状态': elementList.append('xunjiazhuantai') el.getFunctionName(elData[0]) el.get_element(elData[1]) time.sleep(1) el.getDriver().implicitly_wait(1) try: lnGets=len(el.gets()) - 1 except: el.get_element('tabNotice') logging.info(el.get().text) return True rd = random.randint(0, lnGets) logging.info(u'第' + str(rd + 1) + u'条') dId = el.gets()[rd].find_element_by_xpath('td[3]/div').text dLink = el.gets()[rd].find_element_by_xpath('td[7]/div').text logging.info(u'询价编号:' + dId) ActionChains(self.driver).double_click(el.gets()[rd].find_element_by_xpath('td[3]/div')).perform() result = getDetail(self, el, data, query, elementList) return result elif msgmode==u'查勘状态': result=getAssignData(el, data,xmlpath) return result elif msgmode==u'询价时间'or msgmode==u'申请时间'or msgmode==u'盖章时间': if Inquiry=='Zidongxujia': xpath='td[17]/div' elif Inquiry=='Gaizhang': xpath='td[11]/div' elif Inquiry=='Duotao': #xpath='td[22]/div'#这是估价时间,不是询价时间 elementList.append('chuangjianshijian') el.getFunctionName(elData[0]) el.get_element('checkbox') el.getDriver().implicitly_wait(1) if data == u'清空': if len(el.gets()) > 0: return True else: try: el.getDriver().implicitly_wait(1) el.get_element('tabNotice') logging.info(el.get().text) return True except: logging.error(u'出错!') return False try: # for i in range(len(el.gets())): rd = random.randint(0, len(el.gets())-1) except: el.get_element('tabNotice') logging.info(el.get().text) return True logging.info(u'第' + str(rd + 1) + u'条数据') if substate == 'yishenpi' or substate == 'daishenpi': # dId=el.gets()[rd].find_element_by_xpath('td[2]/div').text dId = u'列表未询价编号' else: dId = el.gets()[rd].find_element_by_xpath('td[3]/div').text # dLink = el.gets()[rd].find_element_by_xpath('td[7]/div').text logging.info(u'询价编号:' + dId) time.sleep(1) ActionChains(self.driver).double_click(el.gets()[rd].find_element_by_xpath('td[3]/div')).perform() result = getDetail(self, el, dataList, query, elementList) return result else: if substate=='Zhuzai': xpath = 'td[30]/div' else: xpath= 'td[27]/div' result=getAssignData(el, dataList, xpath) return result #以下代码查询其中一条数据,并进入详细界面,获取创建时间 ''' elementList.append('chuangjianshijian') el.getFunctionName(elData[0]) el.get_element('checkbox') el.getDriver().implicitly_wait(1) if data == u'清空': if len(el.gets())>0: return True else: try: el.getDriver().implicitly_wait(1) el.get_element('tabNotice') logging.info(el.get().text) return True except: logging.error(u'出错!') return False try: # for i in range(len(el.gets())): rd = random.randint(0, len(el.gets()) - 1) except: el.get_element('tabNotice') logging.info(el.get().text) return True logging.info(u'第' + str(rd + 1) + u'条数据') if substate == 'yishenpi' or substate == 'daishenpi': # dId=el.gets()[rd].find_element_by_xpath('td[2]/div').text dId = u'列表未询价编号' else: dId = el.gets()[rd].find_element_by_xpath('td[3]/div').text # dLink = el.gets()[rd].find_element_by_xpath('td[7]/div').text logging.info(u'询价编号:' + dId) time.sleep(1) ActionChains(self.driver).double_click(el.gets()[rd].find_element_by_xpath('td[3]/div')).perform() result = getDetail(self, el, dataList, query, elementList) return result ''' elif msgmode==u'面积': if Inquiry=='Zidongxujia': xpath='td[6]/div' elif Inquiry=="Duotao": xpath = 'td[16]/div' else: xpath='td[17]/div' result=getAssignData(el, dataList, xpath) return result elif msgmode==u'关键字查询': result=showAllData(el,data) return result elif msgmode==u'提交时间': xpath = 'td[9]/div' result = getAssignData(el, dataList, xpath) return result elif msgmode == u'询价单类型': if data==u'询价单类型': data=[u'自动询价',u'人工询价'] xpath='td[2]/div' result=getAssignData(el,data,xpath) return result elif msgmode==u'物业类型': xpath = 'td[5]/div' if data==u'物业类型': data=[u'住宅',u'办公',u'商业',u'工业',u'土地',u'资产',u'其他'] result = getAssignData(el, data, xpath) return result elif msgmode==u'用户类型': #xpath = u'td[2]/div' result = showAllData(el, data) return result else: logging.error(u'请检查询的字段是否正确!') exit(u'请检查询的字段是否正确')
def WritePreviews(self,el,msgElement=None,data=None,link=None,submode=None,Inquiry=None): if Inquiry == None: commond.Duantao(self, el, submode) dataId=JudgeTOBData(el,link) #commond.switchToDetailUI(self, el) el.getFunctionName(ExamineModif[0]) el.get_element('writePreviews') el.get().click() time.sleep(1) self.driver.switch_to.default_content() el.get_element('transferOfBusinessiframe') self.driver.switch_to.frame(el.get()) el.getFunctionName(ExamineModif[0]) # 查看是否Tab显示 el.get_element('pReevaluateTab') tabatb = el.get().get_attribute('class') logging.info(u'查看是否为Tab方式') if 'chked' in tabatb: el.get_element('tabchkbox') el.get().click() time.sleep(1) if msgElement!='jishutuandui': # 技术团队 el.get_element('jishutuandui') if len(Select(el.get()).options) < 2: el.get_element('weituoleixing') selOption = Select(el.get()).all_selected_options allOptions = Select(el.get()).options if selOption[0] in allOptions: index = allOptions.index(selOption[0]) while True: rd = random.randint(1, len(allOptions) - 1) if index != rd: Select(el.get()).select_by_index(rd) break time.sleep(1) el.get_element('jishutuandui') currentseltext = Select(el.get()).all_selected_options[0].text if u'请选择' in currentseltext: rd = random.randint(1, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rd) logging.info(u'技术团队:' + Select(el.get()).all_selected_options[0].text) if msgElement!='yewubumen': ##业务部门 el.get_element('yewubumen') currentseltext = Select(el.get()).all_selected_options[0].text if u'请选择' in currentseltext: rd = random.randint(1, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rd) logging.info(u'业务部门:' + Select(el.get()).all_selected_options[0].text) if msgElement!='baogaoleixing': ##报告类型 el.get_element('baogaoleixing') currentseltext = Select(el.get()).all_selected_options[0].text if u'请选择' in currentseltext: rd = random.randint(1, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rd) logging.info(u'报告类型:' + Select(el.get()).all_selected_options[0].text) #time.sleep(5) #if msgElement !=None: #.get_element(msgElement) if msgElement != None: currenttext='' el.get_element(msgElement) dictFunction = EL.get_el_dict(ExamineModif[0], msgElement, xmlpath) try: el.get().get_attribute('tagname') except: raise (u'未找元素,请确认') if 'elementType' in dictFunction: if dictFunction['elementType'] == 'select': currentscttext = Select(el.get()).all_selected_options[0].text if data == None: if u'请选择' in currentscttext: rdmod = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdmod) logging.info(Select(el.get()).all_selected_options[0].text) else: selOption = Select(el.get()).all_selected_options allOptions = Select(el.get()).options if selOption[0] in allOptions: index = allOptions.index(selOption[0]) while True: rd = random.randint(1, len(allOptions) - 1) if index != rd: Select(el.get()).select_by_index(rd) elif data in currentscttext and u'请选择' not in currentscttext: pass else: allOptions = Select(el.get()).options for selem in allOptions: if data == selem.text: index = allOptions.index(selem) Select(el.get()).select_by_index(index) break else: logging.info(u'选项中没有输入的项,请确认!') exit(u'选项中没有输入的项,请确认!') currenttext=Select(el.get()).all_selected_options[0].text elif dictFunction['elementType'] == 'input' or dictFunction['elementType'] == 'textarea': el.get().clear() el.get().send_keys(data) currenttext = el.get().get_attribute('value') else: el.get().clear() el.get().send_keys(data) currenttext = el.get().text logging.info(u'输入:'+currenttext) time.sleep(1) el.get_element('pReevaluateSave') el.get().click() self.driver.switch_to.default_content() time.sleep(1) el.get_element('pReevaluateOk') el.get().click() ''' el.get_element('sureOK') el.get().click() ''' linkText=modification_lookData(self,el,dataId,Inquiry) if linkText==u'撰写预评中': return True #commond.switchToDetailUI(self,el) #newtext=commond.GetDetail(self,el,ExamineModif,msgElement) #return data==newtext else: commond.OtherXujia(self, el, Inquiry)
def ModificationData(self,el,msgmode=None,data=None,link=None,submode=None,button=None,Inquiry=None): """ 修改数据验证 :param self: :param el: :param msgmode:元素在xml的名称 :param data: 输入数据 :param link: 环节 :param submode: 单套询价类型 :param button: 按钮 :param Inquiry: 询价类型 :return: """ if Inquiry == None: commond.Duantao(self, el, submode) # commond.Switchto_Frame(self, Inquiry) # currentuser = commond.sessionName # valuer = commond.Valuer dataId=ModificationClickLinkData(el,link=link) commond.switchToDetailUI(self, el) ''' if button == 'writePreviews': el.getFunctionName(ExamineModif[0]) el.get_element(msgmode) el.get().click() ''' addnew.checkTab(el)#查看是否Tab显示 el.getFunctionName(ExamineModif[0]) el.get_element(msgmode) commond.GetDetail(self, el, ExamineModif, msgmode) if msgmode != None: currenttext='' el.get_element(msgmode) dictFunction = EL.get_el_dict(ExamineModif[0], msgmode, xmlpath) try: el.get().get_attribute('tagname') except: raise (u'未找元素,请确认') if 'elementType' in dictFunction: if dictFunction['elementType'] == 'select': currentscttext = Select(el.get()).all_selected_options[0].text # logging.info(currenttext) if data == None: if u'请选择' in currentscttext: rdmod = random.randint(2, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdmod) logging.info(Select(el.get()).all_selected_options[0].text) else: selOption = Select(el.get()).all_selected_options allOptions = Select(el.get()).options if selOption[0] in allOptions: index = allOptions.index(selOption[0]) while True: rd = random.randint(1, len(allOptions) - 1) if index != rd: Select(el.get()).select_by_index(rd) elif data in currentscttext and u'请选择' not in currentscttext: pass else: allOptions = Select(el.get()).options for selem in allOptions: if data == selem.text: index = allOptions.index(selem) Select(el.get()).select_by_index(index) break else: logging.info(u'选项中没有输入的项,请确认!') exit(u'选项中没有输入的项,请确认!') currenttext=Select(el.get()).all_selected_options[0].text elif dictFunction['elementType'] == 'input' or dictFunction['elementType'] == 'textarea': el.get().clear() el.get().send_keys(data) currenttext = el.get().get_attribute('value') else: el.get().clear() el.get().send_keys(data) currenttext = el.get().text logging.info(u'输入:'+currenttext) el.getFunctionName(MsgBtn[0]) el.get_element('save') el.get().click() self.driver.switch_to.default_content() time.sleep(1) ''' el.get_element('close') el.get().click() ''' modification_lookData(self,el,dataId,Inquiry) commond.switchToDetailUI(self,el) newtext=commond.GetDetail(self, el, ExamineModif, msgmode) return data==newtext else: commond.OtherXujia(self, el, Inquiry)
def reportadd(self,func,el,sub,button=None,**args): oldIDlist=self.clickFunction(func,el,sub,key) sleep(3) self.bSwithcfrname(el,key) self.tabcheck(el) RPdataDetail = EL.get_el_list('RPdataDetail', cg.path) currenttxtList=[] self.checkKeys(func, el, key,sub) #通过字典类型来判断数据类型,通过字典的值来填写数据 if u'委托客户' in args.keys(): if u'委托客户分行' in args.keys() and len(args.keys())>=3: wtkh=[u'委托客户',u'委托客户分行',u'委托客户支行'] else: wtkh=args.keys() for i in wtkh: for j in range(1, len(RPdataDetail)): RPdataDetaildict = EL.get_el_dict(RPdataDetail[0], RPdataDetail[j], cg.path) if RPdataDetaildict.get('name').strip() == i.strip(): el.getFunctionName(RPdataDetail[0]) el.get_element(RPdataDetail[j]) currentscttext = Select(el.get()).all_selected_options[0].text if args[i] == None: if u'请选择' in currentscttext: rdmod = random.randint(1, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdmod) logging.info(Select(el.get()).all_selected_options[0].text) else: selOption = Select(el.get()).all_selected_options allOptions = Select(el.get()).options if selOption[0] in allOptions: index = allOptions.index(selOption[0]) while True: rd = random.randint(1, len(allOptions) - 1) if index != rd: Select(el.get()).select_by_index(rd) elif args[i] in currentscttext and u'请选择' not in currentscttext: pass else: allOptions = Select(el.get()).options for selem in allOptions: if args[i].strip() == selem.text.strip(): index = allOptions.index(selem) Select(el.get()).select_by_index(index) sleep(1) break else: logging.error(u'未找到此选项:' + args[i]) exit(u'未找到此选项:' + args[i]) currenttxtList.append(args[i]) break else: logging.error(u'not found:' + i) currenttxtList.append('false') else: for i in args.keys(): if i.strip() == u'评估方法': if type(args[i]) == list: pass else: if args[i]==u'比较法': if func.driver.find_element_by_xpath('//*[@id="field_valuationmethods"]/input[1]').get_attribute('checked')!='true': func.driver.find_element_by_xpath('//*[@id="field_valuationmethods"]/input[1]').click() currenttxtList.append(u'比较法') elif args[i]==u'收益法': if func.driver.find_element_by_xpath( '//*[@id="field_valuationmethods"]/input[2]').get_attribute('checked') != 'true': func.driver.find_element_by_xpath('//*[@id="field_valuationmethods"]/input[2]').click() currenttxtList.append(u'收益法') elif args[i]==u'成本法': if func.driver.find_element_by_xpath( '//*[@id="field_valuationmethods"]/input[3]').get_attribute('checked') != 'true': func.driver.find_element_by_xpath('//*[@id="field_valuationmethods"]/input[3]').click() currenttxtList.append(u'成本法') elif args[i]==u'假设开发法': if func.driver.find_element_by_xpath( '//*[@id="field_valuationmethods"]/input[4]').get_attribute('checked') != 'true': func.driver.find_element_by_xpath('//*[@id="field_valuationmethods"]/input[4]').click() currenttxtList.append(u'假设开发法') elif args[i]==u'基准地价修正法': if func.driver.find_element_by_xpath( '//*[@id="field_valuationmethods"]/input[5]').get_attribute('checked') != 'true': func.driver.find_element_by_xpath('//*[@id="field_valuationmethods"]/input[5]').click() currenttxtList.append(u'基准地价修正法') elif args[i]==u'路线价法': if func.driver.find_element_by_xpath( '//*[@id="field_valuationmethods"]/input[6]').get_attribute('checked') != 'true': func.driver.find_element_by_xpath('//*[@id="field_valuationmethods"]/input[6]').click() currenttxtList.append(u'路线价法') elif args[i]==u'长期趋势法': if func.driver.find_element_by_xpath( '//*[@id="field_valuationmethods"]/input[7]').get_attribute('checked') != 'true': func.driver.find_element_by_xpath('//*[@id="field_valuationmethods"]/input[7]').click() currenttxtList.append(u'长期趋势法') else: for j in range(1, len(RPdataDetail)): RPdataDetaildict=EL.get_el_dict(RPdataDetail[0], RPdataDetail[j], cg.path) if RPdataDetaildict.get('name').strip()==i.strip(): el.getFunctionName(RPdataDetail[0]) el.get_element(RPdataDetail[j]) if RPdataDetaildict.get('elementType')== 'select': try: currentscttext = Select(el.get()).all_selected_options[0].text except: logging.error(u'请确实是否有此字段') exit(u'请确实是否有此字段') if args[i] == None or args[i]=='None': if u'请选择' in currentscttext: rdmod = random.randint(1, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rdmod) logging.info(Select(el.get()).all_selected_options[0].text) else: selOption = Select(el.get()).all_selected_options allOptions = Select(el.get()).options if selOption[0] in allOptions: index = allOptions.index(selOption[0]) while True: rd = random.randint(1, len(allOptions) - 1) if index != rd: Select(el.get()).select_by_index(rd) elif args[i] in currentscttext and u'请选择' not in currentscttext: pass else: allOptions = Select(el.get()).options for selem in allOptions: if args[i].strip() == selem.text.strip(): index = allOptions.index(selem) Select(el.get()).select_by_index(index) break else: logging.error(u'未找到此选项:' + args[i]) exit(u'未找到此选项:' + args[i]) currenttxtList.append(args[i]) #currenttxtList.append(Select(el.get()).all_selected_options[0].text) elif RPdataDetaildict.get('elementType')== 'input' or RPdataDetaildict.get('elementType')== 'textarea': el.get().clear() el.get().send_keys(args[i]) currenttxtList.append(args[i]) #currenttxtList.append(el.get().get_attribute('value')) elif RPdataDetaildict.get('elementType')== 'button': el.get().click() if i==u'查勘员': self.choices_Auser(func, el, 'tan1') try: xf=func.driver.find_element_by_xpath('/html/body/div[2]/table/tbody/tr[2]/td[2]/div/table/tbody/tr[2]/td[2]/div/iframe') except: xf = func.driver.find_element_by_xpath('/html/body/div[1]/table/tbody/tr[2]/td[2]/div/table/tbody/tr[2]/td[2]/div/iframe') func.driver.switch_to.frame(xf) else: if i==u'报告撰写辅助人': self.choices_Auser(func, el, 'tan1') elif i==u'归档资料负责人': self.choices_Auser(func, el, 'tan1') else: self.choices_Auser(func,el,'tan1') self.bSwithcfrname(el, key) el.getFunctionName(RPdataDetail[0]) el.get_element(RPdataDetail[j]) currenttxtList.append(args[i]) elif RPdataDetaildict.get('elementType') == 'checkbox': el.get().click() currenttxtList.append(args[i]) elif RPdataDetaildict.get('elementType')== 'readonly': func.driver.execute_script("var setDate=function $(id){ return document.getElementById(id); };setDate(\"" + RPdataDetaildict.get('path') + "\").removeAttribute('readonly');") el.get().clear() el.get().send_keys(args[i]) currenttxtList.append(el.get().text) else: el.get().clear() el.get().send_keys(args[i]) currenttxtList.append( el.get().text) logging.info(i+':'+args[i]) if i == u'分支机构': # 技术团队 el.get_element('technicalteam') rd = random.randint(1, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rd) logging.info(u'技术团队:' + Select(el.get()).all_selected_options[0].text) #业务部门 el.get_element('department') rd = random.randint(1, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rd) logging.info(u'业务部门:' + Select(el.get()).all_selected_options[0].text) elif i == u'委托类型': # 技术团队 el.get_element('technicalteam') rd = random.randint(1, len(Select(el.get()).options) - 1) Select(el.get()).select_by_index(rd) logging.info(u'技术团队:' + Select(el.get()).all_selected_options[0].text) break else: logging.error(u'not found,'+i) currenttxtList.append('false') ''' elif i.strip() == u'评估方法': el.getFunctionName(RPdataDetail[0]) el.get_element(RPdataDetail[j]) if type(args[i])==list: pass else: if RPdataDetaildict.get('name').strip()==args[i].strip(): el.get().click() ''' el.getFunctionName('RPdataDetail') if button==None: pass else: for j in range(1, len(RPdataDetail)): RPdataDetaildict = EL.get_el_dict(RPdataDetail[0], RPdataDetail[j], cg.path) if RPdataDetaildict.get('name') ==button: el.getFunctionName(RPdataDetail[0]) el.get_element(RPdataDetail[j]) el.get().click() func.driver.switch_to.default_content() xf = func.driver.find_element_by_xpath( '/html/body/div[1]/table/tbody/tr[2]/td[2]/div/table/tbody/tr[2]/td[2]/div/iframe') func.driver.switch_to.frame(xf) urltxt = func.driver.current_url if 'create.aspx' not in urltxt: func.driver.switch_to.default_content() xf = func.driver.find_element_by_xpath( '/html/body/div[2]/table/tbody/tr[2]/td[2]/div/table/tbody/tr[2]/td[2]/div/iframe') func.driver.switch_to.frame(xf) #print func.driver.current_url if button==u'生成报告': if sub==u'正式报告': elrd=func.driver.find_elements_by_xpath('//*[@id="table"]/table/tbody/tr[3]/td[2]/label') rd=random.randint(0,len(elrd)-1) elrd[rd].click() # TODO 进行工具测试 # elrd[2].click() else: pass ''' func.driver.switch_to.default_content() xf = func.driver.find_element_by_xpath( '/html/body/div[1]/table/tbody/tr[2]/td[2]/div/table/tbody/tr[2]/td[2]/div/iframe') func.driver.switch_to.frame(xf) urltxt = func.driver.current_url print urltxt if 'create.aspx' not in urltxt: func.driver.switch_to.default_content() xf = func.driver.find_element_by_xpath( '/html/body/div[2]/table/tbody/tr[2]/td[2]/div/table/tbody/tr[2]/td[2]/div/iframe') func.driver.switch_to.frame(xf) print func.driver.current_url ''' func.driver.find_element_by_id('complt').click() mdl = func.driver.find_elements_by_xpath('/html/body/div[2]/div/table/tbody/tr') rds = random.randint(0, len(mdl) - 1) mdl[rds].click() #TODO 进行工具测试 # for i in range(len(mdl)): # #print mdl[i].find_element_by_tag_name('td').get_attribute('text')==u'TEST测试模板' # if mdl[i].find_element_by_tag_name('td').get_attribute('text').strip()==u'TEST测试模板': # mdl[i].find_element_by_tag_name('td').click() # break # else: # print u'没发现模板' # exit() func.driver.find_element_by_id('btnCreateReport').click() #TODO 单独自动化测试 # pngnum=str(time.time()) # print pngnum # save_fn=r'D:\\img/'+pngnum+'.png' # func.driver.find_element_by_id('btnCreateReport').click() # func.driver.save_screenshot(save_fn) func.driver.switch_to.default_content() xf = func.driver.find_element_by_xpath( '/html/body/div[1]/table/tbody/tr[2]/td[2]/div/table/tbody/tr[2]/td[2]/div/iframe') func.driver.switch_to.frame(xf) urltxt = func.driver.current_url #print urltxt if 'EditReportFromTemplate' not in urltxt: func.driver.switch_to.default_content() xf = func.driver.find_element_by_xpath( '/html/body/div[2]/table/tbody/tr[2]/td[2]/div/table/tbody/tr[2]/td[2]/div/iframe') func.driver.switch_to.frame(xf) #print func.driver.current_url btsave=func.driver.find_element_by_id('btnCreate') while not btsave.is_enabled(): sleep(2) btsave.click() func.driver.switch_to.alert.accept() return if sub==u'业务登记': el.get_element('btnSubmit') el.get().click() func.driver.switch_to.default_content() sleep(1) func.driver.find_element_by_xpath(u'//*[@value="直接提交"]').click() sleep(0.5) func.driver.find_element_by_xpath(u'//*[@value="确定"]').click() else: el.get_element('btnsave') el.get().click() return currenttxtList
def parse(self, response): self.driver.get(response.url) select = Select(self.driver.find_element_by_xpath('//*[@id="selectedSubjects"]')) num_options = len(select.options) json_data = [] # Iterate over each subject listed in the combobox for i in range(num_options - 1): self.driver.get(response.url) # Wait for subjects appear in options box, then click WebDriverWait(self.driver, 10).until( EC.presence_of_element_located((By.XPATH, '//*[@id="selectedSubjects"]')) ) Select(self.driver.find_element_by_xpath('//*[@id="selectedSubjects"]')).select_by_index(i) subject_selection = Select(self.driver.find_element_by_xpath('//*[@id="selectedSubjects"]')).options[i].text course_subject_long = subject_selection[(subject_selection.index('-') + 2):] course_subject = subject_selection[:(subject_selection.index('-') - 1)] # Hit submit to get courses for that subject self.driver.find_element_by_xpath('//*[@id="socFacSubmit"]').click() # Try to get the number of pages for this subject try: total_page_number = scrapy.Selector(text=unicode(self.driver.page_source)).xpath( '//*[@id="socDisplayCVO"]/div[2]/table/tbody/tr/td[3]/text()[1]').extract_first(default='f 0)') total_page_number = int( total_page_number[(total_page_number.index('f') + 2):total_page_number.index(')')]) except: total_page_number = 0 # Iterate over each page in for the results of this subject for j in range(1, total_page_number + 1): self.driver.get('https://act.ucsd.edu/scheduleOfClasses/scheduleOfClassesStudentResult.htm?page=' + str(j)) result_selector = scrapy.Selector(text=self.driver.page_source.encode('utf-8')) course_selectors = result_selector.xpath('//*[@id="socDisplayCVO"]/table/tbody/tr/td[3]/a/span') # Iterate over each course selector. Its neighbor element will give the professor name (cant get any # other way) for selector in course_selectors: course_title = unicode(selector.xpath('.//text()').extract_first(default='')) if ' ' in course_title: course_title = course_title[:course_title.index(' ')] course_number = unicode(selector.xpath( './/ancestor::td[1]/preceding-sibling::td[1]/text()').extract_first( '')) professor_name = selector.xpath( './/ancestor::tr[1]//following-sibling::tr[1]/td/a/text()').extract_first( default=None) # Get non-linked version of name... TODO: not working if not professor_name: professor_name = selector.xpath( './/ancestor::tr[1]//following-sibling::tr[1]/td/text()').extract_first( default=None ) if not re.search('[a-zA-z]', professor_name): professor_name = '' professor_name = unicode(professor_name) professor_name = (professor_name[:professor_name.index(' ')] if professor_name else '') json_data.append( { "courseSubject": course_subject, "courseSubjectLong": course_subject_long, "courseName": course_title, "courseNumber": course_number, "professorName": professor_name } ) self.data.write(unicode(json.dumps(json_data, indent=4)))