Python Selenium 上传图片脚本代码优化建议
这段代码使用 Python Selenium 库实现了一个简单的图片上传脚本,能够将指定文件夹中的 jpg 和 png 图片上传到 Imagetwist 网站。代码语法正确,但可能存在以下问题,需要进行优化:
-
Cookie 解析错误: 如果
cookie_str中的某个 cookie 名称或值包含分号或等号,则会导致cookies字典中的错误。建议使用更安全的解析方式,例如使用urllib.parse.parse_qs解析查询字符串,并将其转换为字典。 -
文件路径错误: 如果
upload_folder路径不存在或不可读,则会导致程序失败。建议在程序开始时先检查路径是否存在,并确保程序具有读写权限。 -
文件不存在: 如果上传文件夹中没有任何 jpg 或 png 文件,则程序将不会上传任何文件。建议在程序开始时先检查文件夹中是否存在目标文件,并在没有找到文件时给出提示信息。
-
上传效率: 如果上传文件夹中有大量文件,则程序可能需要更长时间才能完成上传。建议使用多线程或多进程的方式提高上传效率。
-
错误处理: 如果上传过程中出现错误,程序将继续上传下一个文件,而不会停止或报告错误。建议使用异常处理机制,捕获并记录上传过程中出现的错误,并根据错误类型采取相应的处理措施,例如停止上传或进行重试。
以下是对代码的优化建议:
import time
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from urllib.parse import parse_qs
cookie_str = '_gid=GA1.2.521438284.1685852601; login=srtzimu; xfss=qysa23rf7bfqme45; _ga=GA1.1.607076236.1685852601; overlay=true; bcs_cookie_live_stream=1; overlay_count=14; index_ut=html5; _ga_RCR9PNF6FL=GS1.1.1685955589.9.1.1685958086.0.0.0'
upload_folder = '/home/115/up'
# 检查文件路径
if not os.path.exists(upload_folder) or not os.path.isdir(upload_folder):
print(f'上传文件夹 {upload_folder} 不存在或不可读')
exit()
# 检查目标文件
files = [f for f in os.listdir(upload_folder) if f.endswith(('.jpg', '.png'))]
if not files:
print(f'上传文件夹 {upload_folder} 中没有找到 jpg 或 png 文件')
exit()
# 设置 Chrome 选项
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
# 初始化 WebDriver
driver = webdriver.Chrome(options=options)
# 解析 cookie
cookies = parse_qs(cookie_str, keep_blank_values=True)
for name, values in cookies.items():
driver.add_cookie({'name': name, 'value': values[0]})
# 访问上传页面
driver.get('https://imagetwist.com/upload')
# 上传图片
for filename in files:
filepath = os.path.join(upload_folder, filename)
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//input[@type='file']'))
)
element.send_keys(filepath)
time.sleep(5)
driver.find_element_by_id('upload').click()
time.sleep(5)
except Exception as e:
print(f'上传文件 {filename} 失败: {e}')
driver.quit()
以上代码进行了以下优化:
-
使用
urllib.parse.parse_qs解析 cookie 字符串,避免了因 cookie 中存在分号或等号而导致的错误。 -
在程序开始时检查上传文件夹是否存在,并确保程序具有读写权限。
-
在程序开始时检查上传文件夹中是否存在目标文件,并在没有找到文件时给出提示信息。
-
使用异常处理机制,捕获并记录上传过程中出现的错误,并根据错误类型采取相应的处理措施。
通过以上优化,可以提高代码的稳定性和健壮性,并增强代码的可读性和可维护性。
原文地址: https://www.cveoy.top/t/topic/oslp 著作权归作者所有。请勿转载和采集!