问卷星自动填写python selenium脚本(2021vim版,亲测有效,看这一篇就够了)
目錄
- 前言
- 一、前期準備
- 二、具體步驟
- 1.導入庫與預定義變量
- 2.打開瀏覽器,防止識別為腳本
- 3瀏覽問題,選擇問題
- 4提交按鈕,驗證
- 全部代碼
前言
問卷星已經成為收集問卷的一個很重要的工具,有時可以用來報名參加活動,有時可以用來收集某些領域相關的情況,為了更快地填寫問卷,特別是報名參加一些名額有限的活動的時候,或者批量填寫問卷,可以利用python寫個問卷星自助填寫程序。
提示:以下是本篇文章正文內容,下面案例可供參考,碼字不易,覺得有用的可以點贊收藏關注。
一、前期準備
我采用的是python的selenium模塊,前期準備工作需要下載chrome驅動,然后要有python ide(如pycharm)
谷歌瀏覽器驅動鏈接
找到自己的谷歌瀏覽器版本下載就可以啦。谷歌瀏覽器的查看方式為:打開瀏覽器->…->設置->關于Chrome:
下載后,解壓,打開放在Python的目錄下面。
二、具體步驟
1.導入庫與預定義變量
導入庫,沒有的就用pip自定義安裝,預定義變量可以方便修改
from selenium import webdriver from selenium.webdriver.common.by import By import time import random#填寫問卷星問卷的地址,2021年都是帶vm字符偏多 urlip = "https://www.wjx.top/vm/xxxx.aspx" #名字 name = "小紅" #性別 sex=2 #手機 phone = '18100000000' #郵箱 Email = 'xiaohong@foxmail.com'2.打開瀏覽器,防止識別為腳本
這里參考的是
https://blog.csdn.net/qq_45717425/article/details/119737648
# 給出所需的url和option參數url_survey = (urlip) # 根據需要填寫url#防止被瀏覽器識別為腳本option = webdriver.ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])option.add_experimental_option('useAutomationExtension', False)driver = webdriver.Chrome(options=option)driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})driver.get(url_survey)time.sleep(0.2)3瀏覽問題,選擇問題
1、首先找到每個問題,answers = driver.find_elements(By.CSS_SELECTOR, “.ui-field-contain”)
用answers存儲每個問題,然后可以遍歷問題,用i存儲每個問題的序號
2、如何解析問題呢, 可以用title = answer.find_element(By.CSS_SELECTOR, “.field-label”),
找到問題的標題,然后判斷其中的問題是什么?
3、接著就找到選項,進行解析、選擇,如果是填空類的,如姓名,可以使用send_keys
if (“姓名” in title.text or “名字” in title.text):
idfind=“q%d”%i
a = driver.find_element_by_id(idfind)
a.send_keys(name)
如果是選項類,如性別,要看按鈕是什么類型,可以對每個選項進行解析
例如:
radios = answer.find_elements(By.CSS_SELECTOR, “.ui-radio”)
可以存儲每個按鈕,然后遍歷,找到想要的按鈕,然后用click()函數去點擊
for radio in radios:
j += 1
if (sex in (radio.text)):
radiofind = “//*[@id=‘div%d’]/div[2]/div[%d]/div” % (i, j)(這里是用xpath格式去找到按鈕在哪)
print(radiofind)
driver.find_element_by_xpath(radiofind).click()(這里可以點擊按鈕)
注意,用css_selector去找對應框時,要用F12開發者選項去看具體的是什么類型,才能確保找對,填空類可能有不同類型,如textarea。
4提交按鈕,驗證
找到提交按鈕,提交,可能需要驗證,最后如果是想出錯了自己填寫,可以加sleep函數,給自己時間填寫,如果是批量填寫,想要快速就不用。
time.sleep(1)am = driver.find_element_by_xpath("//*[@id='ctlNext']")am.click()time.sleep(0.5)# 模擬點擊智能驗證按鈕# 先點確認driver.find_element_by_xpath("//button[text()='確認']").click()# 再點智能驗證提示框,進行智能驗證driver.find_element_by_xpath("//div[@id='captcha']").click()print("end")time.sleep(100)全部代碼
from selenium import webdriver from selenium.webdriver.common.by import By import time import random#填寫問卷星問卷的地址 urlip = "https://www.wjx.top/vm/trZjDys.aspx" #名字 name = "小紅" #學號 cardnumber="202130072021" #性別 sex="女" #手機 phone = '18100000000' #郵箱 email = 'xiaohong@foxmail.com'def auto():print("正在執行操作......")# 給出所需的url和option參數url_survey = (urlip) # 根據需要填寫url#防止被瀏覽器識別為腳本option = webdriver.ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])option.add_experimental_option('useAutomationExtension', False)driver = webdriver.Chrome(options=option)driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})driver.get(url_survey)time.sleep(0.2)answers = driver.find_elements(By.CSS_SELECTOR, ".ui-field-contain")i = 0for answer in answers:try:i+=1driver.execute_script("arguments[0].scrollIntoView();", answer)title = answer.find_element(By.CSS_SELECTOR, ".field-label")print(title.text)### 有選項if ("姓名" in title.text or "名字" in title.text):idfind="q%d"%ia = driver.find_element_by_id(idfind)a.send_keys(name)elif ("學號" in title.text ):idfind = "q%d" % idriver.find_element_by_id(idfind).send_keys(cardnumber)elif ("手機" in title.text or "電話" in title.text):idfind = "q%d" % idriver.find_element_by_id(idfind).send_keys(phone)elif ("性別" in title.text):idfind = "//*[@id='div%d']/div[2]/div[1]/div" % iprint(idfind)driver.find_element_by_xpath(idfind).click()radios = answer.find_elements(By.CSS_SELECTOR, ".ui-radio")j = 0for radio in radios:j += 1if (sex in (radio.text)):radiofind = "//*[@id='div%d']/div[2]/div[%d]/div" % (i, j)print(radiofind)driver.find_element_by_xpath(radiofind).click()elif ("郵箱" in title.text or "mail" in title.text):idfind = "q%d" % idriver.find_element_by_id(idfind).send_keys(email)elif ("時間" in title.text ):radios = answer.find_elements(By.CSS_SELECTOR, ".ui-radio")j = 0for radio in radios:print(radio.text)j += 1radiofind = "//*[@id='div%d']/div[2]/div[%d]/div" % (i, j)print(radiofind)driver.find_element_by_xpath(radiofind).click()checks = answer.find_elements(By.CSS_SELECTOR, ".ui-checkbox")j = 0for radio in checks:print(radio.text)j += 1radiofind = "//*[@id='div%d']/div[2]/div[%d]/div" % (i, j)print(radiofind)driver.find_element_by_xpath(radiofind).click()else:ans = answer.find_elements(By.CSS_SELECTOR, ".ui-controlgroup")if ans:print("ans:", ans)lsans = random.choice(ans)lsans.click()continueinputtext = answer.find_element_by_css_selector("textarea")inputtext.send_keys('沒有')except Exception as e:print(e)time.sleep(1)am = driver.find_element_by_xpath("//*[@id='ctlNext']")am.click()time.sleep(0.5)# 模擬點擊智能驗證按鈕# 先點確認driver.find_element_by_xpath("//button[text()='確認']").click()# 再點智能驗證提示框,進行智能驗證driver.find_element_by_xpath("//div[@id='captcha']").click()print("end")time.sleep(100)if __name__ == '__main__':auto()感謝閱讀,如果對您有幫助,歡迎點贊,關注,收藏!
總結
以上是生活随笔為你收集整理的问卷星自动填写python selenium脚本(2021vim版,亲测有效,看这一篇就够了)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 轮播图插件(swiper)
- 下一篇: Android APP调起拼多多的商品页