一、前提
每天都要处理动态页面上的工单,只选择属于自己管辖区域的工单,处理完一条页面即刻刷新。每天不停的在页面上查找、翻页,累的不行,想找出一种自动处理的办法。
二、思路
将翻页过程做成一个无限循环,通过条件开关跳出循环。其中对每页中记录的查找、判断、处理等功能定义为一个功能函数,在处理过程中随时调用。功能的参数为当前页面记录条数,返回值为是否重新循环的开关。每处理一条页面刷新,循环必须重新开始。如果没有记录要处理,循环判断是否到结尾后,退出循环。
三、代码
1.主循环代码:
b=0#循环开关
c=0 #下一页点击次数
while b==0:
try:
time.sleep(1)##############/html/body/div[2]/div[2]/nav/ul/div/ul/li[6]/a/span
tt=obj.find_element_by_xpath('/html/body/div[2]/div[2]/nav/ul/div/ul/li[6]/a/span').text#获取总条数文本
total=[int(s) for s in tt.split() if s.isdigit()][0]#提取数字:条数
#print(total)#/html/body/div[2]/div[2]/div[2]/table/tbody[1]/tr[1]/td[5]/a[1]
######/html/body/div[2]/div[2]/div[2]/table/tbody[1]/tr[4]/td[5]/a[1]
pn=total//10-c#除数取整,翻页一次整数减一
page=total%10#余数
if pn==0 and page!=0:#如果不为0,小于10,则取余数
b=seek_one(page)
elif pn!=0:#整数不为0,直接取10,直到为0
b=seek_one(10)
if b==1:#/html/body/div[2]/div[2]/nav/ul/div/ul/li[4]/a##下一页
try:
obj.find_element_by_xpath('/html/body/div[2]/div[2]/nav/ul/div/ul/li[4]/a').click()
c+=1#下一页后,整数页码减一
b=0#继续循环
except:
break
else:#都为0,跳出
b=1
#
except:
print('error')
obj.refresh()
time.sleep(9)
print(u'没有工单要派了,休息5分钟,一会再瞧瞧........')
time.sleep(300)
2.功能函数代码
def seek_one(page):#每页查找
for i in range(1,page+1):#一条条地址进行鉴别
tt_address=obj.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/table/tbody[1]/tr['+str(i)+']/td[5]/a[1]').text#取地址
#print(tt_address)
if u'XX州' in tt_address or\
u'XX市' in tt_address or\
(u'XX市' in tt_address and u'汉川' not in tt_address) or\
u'XX市' in tt_address:#判断是不是四个区域,是则派单
####obj.find_elements_by_xpath('/html/body/div[2]/div[2]/div[2]/table/tbody[1]/tr[3]/td[3]
kind=obj.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/table/tbody[1]/tr['+str(i)+']/td[3]').text
####/html/body/div[2]/div[2]/div[2]/table/tbody[1]/tr[3]/td[7]/a
obj.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/table/tbody[1]/tr['+str(i)+']/td[7]/a').click()
send(kind,tt_address)
b=0
break#派单后页面刷新,必须重新开始,因为派的人很多
else:b=i#判断一个页面是否鉴别完成
if b==page:#判断一个页面是否鉴别完,完则返回上级循环中止
b=1
return b