1. 程式人生 > 實用技巧 >女朋友手速太慢,導致我無精打采。

女朋友手速太慢,導致我無精打采。

Python+selenium自動評價器

年年歲歲又一年,為了紀念一哈2020年的最後一天,我決定寫下這篇文章。你問我為什麼要紀念?因為那天我女朋友加班了...,具體什麼任務呢?就是一個指標任務,需要不斷的對已完成的業務進行評價。因為31號當天就要完成,所以女朋友加班到8點,ctr操作了三小時,下班後就沒有精力陪我了,直接回了家,現在回過頭來一想,心裡仍有一絲不甘,甚是鬱悶,要不是她任務太著急,也不至於我獨自跨年。由此我敲下了以下程式碼,希望對遇見此種情況的各位朋友有所幫助。

評價介面

準備工作

流程圖

測試截圖

  • 已實現功能:視窗置頂、輸入編碼校驗、自動化點選評價、隨機填入評價內容、將已輸入的編碼以及查詢到的必要資訊追加寫入自動生成的excel中。

使用方法

  • 將 chromedriver.exe和自動評價器放在同一資料夾,執行自動評價器

部分程式碼說明

Python相關庫


importtkinterastk#介面視窗庫
fromtkinterimportmessagebox#彈出訊息框
#匯入selenium庫的webdriver以便啟動瀏覽器驅動
fromseleniumimportwebdriver
#匯入帶參啟動瀏覽器庫
fromselenium.webdriver.chrome.optionsimportOptions
importtime#匯入time等待網頁載入時間
importxlwt#匯入xlwt寫入表格中的內容
importxlrd#匯入xlrd讀取excel表裡的單元格行數
#匯入copy模組,程式重新啟動實現追加寫入excel
fromxlutils.copyimportcopy
importre#匯入re用正則表示式處理資料
importrandom#隨機函式庫

介面視窗引數說明

  • 值得一說:1.輸入查詢編碼時,tkinter的button按鈕可以通過布林表示式傳參,並將查詢編碼送往瀏覽器的查詢輸入框,如 “tk.Button(win,text='評價',width=6,command=lambda:inputText(entryInput.get())).place(x=230,y=80)";
  • 2.退出時會攔截,不會立即退出,有訊息提示框,並且確認退出後會立即關閉瀏覽器。
  • 3.後續可能會繼續完善,從已經整理好的excel中讀取查詢編碼。

#視窗
defmyWindow():
win.title("自動評價器-僅供學習使用")
#設定視窗大小
win.geometry('500x130')
#設定視窗是否可變長、寬,True:可變,False:不可變
win.resizable(width=False,height=False)
win.iconbitmap(r"C:/p.ico")#設定圖示
#輸入視窗
tk.Label(win,text='評價編碼:').place(x=100,y=30)
inputCode=tk.StringVar()
entryInput=tk.Entry(win,width=35,textvariable=inputCode)
entryInput.place(x=160,y=32)
    #評價按鈕
tk.Button(win,text='評價',width=6,command=lambda:inputText(entryInput.get())).place(x=230,y=80)
#視窗置頂
win.wm_attributes('-topmost',True)
#攔截退出,做出退出提示
win.protocol('WM_DELETE_WINDOW',closeWindow)
win.mainloop()

Selenium配置的瀏覽器說明

  • 值得一說:1.關於瀏覽器視窗大小設定,由於評價的頁面是手機頁面,所以要初始化瀏覽器視窗大小,網上看了很多方法都是用的 “.set_window_size(xxx,xxx) 方法,用這個方法首先會啟動預設視窗大小,再設定成xxx,xxx解析度,不太和諧,如使用options中的啟動配置視窗大小則可避免該問題。
  • 2.如果不想使用者看見瀏覽器介面可用 “options.add_argument("--headless")“ 進行後臺操作。

#瀏覽器設定
defbrowserOptions():
#driverfile_path=r'C:\chromedriver.exe'#驅動檔案路徑
options=Options()
#options.add_argument("--headless")#設定是否視覺化瀏覽器
    #設定瀏覽器視窗大小
options.add_argument("window-size=500,900")
#遮蔽自動化受控提示&&開發者提示
options.add_experimental_option("excludeSwitches",['enable-automation','load-extension'])
    #啟動時載入配置
browser=webdriver.Chrome(chrome_options=options)
browser.get('你的評價網址')#開啟瀏覽器預設網址
time.sleep(1)
returnbrowser



評價程式碼說明

  • 值得一說:1.善用Selenium定位元素標籤,對於沒有id屬性和class屬性的我大都採用的xpth進行定位,xpth不需要完全會,可以用瀏覽器除錯工具右鍵複製xpth路徑,自動生成。
  • 2.文字評價內容我是首先寫入一個列表,再用random.choice(text) 方法進行的隨機獲取,當然你也可以找一本生成的評價文件,從裡面獲取評價內容。

#評價
defevaluate(code):
#點選滿意度評價
foriinrange(0,5):
browser.find_elements_by_class_name("tab")[i].click()
#js="document.getElementsByClassName('tab')["+str(i)+"].click()"
#browser.execute_script(js)#執行js語句
time.sleep(0.5)
#點選我要點贊評價
foriinrange(0,7):
browser.find_element_by_class_name("ev_go").find_elements_by_tag_name('span')[i].click()
#js="document.getElementsByClassName('ev_go')[0].children["+str(i)+"].click()"
#browser.execute_script(js)#執行js語句
#文字評價
text=["工作人員態度很好,喜歡","不錯,工作人員很認真","工作人員很負責","工作人員態度不錯",\
"辦理時間很快","環境不錯,很有秩序","辦理過程很愉快","給工作人員點贊","棒棒的,辦理太便民了"]
browser.find_element_by_xpath("//*[@id='evalution']/div/div/div[2]/section/div/textarea").send_keys(random.choice(text))
time.sleep(0.5)
#點選提交按鈕
browser.find_element_by_xpath("//*[@id='evalution']/div/div/div[5]/button").click()
time.sleep(3)
#獲取提示資訊
promptText=browser.find_element_by_xpath("/html/body/div[4]/div[2]/div").text
writeExcel(code,promptText)#將資料寫入表格
#點選提示框
browser.find_element_by_xpath("/html/body/div[4]/div[3]/button").click()

寫入excel程式碼說明

  • 值得一說:1.我是通過try來捕獲異常判斷文件是否存在的,如果有異常則新建excel表,如無異常實現追加寫入。
  • 2.data=xlrd.open_workbook('已錄入資料.xls',formatting_info=True) 中的formatting_info=True可在複製的時候保留格式,之前沒開此引數導致追加寫入資料的時候出現格式不一致。

#新建excel表,判斷表是否存在
try:
data=xlrd.open_workbook('已錄入資料.xls')#開啟excel
except:
newExcel()#不存在新建表


#excel樣式
defexcelStyle(sheet1):
style=xlwt.XFStyle()#建立一個樣式物件,初始化樣式
al=xlwt.Alignment()
al.horz=0x02#設定水平居中
al.vert=0x01#設定垂直居中
style.alignment=al
foriinrange(0,5):
sheet1.col(i).width=255*32#設定單元格寬度
returnstyle


#新建excel
defnewExcel():
workbook=xlwt.Workbook(encoding='utf-8')
sheet1=workbook.add_sheet("資料")#新建sheet
style=excelStyle(sheet1)
sheet1.write(0,0,"事項",style=style)#第1行第1列資料
sheet1.write(0,1,"姓名",style=style)#第1行第2列資料
sheet1.write(0,2,"身份證號",style=style)#第1行第3列資料
sheet1.write(0,3,"辦件號",style=style)#第1行第4列資料
sheet1.write(0,4,"提示資訊",style=style)#第1行第4列資料
workbook.save(r'已錄入資料.xls')#儲存


#將所有錄入的件存入表格,在評價方法中呼叫
defwriteExcel(code,promptText):
#實現追加寫入
data=xlrd.open_workbook('已錄入資料.xls',formatting_info=True)#開啟excel
wb=copy(data)#利用xlutils.copy下的copy函式複製
sheet1=wb.get_sheet(0)#獲取表單0
nrows=data.sheets()[0].nrows#獲取行數
style=excelStyle(sheet1)

#寫入事項、姓名、身份證號
foriinrange(0,3):
excelText=browser.find_elements_by_class_name("text")[i].text
sheet1.write(nrows,i,excelText,style=style)#第nrows行第i列資料
sheet1.write(nrows,3,code,style=style)#寫入辦件號
sheet1.write(nrows,4,promptText,style=style)#寫入辦件號
wb.save(r'已錄入資料.xls')#儲存


軟體下載