某調查問卷,一共17題,每題5選項,第一項總是最好的評價,這樣省的我判定哪一項是最好的了。問卷的最后是填寫投票人的個人信息。
代碼
from selenium import webdriver
import time
import xlrd
browser = webdriver.Firefox(executable_path=r'geckodriver')
browser.implicitly_wait(10)
def _choose():
browser.get("網址")
for i in range(1,18): #選擇每一題的第一個選項(最好的評價)
browser.find_element_by_id("Q%d_rbt1"%i).click()
def _rdinfo(num):
#從文件的第二行開始讀取,目前沒有加入讀取完就刪除。列表中好像有個方法叫讀取后刪除
name = sheet.cell(num,0).value
phone = sheet.cell(num,1).value
return name,phone
def _wtinfo(name,phone):
email = phone+'@189.cn'
browser.find_element_by_id("userName").send_keys(name)
browser.find_element_by_id("phone").send_keys(phone)
browser.find_element_by_id("email").send_keys(email)
time.sleep(8) #給我手動輸入驗證碼的時間
browser.find_element_by_id("SubmitBtn").click()
if __name__ == '__main__':
_choose()
data = xlrd.open_workbook('文件路徑')
sheet = data.sheets()[0]
num = 1
for i in range(1,13):
name,phone = _rdinfo(num) #返回值賦值給兩個變量
_wtinfo(name,phone)
num += 1
time.sleep(5) #每個投票間隔5s,然而事實證明一個IP只能投3個
_choose()
print ('第%d個投票'%num)
print ('完成!')
不足之處
三級標題
- 問卷的最后是個人信息,我采用遍歷
Excel
內容的方式。中建執行過程 中斷了兩次,這樣我就不知道遍歷到哪里了,只能看print
的信息。后面仔細想想應該采用list
的讀取后刪除
的方法。等中斷的時候再把剩余的list
寫入到文件。
list.pop(obj=list[-1]) #移除列表中的一個元素(默認最后一個元素),並且返回該元素的值
-
selenium
提供的xpath
查找方法非常方便,可是一定要注意是否在同一個frame
或者window
里。我因為這個而選不到元素費了半天勁。 -
程序並沒有完全自動化,提交問卷之前有個驗證碼,需要我手動輸入。因此如果能加個識別驗證碼的包就好了,
GitHub
上 好像一大堆。需要學習。