87网站建设工作室公司怎么在百度上推广
2026/3/20 1:08:05 网站建设 项目流程
87网站建设工作室,公司怎么在百度上推广,榕江网站建设,分站城市网站如何做seo在自动化测试和网页爬虫开发中#xff0c;文件上传是一个常见需求。本文将详细介绍如何使用Python的DrissionPage库实现高效稳定的文件上传操作#xff0c;涵盖基础原理、核心方法和实战案例。 一、DrissionPage上传文件的核心原理 DrissionPage是一个基于Selenium和Reques…在自动化测试和网页爬虫开发中文件上传是一个常见需求。本文将详细介绍如何使用Python的DrissionPage库实现高效稳定的文件上传操作涵盖基础原理、核心方法和实战案例。一、DrissionPage上传文件的核心原理DrissionPage是一个基于Selenium和Requests的混合驱动库它简化了浏览器自动化操作。网页中的文件上传通常通过两种方式实现直接操作隐藏的input元素大多数网页使用input typefile元素实现上传功能即使前端用美观的按钮覆盖底层仍依赖该元素。处理JavaScript动态生成的上传组件部分复杂网页使用JS动态创建上传控件需要特殊处理。二、基础文件上传实现1. 最简上传示例fromDrissionPageimportChromiumPage# 初始化浏览器pageChromiumPage()page.get(https://example.com/upload)# 替换为实际上传页面# 直接定位file input并上传file_inputpage.e(input[typefile])# CSS选择器file_input.send_keys(rC:\test\sample.jpg)# 发送文件路径2. 完整流程封装defupload_file(page,url,file_path): 通用文件上传函数 :param page: DrissionPage对象 :param url: 上传页面URL :param file_path: 本地文件路径 :return: 是否上传成功 try:page.get(url)# 等待上传元素加载显式等待更可靠upload_inputpage.wait(input[typefile],timeout10)upload_input.send_keys(file_path)returnTrueexceptExceptionase:print(f上传失败:{str(e)})returnFalse三、实战案例批量上传图片并处理结果以下是一个完整的实战案例实现批量上传图片到百度AI平台并处理识别结果importosimportreimporttimeimportrandomfromDrissionPageimportChromiumPage# 配置参数TARGET_DIRrG:\验证码项目\抖音九宫格语义点选验证码\图片\temp改名文件夹/SOURCE_DIRrG:\验证码项目\抖音九宫格语义点选验证码\图片\3裁剪后的图片\ UPLOAD_URLhttps://chat.baidu.com/searchdefprocess_images():# 初始化浏览器pageChromiumPage()# 确保目标目录存在os.makedirs(TARGET_DIR,exist_okTrue)# 获取所有图片image_files[fforfinos.listdir(SOURCE_DIR)iff.lower().endswith((.jpg,.png))]forimg_nameinimage_files:img_pathos.path.join(SOURCE_DIR,img_name)try:# 上传流程page.get(UPLOAD_URL)# 点击上传按钮根据实际页面结构调整upload_btnpage.ele(xpath://div[contains(class,upload-btn)])upload_btn.click()# 操作隐藏的file inputfile_inputpage.ele(input[typefile])file_input.send_keys(img_path)# 填写表单示例textareapage.ele(textarea[idchat-textarea])textarea.input(请识别图片中的内容用【】标注结果)# 提交submit_btnpage.ele(img[class*submit-button])submit_btn.click()# 等待结果根据实际页面调整等待条件time.sleep(5)# 提取识别结果result_divpage.ele(div[class*marklang])result_textresult_div.textprint(f识别结果:{result_text})# 解析结果matchesre.findall(r【(.*?)】,result_text)ifmatches:# 生成新文件名new_namef{matches[0]}_{int(time.time()*1000)}_{random.randint(1000,9999)}.jpgnew_pathos.path.join(TARGET_DIR,new_name)# 移动文件先删除已存在的同名文件ifos.path.exists(new_path):os.remove(new_path)os.rename(img_path,new_path)print(f文件已重命名为:{new_name})exceptExceptionase:print(f处理图片{img_name}时出错:{str(e)})continueif__name____main__:process_images()四、高级技巧与注意事项1. 处理动态加载的上传组件对于使用JavaScript动态生成的上传组件可以尝试# 方法1先点击触发按钮再操作inputtrigger_btnpage.ele(button[data-actionupload])trigger_btn.click()file_inputpage.ele(input[typefile])# 现在应该可见file_input.send_keys(file_path)# 方法2直接执行JS触发点击page.run_js(document.querySelector(input[typefile]).click())2. 多文件上传# 支持多选的上传需页面允许file_inputpage.ele(input[typefile][multiple])file_input.send_keys([rC:\test\file1.jpg,rC:\test\file2.png])3. 等待策略优化# 更可靠的等待方式fromDrissionPage.commonimportWait# 等待元素出现最多10秒upload_inputWait(page).until(lambdap:p.ele(input[typefile]))# 或者使用显式等待page.wait(input[typefile],timeout10)4. 常见问题解决文件路径问题始终使用绝对路径Windows路径使用原始字符串前缀r或双反斜杠元素定位失败检查元素是否在iframe中需要先切换确认页面是否完全加载尝试多种定位方式CSS/XPath浏览器兼容性确保ChromeDriver版本与浏览器匹配考虑使用无头模式options.set_headless()五、性能优化建议复用浏览器实例避免频繁启动关闭浏览器并行处理使用多线程/多进程处理大量文件异常重试机制对失败操作自动重试日志记录详细记录上传过程和结果六、总结DrissionPage提供了简洁高效的文件上传实现方式通过直接操作隐藏的input typefile元素可以绕过复杂的前端交互逻辑。掌握本文介绍的核心方法和实战技巧后您可以轻松实现各种文件上传自动化需求。对于更复杂的场景建议结合DrissionPage的等待机制、异常处理和JavaScript执行能力构建健壮的自动化流程。在实际项目中还应考虑添加进度显示、结果验证和错误恢复等功能提升用户体验和系统可靠性。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询