准備工作
代碼內容主要是操作我們學校的問卷星
主要是通過selenium操作瀏覽器
驅動下載(注意和自己瀏覽器的版本對應)
Edge驅動下載 Microsoft Edge Driver - Microsoft Edge Developer
谷歌的驅動的下載鏡像 ChromeDriver Mirror (taobao.org)
其他下載地址自行百度就好
將下載好的驅動放到python目錄下或者在代碼中指明驅動路徑
from time import sleep
from selenium import webdriver
#如果放到python目錄下
#driver = webdriver.Edge()
driverfile_path = r'D:\conda\envs\SSM-Study\msedgedriver.exe'
driver = webdriver.Edge(executable_path=driverfile_path)
driver.get(r'https://www.baidu.com/')
sleep(5)
driver.close()
selenium安裝
忽略本地緩存安裝或者升級
pip --no-cache-dir install -U selenium
pip --no-cache-dir install -U selenium -i https://mirrors.aliyun.com/pypi/simple/
測試是否可用 代碼參照上面
操作過程
啟動瀏覽器
driver = webdriver.Chrome()
#以谷歌為例,其他的瀏覽器類似
#edge driver = webdriver.Edge()
訪問頁面
driver.get(r'xxx')
操作頁面
常用的兩個函數
driver.find_element_by_xpath("xxx") # HTML元素的路徑?應該可以這么說吧
driver.find_element_by_id("xxx") # HTML元素的id
常用的操作
driver.find_element_by_id("kw").clear() # 清除文本
driver.find_element_by_id("kw").send_keys("selenium") # 模擬按鍵輸入內容
driver.find_element_by_id("su").click() # 單擊選中元素
智能驗證
# 百度找了找說在開頭加上這個可以繞過智能驗證,但是。。。。。。
# 遇到驗證直接該點擊的點擊,該滑塊的滑塊就得了。。。。
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
我的代碼
import random
from selenium import webdriver
import time
from selenium.webdriver.support.select import Select
#增加一個參數 實現在不打開瀏覽器的情況下完成系列操作
'''
option = webdriver.ChromeOptions()
option.add_argument('headless')
driver = webdriver.Chrome(chrome_options=option)
'''
driver = webdriver.Chrome() # Chrome瀏覽器
# 打開網頁
driver.get("https://www.wjx.top/vm/xxx")
time.sleep(1)
#q1 這里是選擇日期,選擇日期的窗口是一個iframe 元素
driver.find_element_by_id("q1").click()
iframeWeb = driver.find_element_by_id('div__calendarIframe')
driver.switch_to.frame(iframeWeb)
driver.find_element_by_id("selectTodayButton").click()
driver.switch_to.default_content()
#q2
driver.find_element_by_xpath("//form[1]//div[@id='div2']/div[2]/div[1]").click()
#q3
driver.find_element_by_id('q3').send_keys("學號")
#q4
driver.find_element_by_id('q4').send_keys("姓名")
#q5
driver.find_element_by_xpath("//div[@id='div5']/div[2]/div[1]").click()
#q7
driver.find_element_by_xpath("//div[@id='div7']/div[2]/div[2]").click()
#q10
driver.find_element_by_id('q10').send_keys('36.%d' % random.randint(0, 9))
#q13 定位 同iframe 元素
driver.find_element_by_xpath("//div[@class='get_Local']").click()
time.sleep(2)
iframeWeb = driver.find_element_by_id('yz_popwinIframe')
driver.switch_to.frame(iframeWeb)
driver.find_element_by_id('txtInput').send_keys("地址")
driver.find_element_by_id('btnSearch').click()
time.sleep(1)
try:
driver.find_element_by_xpath("//div[@id='divauto']/ul/li[1]").click()
except:
print(" ")
driver.find_element_by_xpath("//div[@id='divCurLoc']/a").click()
driver.switch_to.default_content()
#q16
driver.find_element_by_id('q16').send_keys("無")
#17
js = 'document.querySelectorAll("select")[0].style.display="block";'
driver.execute_script(js)
s1 = Select(driver.find_element_by_id('q17'))
s1.select_by_index(2)
#q18 家庭成員體溫
driver.find_element_by_id('q18').send_keys('母親:36.%d' % random.randint(0, 9))
#提交
time.sleep(1)
driver.find_element_by_id('ctlNext').click()
time.sleep(1)
try:
driver.find_element_by_xpath("//div[@id='alert_box']//button").click()
driver.find_element_by_id('SM_BTN_WRAPPER_1').click()
except ():
print("不需要驗證")
finally:
time.sleep(1)
try:
time.sleep(3)
driver.find_element_by_id('divTopHeight')
driver.__exit__()
except():
time.sleep(3)
driver.__exit__()
finally:
driver.__exit__()
執行
因為我使用的是虛擬python環境所以先寫了一個power shell腳本執行
然后在使用批處理調用這個腳本
感覺過程繞了個圈,但是懶得百度去怎么做了
添加定時任務
win+s搜索任務計划程序