自动化上传数据(三)

excel处理类和上传类都已经写好,分别保存在excelHandle.py和upload.py中,最后我们需要写一个run.py去执行上传脚本。

#!/usr/bin/python   
# -*- coding: utf-8 -*-

import excelHandle
import upload
import Queue
import time

def run(filepath, username, password, url):

首先引入excelHandle,upload文件,time包,以及Queue包。Queue包主要用来创建一个队列。然后run方法传递4个参数,excel文件的路径,上传的用户名,密码,以及url。

首先实例化一个队列和一个excelHandle,读取excel数据,将数据放入队列中:

    product_queue = Queue.Queue()
    #读取excel数据加入队列
    excel_handle = excelHandle.excelHandle(filepath)
    excel_sheet = excel_handle.open_table(0)

    product_data = excel_handle.foreach_data()
    product_index = excel_handle.get_index_name()
    for i in range(len(product_data)):
        product_queue.put(product_data[i])
        num = str(i)
        print "data" + num + "standby"

接下来实例化上传类,登录上传网站,并且进入上传页面:

    uploader = upload.UpProd()
    uploader.login(url,username,password)
    #显示上传按钮
    uploader.display_list()

接下来使用一个while循环,队列不为空时,将队列中一条数据从队列中拿出来进行填写,若填写成功则拿下一条,填写失败放回队列重新填写。这里利用了队列这种数据结构的先进先出的特点。然后使用create_log()方法创建日志,当队列为空结束循环,注意一下从excel拿出来的数据不一定是string类型,由于selenium的send_keys()方法不接受浮点日期等数据类型,所以还需要进行相应的转化:

    uploader = upload.UpProd()
    uploader.login(url,username,password)
    #显示上传按钮
    uploader.display_list()
    #从队列取出数据并上传
    while product_queue.empty() is not True:
        data = product_queue.get()
        proname = data[product_index[0]]
        scprice= str(data[product_index[1]])
        sc_price= str(data[product_index[2]])
        pfprice= str(data[product_index[3]])
        sjprice= str(data[product_index[4]])
        jsprice= str(data[product_index[5]])
        point= str(data[product_index[6]])
        ziti= str(data[product_index[7]])
        soldout= str(data[product_index[8]])
        views= str(data[product_index[9]])
        know= data[product_index[10]]
        detail= data[product_index[11]]
        date= data[product_index[12]]
        order = data[product_index[13]]
        shop= data[product_index[14]]
        imgpath= "C:\cspy\webtest\img\\" + proname +".jpg"
        #判断上传是否成功,若不成功,重新进入队列上传
        if uploader.up_product(proname, scprice, sc_price, pfprice, sjprice, jsprice, point, ziti, soldout, views, know, detail, date, order, shop, imgpath):
            status = 1
            print proname + "\tupload success"
        else:
            status = 0
        uploader.create_log("6.16up.txt",proname,status)
        if status == 0:
            product_queue.put(data)

        time.sleep(5)

最后关闭浏览器:

    #全部上传完成后关闭浏览器
    uploader.quit_window()
    print "upload over"

OK,这样一个run.py就写好了,最后添加一行代码

if __name__ == '__main__':
    run(r"C:\cspy\webtest\data\test.xlsx","admin","password","http://www.xxx.com/admin")

在cmd中运行run.py就可以毫不费力的上传数据了!

(cspython) C:\cspy\webtest>python run.py

 

posted @ 2016-06-17 10:50  goddessofpom  阅读(307)  评论(0编辑  收藏  举报