最近寫了個自動填寫調查的問卷的簡單爬蟲


某調查問卷,一共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上 好像一大堆。需要學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM