周末时写的一个可以自动提交BUG的脚本,主要是从excel中读取信息,然后自动保存到服务器上。最初是纯脚本,测试过执行没问题,功能也实现了。后来经理要求改成界面的,昨天看了下Tkinter,拼装了界面,也传了参数,但是就是提交不过去,一直报错:
Traceback (most recent call last): File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__ return self.func(*args) File "tmp.py", line 56, in submit self.sbug(self.getck(who),source) File "tmp.py", line 108, in sbug self.headerBody(testUrl,list_2,sendheaders) File "tmp.py", line 137, in headerBody returnedResult=urllib2.urlopen(returnedReq).read() File "C:\Python27\lib\urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "C:\Python27\lib\urllib2.py", line 400, in open response = meth(req, response) File "C:\Python27\lib\urllib2.py", line 513, in http_response 'http', request, response, code, msg, hdrs) File "C:\Python27\lib\urllib2.py", line 432, in error result = self._call_chain(*args) File "C:\Python27\lib\urllib2.py", line 372, in _call_chain result = func(*args) File "C:\Python27\lib\urllib2.py", line 619, in http_error_302 return self.parent.open(new, timeout=req.timeout) File "C:\Python27\lib\urllib2.py", line 400, in open response = meth(req, response) File "C:\Python27\lib\urllib2.py", line 513, in http_response 'http', request, response, code, msg, hdrs) File "C:\Python27\lib\urllib2.py", line 438, in error return self._call_chain(*args) File "C:\Python27\lib\urllib2.py", line 372, in _call_chain result = func(*args) File "C:\Python27\lib\urllib2.py", line 521, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) HTTPError: HTTP Error 404: Not Found
下面我把脚本贴出来,大家帮忙看看是什么问题吧,多谢了。我是做测试的,之前自学过python的语法,也看过Django,不过都没实战。大家见谅。
#coding=utf-8 import sys as sys import ttk as ttk import Tix as tix import Tkinter as Tk import tkFileDialog import xlrd import urllib,urllib2 who = '' source = '' #row_list存储excel row_list = [] #标题 描述 当前处理人 引入外网阶段 发现版本 分析和改进 抄送人 严重程度 测试改进方案 测试改进状态 外网问题 list_1=['data[Bug][title]','data[Bug][description]','data[Bug][current_owner]','data[Bug][custom_field_10]', 'data[Bug][version_report]','data[Bug][custom_field_17]','data[Bug][cc]','data[Bug][severity]', 'data[Bug][custom_field_16]','data[Bug][custom_field_19][]','data[Bug][custom_field_14][]'] dict1 = {'data[Bug][title]':0 ,'data[Bug][description]': 0,'data[Bug][current_owner]':0,'data[Bug][custom_field_10]':0,'data[Bug][version_report]':0, 'data[Bug][custom_field_17]':0,'data[Bug][cc]':0,'data[Bug][severity]':0,'data[Bug][custom_field_16]':0,'data[Bug][custom_field_19][]':0, 'data[Bug][custom_field_14][]':0} class App: def __init__(self,root): self.win_ul = Tk.Frame(root,border=4) self.win_ul.pack(side='top',anchor='w') self.win_fp = Tk.Frame(root,border=4) self.win_fp.pack(side='top',anchor='w') self.win_ok = Tk.Frame(root,border=4) self.win_ok.pack(side='left',anchor='w') self.userLabel = Tk.StringVar(root,'xiaxinling') Tk.Label(self.win_ul,text='选择用户:'.decode('utf8')).pack(side='left') ttk.Combobox(self.win_ul,textvariable=self.userLabel,values=['xiaxinling','liujianyu','wu','wang'],width='12').pack(side='left') Tk.Label(self.win_fp,text='选择文件:'.decode('utf8')).pack(side='left') self.path_str = Tk.StringVar() Tk.Entry(self.win_fp,textvariable = self.path_str).pack() Tk.Button(self.win_ok, text = '浏览',command = self.FileOpen).pack(side='left') Tk.Button(self.win_ok, text="确定", command=self.submit).pack(side='right') def FileOpen(self): path = tkFileDialog.askopenfilename(title = 'Python Tkinter', #创建打开文件对话框 filetypes=[('execel', '*.xls'), ('All files', '*')] ) #指定文件类型 global source source = path #global path_str self.path_str.set(source) print source def submit(self): who = str(self.userLabel.get().decode('utf8')) print "args,",who print "args,",source print "args,",self.getck(who) self.sbug(self.getck(who),source) #self.win_ul.quit #self.win_fp.quit #self.win_ok.quit def ShowArgs(self): who = str(self.userLabel.get().decode('utf8')) print "args,",who print "args,",source #提交bug单 def sbug(self,ck,fp): print "sbug====%s ==%s" %(ck,fp) #下面是发帖验证 #URL testUrl = 'http://rd.tencent.com/tapd/zizhu/bugtrace/bugs/submit/0?' #Cookie sendCookie = ck #发送的Headers,必须要有Cookie sendheaders = { 'Host': 'rd.tencent.com', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML,like Gecko) Explorer/9.0.8112.16421IC Chrome/15.0.874.121 Safari/535.2', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding': 'gzip,deflate', 'Accept-Language': 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3', 'Accept-Charset': 'GBK,utf-8;q=0.7,*;q=0.3', } sendheaders['Cookie']=sendCookie #读取excel表单 book = xlrd.open_workbook(fp) sheet=book.sheet_by_index(0) #行数 nrows = sheet.nrows #print nrows for i in range(1,nrows): row_data = sheet.row_values(i) row_list.append(row_data) for e in row_list: i=0 list_2=[] for s in e: dict1[list_1[i]]=s #print list_1[i]+':'+dict1[list_1[i]] list_2.append(s) print 'why' #print list_2[1] #发帖的data主体 list_2[0] self.headerBody(testUrl,list_2,sendheaders) #发帖的data主体 def headerBody(self,testUrl,list_0,sendheaders): body=urllib.urlencode({'data[Bug][templates]':'1010030911010325971', 'data[Bug][title]':'【外网缺陷】'+list_0[0], 'data[Bug][issue_id]':'', 'bug_id':'', 'data[Bug][is_replicate]':'0', 'data[Bug][create_link]':'0', 'data[Bug][template_id]':'', 'data[Bug][description]':list_0[1], 'data[Bug][current_owner]':list_0[2], 'data[Bug][severity]':list_0[7], 'data[Bug][custom_field_10]':list_0[3], 'data[Bug][custom_field_16]':list_0[8], 'data[Bug][version_report]':list_0[4], 'data[Bug][version_fix]':'', 'data[Bug][custom_field_18][]':'否', 'data[Bug][custom_field_19][]':list_0[9], 'data[Bug][custom_field_17]':list_0[5], 'data[Bug][cc]':list_0[6], 'data[Bug][custom_field_14][]':list_0[10], 'data[save_draft]':'保存为草稿', 'data[template_id]':'1010030911010325971', 'data[draft_id]':'0', 'data[return_url]':'http://rd.tencent.com/tapd/zizhu/bugtrace/bugreports/my_view?auth_token=2b325ef17b9da69a6b042ce846242f776166521321104884d7d43aa4e206dc7798c66d9c1b0bd600|1&cur_bug_id='}) returnedReq=urllib2.Request(url=testUrl,data=body,headers=sendheaders) print returnedReq returnedResult=urllib2.urlopen(returnedReq).read() #print returnedResult def getck(self,name): ck = '' f = open('cookie.txt') while True: line = f.readline() if line: parts = line.split(':') if parts[0].replace('\'','') == name: ck = parts[1].replace('\'','').replace(',','') else: break f.close() return ck def main(): reload(sys) sys.setdefaultencoding("utf-8") root = Tk.Tk() root.title("AutoSubmit") # 添加标题 root.geometry('300x100') # 设置大小 app = App(root) root.mainloop() if __name__ == "__main__": main()
怎么都没有人回下啊。报404错,不过我不加GUI的时候URL是没有问题,加上GUI之后表单的信息都没动过....到底怎么个原因啊######找到问题了,原来是cookie最初写成了字典,换GUI后保存到了文件中,读取时自动给加上了\n。这个\n害我折腾了这么久
######
######厉害啊 看看路过
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。