Python+Selenium瀏覽器自動(dòng)化測(cè)試與網(wǎng)頁(yè)自動(dòng)登錄
引言
在日常開(kāi)發(fā)、測(cè)試和辦公自動(dòng)化中,我們經(jīng)常會(huì)遇到一些重復(fù)性的瀏覽器操作,例如打開(kāi)網(wǎng)頁(yè)、輸入賬號(hào)密碼、點(diǎn)擊登錄按鈕、檢查頁(yè)面是否加載成功、保存截圖、批量處理后臺(tái)數(shù)據(jù)等。
如果這些操作每天都要重復(fù)執(zhí)行,手動(dòng)處理不僅浪費(fèi)時(shí)間,還容易因?yàn)槁c(diǎn)、輸錯(cuò)、忘記截圖而出錯(cuò)。Python 的 selenium 庫(kù)可以幫助我們自動(dòng)控制瀏覽器,完成網(wǎng)頁(yè)自動(dòng)化測(cè)試和網(wǎng)頁(yè)自動(dòng)登錄等任務(wù)。
本文面向 Python 自動(dòng)化測(cè)試初學(xué)者,通過(guò)一個(gè)完整案例講解如何使用 Selenium 自動(dòng)打開(kāi)網(wǎng)頁(yè)、輸入用戶(hù)名密碼、點(diǎn)擊按鈕、等待頁(yè)面元素加載,并自動(dòng)截圖保存。
一、Selenium 庫(kù)介紹
Selenium 是一個(gè)常用的瀏覽器自動(dòng)化測(cè)試工具,可以模擬真實(shí)用戶(hù)在瀏覽器中的操作,例如:
- 打開(kāi)網(wǎng)頁(yè)
- 查找頁(yè)面元素
- 輸入文本
- 點(diǎn)擊按鈕
- 切換窗口
- 等待元素加載
- 獲取頁(yè)面內(nèi)容
- 截圖保存
- 執(zhí)行 JavaScript
- 驗(yàn)證頁(yè)面結(jié)果
Selenium 支持多種瀏覽器,包括:
- Chrome
- Edge
- Firefox
- Safari
在 Python 中使用 Selenium,可以編寫(xiě)自動(dòng)化測(cè)試腳本,也可以完成一些辦公自動(dòng)化任務(wù),例如后臺(tái)系統(tǒng)自動(dòng)登錄、自動(dòng)導(dǎo)出報(bào)表、自動(dòng)截圖留檔、自動(dòng)巡檢頁(yè)面狀態(tài)等。
安裝 Selenium:
pip install selenium
查看版本:
python -c "import selenium; print(selenium.__version__)"
二、ChromeDriver 安裝配置
Selenium 需要通過(guò)瀏覽器驅(qū)動(dòng)來(lái)控制瀏覽器??刂?Chrome 瀏覽器時(shí),常用的是 ChromeDriver。
1. Selenium 4 的自動(dòng)驅(qū)動(dòng)管理
如果你使用的是 Selenium 4.6 及以上版本,Selenium Manager 通??梢宰詣?dòng)管理瀏覽器驅(qū)動(dòng)。很多情況下,你只需要安裝 Selenium,然后直接運(yùn)行:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
Selenium 會(huì)嘗試自動(dòng)找到本機(jī) Chrome,并匹配合適的驅(qū)動(dòng)。
2. 手動(dòng)安裝 ChromeDriver
如果自動(dòng)管理失敗,可以手動(dòng)安裝 ChromeDriver。
步驟如下:
- 打開(kāi) Chrome 瀏覽器
- 在地址欄輸入
chrome://version/ - 查看 Chrome 主版本號(hào)
- 下載對(duì)應(yīng)版本的 ChromeDriver
- 將
chromedriver.exe放到一個(gè)固定目錄 - 將該目錄加入系統(tǒng)環(huán)境變量
Path
例如 Windows 中可以放到:
C:\WebDriver\chromedriver.exe
并把:
C:\WebDriver
加入環(huán)境變量 Path。
配置完成后,在命令行輸入:
chromedriver --version
如果能看到版本號(hào),說(shuō)明配置成功。
3. 指定 ChromeDriver 路徑
如果不想配置環(huán)境變量,也可以在代碼中指定驅(qū)動(dòng)路徑:
from selenium import webdriver from selenium.webdriver.chrome.service import Service service = Service(r"C:\WebDriver\chromedriver.exe") driver = webdriver.Chrome(service=service)
對(duì)初學(xué)者來(lái)說(shuō),建議優(yōu)先使用 Selenium 4 的自動(dòng)驅(qū)動(dòng)管理;如果失敗,再手動(dòng)配置 ChromeDriver。
三、自動(dòng)打開(kāi)網(wǎng)頁(yè)
Selenium 打開(kāi)網(wǎng)頁(yè)的基本代碼如下:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
常用窗口操作:
driver.maximize_window() driver.set_window_size(1280, 800)
獲取網(wǎng)頁(yè)標(biāo)題:
print(driver.title)
獲取當(dāng)前地址:
print(driver.current_url)
關(guān)閉瀏覽器:
driver.quit()
注意:建議使用 driver.quit() 關(guān)閉整個(gè)瀏覽器進(jìn)程,而不是只用 driver.close() 關(guān)閉當(dāng)前標(biāo)簽頁(yè)。
四、元素定位方法
網(wǎng)頁(yè)自動(dòng)化的核心是“找到元素,然后操作元素”。Selenium 提供了多種元素定位方式。
需要先導(dǎo)入:
from selenium.webdriver.common.by import By
常見(jiàn)定位方式如下:
1. 通過(guò) ID 定位
username_input = driver.find_element(By.ID, "username")
適合頁(yè)面元素有唯一 id 的情況。
2. 通過(guò) name 定位
password_input = driver.find_element(By.NAME, "password")
表單輸入框經(jīng)常會(huì)有 name 屬性。
3. 通過(guò) class name 定位
button = driver.find_element(By.CLASS_NAME, "login-btn")
注意:CLASS_NAME 只能寫(xiě)單個(gè) class,不能寫(xiě)多個(gè) class 組合。
4. 通過(guò) CSS Selector 定位
login_button = driver.find_element(By.CSS_SELECTOR, "button.login-btn")
CSS Selector 非常靈活,是實(shí)際項(xiàng)目中最常用的方式之一。
例如:
driver.find_element(By.CSS_SELECTOR, "input[name='username']") driver.find_element(By.CSS_SELECTOR, "#login-form button[type='submit']")
5. 通過(guò) XPath 定位
login_button = driver.find_element(By.XPATH, "http://button[text()='登錄']")
XPath 適合定位結(jié)構(gòu)復(fù)雜、缺少穩(wěn)定屬性的元素。
常見(jiàn) XPath:
//input[@id='username'] //button[contains(text(), '登錄')] //div[@class='message']
6. find_element 與 find_elements 的區(qū)別
查找單個(gè)元素:
element = driver.find_element(By.CSS_SELECTOR, ".item")
查找多個(gè)元素:
elements = driver.find_elements(By.CSS_SELECTOR, ".item")
區(qū)別:
find_element找不到元素會(huì)拋異常find_elements找不到元素會(huì)返回空列表
五、自動(dòng)輸入用戶(hù)名密碼
找到輸入框后,可以使用 send_keys() 輸入內(nèi)容。
username_input = driver.find_element(By.ID, "username")
password_input = driver.find_element(By.ID, "password")
username_input.send_keys("demo_user")
password_input.send_keys("demo_password")
如果輸入框中已有內(nèi)容,可以先清空:
username_input.clear()
username_input.send_keys("demo_user")
真實(shí)項(xiàng)目中,不建議把賬號(hào)密碼直接寫(xiě)死在代碼里。更推薦使用環(huán)境變量:
import os
username = os.getenv("TEST_USERNAME")
password = os.getenv("TEST_PASSWORD")
運(yùn)行前設(shè)置環(huán)境變量:
set TEST_USERNAME=demo_user set TEST_PASSWORD=demo_password
這樣可以避免賬號(hào)密碼泄露到代碼倉(cāng)庫(kù)。
六、自動(dòng)點(diǎn)擊按鈕
點(diǎn)擊按鈕使用 click():
login_button = driver.find_element(By.CSS_SELECTOR, "button[type='submit']") login_button.click()
有些頁(yè)面按鈕需要等待可點(diǎn)擊后再點(diǎn)擊,否則可能出現(xiàn)元素未加載、按鈕被遮擋等問(wèn)題。更推薦結(jié)合顯式等待:
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
wait = WebDriverWait(driver, 10)
login_button = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))
)
login_button.click()
七、顯式等待與隱式等待
網(wǎng)頁(yè)不是瞬間加載完成的,尤其是現(xiàn)代前端頁(yè)面經(jīng)常使用 Ajax、Vue、React 等技術(shù)動(dòng)態(tài)渲染內(nèi)容。如果元素還沒(méi)出現(xiàn)就去定位,很容易報(bào)錯(cuò)。
Selenium 常用兩類(lèi)等待方式:
- 隱式等待
- 顯式等待
1. 隱式等待
隱式等待會(huì)對(duì)所有元素查找生效。
driver.implicitly_wait(10)
含義:查找元素時(shí),如果元素暫時(shí)不存在,最多等待 10 秒。
優(yōu)點(diǎn):
- 寫(xiě)法簡(jiǎn)單
- 對(duì)全局生效
缺點(diǎn):
- 不夠精確
- 復(fù)雜頁(yè)面中不容易控制具體等待條件
2. 顯式等待
顯式等待針對(duì)某個(gè)具體條件等待,更適合自動(dòng)化測(cè)試。
wait = WebDriverWait(driver, 10)
element = wait.until(
EC.presence_of_element_located((By.ID, "username"))
)
常見(jiàn)等待條件:
EC.presence_of_element_located(locator) # 元素存在于 DOM 中
EC.visibility_of_element_located(locator) # 元素可見(jiàn)
EC.element_to_be_clickable(locator) # 元素可點(diǎn)擊
EC.title_contains("首頁(yè)") # 標(biāo)題包含指定文字
EC.url_contains("dashboard") # URL 包含指定文字
實(shí)際項(xiàng)目中,建議以顯式等待為主,隱式等待可以設(shè)置一個(gè)較短時(shí)間作為兜底。
八、自動(dòng)截圖保存
Selenium 可以保存當(dāng)前瀏覽器截圖,非常適合測(cè)試留痕、異常排查和自動(dòng)化辦公。
driver.save_screenshot("login_result.png")
也可以截圖到指定目錄:
from pathlib import Path
from datetime import datetime
screenshot_dir = Path("screenshots")
screenshot_dir.mkdir(exist_ok=True)
file_name = datetime.now().strftime("login_%Y%m%d_%H%M%S.png")
driver.save_screenshot(str(screenshot_dir / file_name))
如果登錄失敗,可以截圖保存現(xiàn)場(chǎng),方便后續(xù)分析。
九、完整實(shí)戰(zhàn)代碼:自動(dòng)登錄并截圖
下面是一份完整實(shí)戰(zhàn)代碼。為了避免涉及真實(shí)網(wǎng)站賬號(hào)密碼,示例使用一個(gè)演示登錄頁(yè)地址和占位選擇器。你在實(shí)際項(xiàng)目中只需要把 URL、賬號(hào)密碼和元素定位方式替換成自己的系統(tǒng)即可。
建議保存為:
selenium_login_demo.py
完整代碼如下:
import os
from datetime import datetime
from pathlib import Path
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
LOGIN_URL = "https://example.com/login"
USERNAME = os.getenv("TEST_USERNAME", "demo_user")
PASSWORD = os.getenv("TEST_PASSWORD", "demo_password")
SCREENSHOT_DIR = Path("screenshots")
def create_driver():
"""創(chuàng)建 Chrome 瀏覽器對(duì)象。"""
options = webdriver.ChromeOptions()
options.add_argument("--start-maximized")
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)
driver.implicitly_wait(3)
return driver
def save_screenshot(driver, name_prefix):
"""保存瀏覽器截圖。"""
SCREENSHOT_DIR.mkdir(exist_ok=True)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
file_path = SCREENSHOT_DIR / f"{name_prefix}_{timestamp}.png"
driver.save_screenshot(str(file_path))
return file_path
def login(driver):
"""自動(dòng)打開(kāi)網(wǎng)頁(yè)、輸入賬號(hào)密碼并點(diǎn)擊登錄。"""
wait = WebDriverWait(driver, 10)
driver.get(LOGIN_URL)
username_input = wait.until(
EC.visibility_of_element_located((By.ID, "username"))
)
password_input = wait.until(
EC.visibility_of_element_located((By.ID, "password"))
)
username_input.clear()
username_input.send_keys(USERNAME)
password_input.clear()
password_input.send_keys(PASSWORD)
login_button = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))
)
login_button.click()
wait.until(
EC.url_contains("dashboard")
)
success_element = wait.until(
EC.visibility_of_element_located((By.CSS_SELECTOR, ".user-info"))
)
return success_element.text
def main():
driver = create_driver()
try:
user_info = login(driver)
print(f"登錄成功:{user_info}")
screenshot_path = save_screenshot(driver, "login_success")
print(f"成功截圖已保存:{screenshot_path}")
except TimeoutException:
screenshot_path = save_screenshot(driver, "login_failed")
print(f"登錄失敗或頁(yè)面加載超時(shí),現(xiàn)場(chǎng)截圖已保存:{screenshot_path}")
raise
finally:
driver.quit()
if __name__ == "__main__":
main()
十、如何改成真實(shí)網(wǎng)站登錄
把示例代碼改成真實(shí)項(xiàng)目,一般只需要修改 5 個(gè)地方。
1. 修改登錄地址
LOGIN_URL = "https://your-company-system.com/login"
2. 修改用戶(hù)名輸入框定位
如果頁(yè)面 HTML 是:
<input id="account" name="account">
則代碼可以改成:
username_input = wait.until(
EC.visibility_of_element_located((By.ID, "account"))
)
3. 修改密碼輸入框定位
password_input = wait.until(
EC.visibility_of_element_located((By.NAME, "password"))
)
4. 修改登錄按鈕定位
login_button = wait.until(
EC.element_to_be_clickable((By.XPATH, "http://button[contains(text(), '登錄')]"))
)
5. 修改登錄成功判斷條件
登錄成功后,頁(yè)面可能跳轉(zhuǎn)到后臺(tái)首頁(yè),也可能出現(xiàn)用戶(hù)頭像或用戶(hù)名。
例如:
wait.until(EC.url_contains("home"))
或者:
wait.until(
EC.visibility_of_element_located((By.CSS_SELECTOR, ".avatar"))
)
自動(dòng)化測(cè)試中,登錄成功判斷非常重要。不能只點(diǎn)擊按鈕就認(rèn)為登錄成功,必須驗(yàn)證頁(yè)面狀態(tài)。
十一、常見(jiàn)問(wèn)題與解決方法
1. 找不到元素
常見(jiàn)報(bào)錯(cuò):
NoSuchElementException
原因可能是:
- 定位方式寫(xiě)錯(cuò)
- 頁(yè)面還沒(méi)加載完成
- 元素在 iframe 中
- 元素需要滾動(dòng)后才出現(xiàn)
- 頁(yè)面結(jié)構(gòu)發(fā)生變化
解決建議:
- 使用瀏覽器開(kāi)發(fā)者工具檢查元素
- 優(yōu)先使用穩(wěn)定的
id、name、data-*屬性 - 增加顯式等待
- 如果元素在 iframe 中,先切換 iframe
2. 元素不可點(diǎn)擊
常見(jiàn)報(bào)錯(cuò):
ElementClickInterceptedException
可能原因:
- 頁(yè)面彈窗遮擋
- 按鈕還沒(méi)變成可點(diǎn)擊狀態(tài)
- 頁(yè)面動(dòng)畫(huà)還沒(méi)結(jié)束
解決方式:
login_button = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))
)
login_button.click()
3. 頁(yè)面有驗(yàn)證碼
如果登錄頁(yè)面有驗(yàn)證碼、短信驗(yàn)證碼、滑塊驗(yàn)證,不建議繞過(guò)驗(yàn)證碼。驗(yàn)證碼本身就是為了防止自動(dòng)化濫用。
企業(yè)內(nèi)部測(cè)試環(huán)境可以采用這些方式:
- 測(cè)試環(huán)境關(guān)閉驗(yàn)證碼
- 使用專(zhuān)門(mén)的測(cè)試賬號(hào)白名單
- 后端提供測(cè)試登錄接口
- 自動(dòng)化測(cè)試前寫(xiě)入測(cè)試登錄 Cookie
4. 瀏覽器啟動(dòng)失敗
可能原因:
- Chrome 沒(méi)安裝
- ChromeDriver 版本不匹配
- Selenium 版本過(guò)舊
- 驅(qū)動(dòng)路徑?jīng)]有配置
建議先升級(jí) Selenium:
pip install -U selenium
然后確認(rèn) Chrome 能正常打開(kāi)。
十二、自動(dòng)化辦公場(chǎng)景分析
Selenium 不只適合自動(dòng)化測(cè)試,也可以用于一些辦公自動(dòng)化場(chǎng)景。
1. 后臺(tái)系統(tǒng)自動(dòng)登錄
很多公司內(nèi)部系統(tǒng)需要每天登錄查看數(shù)據(jù),例如 CRM、ERP、OA、工單系統(tǒng)、數(shù)據(jù)看板等。Selenium 可以自動(dòng)登錄后臺(tái),進(jìn)入指定頁(yè)面。
2. 自動(dòng)導(dǎo)出報(bào)表
如果系統(tǒng)沒(méi)有開(kāi)放 API,但頁(yè)面上提供“導(dǎo)出 Excel”按鈕,可以使用 Selenium 自動(dòng)點(diǎn)擊篩選條件、選擇日期、點(diǎn)擊導(dǎo)出。
3. 頁(yè)面巡檢與截圖留檔
運(yùn)維或測(cè)試人員可以定時(shí)打開(kāi)多個(gè)業(yè)務(wù)頁(yè)面,檢查是否出現(xiàn)錯(cuò)誤提示,并自動(dòng)保存截圖。
4. 批量錄入表單
一些舊系統(tǒng)沒(méi)有批量導(dǎo)入功能,只能手動(dòng)填寫(xiě)網(wǎng)頁(yè)表單。Selenium 可以讀取 Excel 數(shù)據(jù),然后自動(dòng)填寫(xiě)網(wǎng)頁(yè)表單。
5. 自動(dòng)化回歸測(cè)試
開(kāi)發(fā)完成新功能后,可以用 Selenium 編寫(xiě)登錄、查詢(xún)、提交、刪除等流程測(cè)試腳本,減少人工回歸測(cè)試成本。
十三、自動(dòng)化測(cè)試代碼編寫(xiě)建議
初學(xué)者寫(xiě) Selenium 腳本時(shí),建議注意以下幾點(diǎn):
- 不要把真實(shí)賬號(hào)密碼寫(xiě)死在代碼里
- 盡量使用顯式等待
- 優(yōu)先選擇穩(wěn)定的元素定位方式
- 每個(gè)關(guān)鍵步驟后都做結(jié)果驗(yàn)證
- 失敗時(shí)保存截圖
- 用
try...finally確保瀏覽器最終關(guān)閉 - 不要對(duì)公共網(wǎng)站進(jìn)行高頻自動(dòng)化請(qǐng)求
- 遵守目標(biāo)網(wǎng)站的使用規(guī)則
一個(gè)好的自動(dòng)化腳本,不只是能跑通一次,而是能穩(wěn)定、可維護(hù)、容易定位問(wèn)題。
十四、總結(jié)
本文使用 Python + Selenium 完成了一個(gè)“瀏覽器自動(dòng)化測(cè)試與網(wǎng)頁(yè)自動(dòng)登錄”的入門(mén)實(shí)戰(zhàn)案例。
你已經(jīng)學(xué)習(xí)了:
- Selenium 庫(kù)的作用
- ChromeDriver 的安裝與配置
- 如何自動(dòng)打開(kāi)網(wǎng)頁(yè)
- 如何自動(dòng)輸入用戶(hù)名和密碼
- 如何自動(dòng)點(diǎn)擊登錄按鈕
- 常見(jiàn)元素定位方法
- 顯式等待與隱式等待的區(qū)別
- 如何自動(dòng)截圖保存
- 一份完整的自動(dòng)登錄實(shí)戰(zhàn)代碼
- Selenium 在自動(dòng)化辦公中的應(yīng)用場(chǎng)景
對(duì)于 Python 自動(dòng)化測(cè)試初學(xué)者來(lái)說(shuō),建議先從簡(jiǎn)單頁(yè)面練習(xí)元素定位、輸入、點(diǎn)擊和等待,再逐步擴(kuò)展到真實(shí)業(yè)務(wù)系統(tǒng)。
當(dāng)你掌握 Selenium 后,就可以把很多重復(fù)性的瀏覽器操作變成腳本,讓測(cè)試、辦公和數(shù)據(jù)處理流程更加高效。
以上就是Python+Selenium瀏覽器自動(dòng)化測(cè)試與網(wǎng)頁(yè)自動(dòng)登錄的詳細(xì)內(nèi)容,更多關(guān)于Python Selenium瀏覽器自動(dòng)化測(cè)試與登錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python自動(dòng)化測(cè)試框架:unittest、pytest、Selenium、requests和Pytest-BDD
- Python使用Selenium實(shí)現(xiàn)Web自動(dòng)化的完整指南
- 從零開(kāi)始學(xué)習(xí)Python Selenium瀏覽器元素定位與實(shí)戰(zhàn)技巧
- Python使用Selenium將網(wǎng)頁(yè)保存為圖片或PDF
- 從入門(mén)到精通解析Python Selenium如何模擬瀏覽器操作
- Python使用Selenium實(shí)現(xiàn)自動(dòng)化網(wǎng)頁(yè)批量錄入
- Python Selenium 滾動(dòng)到特定元素的幾種實(shí)現(xiàn)方法
- python中selenium安裝配置與使用示例
- Python使用Selenium檢查元素是否存在的方法
- python利用Selenium搭建免費(fèi)Web搜索API服務(wù)的方法
相關(guān)文章
使用Python實(shí)現(xiàn)分組數(shù)據(jù)并保存到單獨(dú)的文件中
當(dāng)處理大型數(shù)據(jù)集時(shí),通常需要將數(shù)據(jù)分組,并將每個(gè)分組的數(shù)據(jù)保存到單獨(dú)的文件中,本文將使用 Python 中的 pandas 庫(kù)來(lái)實(shí)現(xiàn)這一目標(biāo),需要的可以參考下2024-04-04
基于Python實(shí)現(xiàn)簡(jiǎn)單學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于Python實(shí)現(xiàn)簡(jiǎn)單學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
python3實(shí)現(xiàn)抓取網(wǎng)頁(yè)資源的 N 種方法
這兩天學(xué)習(xí)了python3實(shí)現(xiàn)抓取網(wǎng)頁(yè)資源的方法,發(fā)現(xiàn)了很多種方法,所以,今天添加一點(diǎn)小筆記。2017-05-05
PyInstaller打包TkinterDnD應(yīng)用時(shí)窗口圖標(biāo)失效問(wèn)題的解決詳解
在使用 Python 的 Tkinter 庫(kù)開(kāi)發(fā)圖形用戶(hù)界面(GUI)應(yīng)用時(shí),為應(yīng)用設(shè)置一個(gè)獨(dú)特的圖標(biāo)是提升用戶(hù)體驗(yàn)的重要一步,但偶爾會(huì)遇到應(yīng)用窗口左上角的圖標(biāo)消失的問(wèn)題,下面我們就來(lái)看看如何解決吧2025-11-11
如何利用python?turtle繪圖自定義畫(huà)布背景顏色
Turtle庫(kù)是Python語(yǔ)言中一個(gè)很流行的繪制圖像的函數(shù)庫(kù),想象一個(gè)小烏龜,在一個(gè)橫軸為x、縱軸為y的坐標(biāo)系原點(diǎn),(0,0)位置開(kāi)始,這篇文章主要給大家介紹了關(guān)于如何利用python?turtle繪圖自定義畫(huà)布背景顏色的相關(guān)資料,需要的朋友可以參考下2021-12-12
Pytorch:dtype不一致問(wèn)題(expected dtype Double but&
這篇文章主要介紹了Pytorch:dtype不一致問(wèn)題(expected dtype Double but got dtype Float),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02

