一.百度识图自动上传图片
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
edge_options = Options()
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options=edge_options)
driver.get('https://graph.baidu.com/pcpage/index?tpl_from=pc')
driver.find_element(by=By.NAME, value='file').send_keys(r"D:\7.18\图1.jpg")
input('')

代码讲解:百度识图自动上传图片

这段代码使用 Selenium 库实现了自动打开百度识图网页并上传本地图片的功能。下面是对代码的逐行解释:

from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
  • 导入必要的 Selenium 模块:webdriver用于控制浏览器,Options用于配置浏览器选项,By用于定位网页元素。

 

edge_options = Options()
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"

 

  • 创建 Edge 浏览器的配置选项对象,并指定 Edge 浏览器的安装路径。这一步是可选的,如果 Edge 浏览器已添加到系统 PATH 中,可以省略。
driver = webdriver.Edge(options=edge_options)
  • 初始化 Edge 浏览器驱动,创建一个可以控制浏览器的驱动对象。
driver.get('https://graph.baidu.com/pcpage/index?tpl_from=pc')
  • 使用浏览器打开百度识图的网页。

 

driver.find_element(by=By.NAME, value='file').send_keys(r"D:\7.18\图1.jpg")

 

  • 定位网页上的文件上传元素(通过元素的name属性值为file来查找)。
  • 使用send_keys()方法模拟键盘输入,将本地图片的路径发送给上传元素,从而实现自动上传图片。
input('')

不启动浏览器获取网页资源

上述代码使用了 Selenium WebDriver,它需要启动一个真实的浏览器来执行操作。如果只需要获取网页的静态资源(如 HTML 内容、JSON 数据等),可以使用更轻量级的库,如requests

  • 程序会在此处暂停,等待用户输入(按 Enter 键)后才会继续执行并关闭浏览器。这通常用于调试时暂停程序,方便查看结果。

    Selenium WebDriver 更多操作解释

  • 元素交互方法

    • click():模拟鼠标点击元素,常用于按钮、链接等可点击元素。
    • send_keys(text):模拟键盘输入文本到输入框等元素中。
    • clear():清空输入框中的内容。
    • submit():提交表单,通常用于表单中的提交按钮。
  • 浏览器导航方法

    • back():模拟浏览器的后退按钮,返回上一页。
    • forward():模拟浏览器的前进按钮,前进到下一页。
    • refresh():刷新当前页面。
    • get(url):打开指定 URL 的网页。
    • current_url:获取当前页面的 URL。
  • 浏览器控制方法

    • close():关闭当前浏览器窗口。
    • quit():退出整个浏览器进程,关闭所有窗口。
    • maximize_window():最大化浏览器窗口。
    • set_window_size(width, height):设置浏览器窗口大小。
  • 元素定位方法

    • find_element(By.ID, value):通过元素 ID 定位。
    • find_element(By.NAME, value):通过元素 name 属性定位。
    • find_element(By.CSS_SELECTOR, value):通过 CSS 选择器定位。
    • find_element(By.XPATH, value):通过 XPath 表达式定位。
    • find_elements():返回所有匹配的元素列表。
import requestsurl = 'https://graph.baidu.com/pcpage/index?tpl_from=pc'
response = requests.get(url)if response.status_code == 200:# 获取网页的HTML内容html_content = response.textprint(html_content)
else:print(f"请求失败,状态码:{response.status_code}")

二.批量获取 Excel 相关图书信息 

from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
def get_info(driver):time.sleep(5)eles_p = driver.find_elements(By.CLASS_NAME, 'book_item')print(f"找到 {len(eles_p)} 个图书项")  # 调试输出for ele_p in eles_p:ele_p.click()handles = driver.window_handlesdriver.switch_to.window(handles[-1])time.sleep(5)name = driver.find_element(By.CLASS_NAME, 'book-name').textprice = driver.find_element(By.CLASS_NAME, 'price').textauthor = driver.find_element(By.CLASS_NAME, 'book-author').textfile.write(f'图书名:{name}\t价格:{price}\t作者名:{author}\n')print(f"已保存:{name}")  # 调试输出driver.close()driver.switch_to.window(handles[-2])  # 回到上一个标签页(索引-2)
file = open('excel图书汇总.txt', 'w', encoding='utf-8')
chrome_options = Options()
chrome_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options=chrome_options)
driver.get('https://www.ptpress.com.cn/')
elements = driver.find_elements(By.TAG_NAME, "input")
elements[0].send_keys("excel" + Keys.RETURN)
handles = driver.window_handles
driver.switch_to.window(handles[1])
driver.find_element(By.ID, "booksMore").click()
handles = driver.window_handles
driver.switch_to.window(handles[-1])
get_info(driver)
page_num = 1  # 记录当前页码
while True:try:# 尝试查找下一页按钮next_button = driver.find_element(By.CLASS_NAME, 'ivu-page-next')# 检查按钮是否禁用(不同网站禁用状态的class可能不同,需要根据实际情况调整)if 'ivu-page-disabled' in next_button.get_attribute('class'):print(f"已到达最后一页(第{page_num}页),停止爬取")breaknext_button.click()page_num += 1print(f"已翻到第{page_num}页")time.sleep(3)  # 等待页面加载get_info(driver)except Exception as e:print(f"爬取过程中出错:{e}")print(f"最后成功爬取的是第{page_num}页")break
file.close()
driver.quit()  # 关闭浏览器

代码讲解:批量获取 Excel 相关图书信息

这段代码使用 Selenium 自动化浏览器操作,从人民邮电出版社网站批量获取 Excel 相关图书的信息,并保存到文本文件中。下面是对代码的详细解释:

整体流程分析

这个程序主要分为以下几个部分:

  1. 浏览器初始化与搜索
  2. 信息提取函数
  3. 翻页与循环处理
  4. 异常处理与资源释放

代码详细解释

from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
  • 导入必要的库:Selenium 相关模块用于控制浏览器,time 模块用于添加等待时间。
def get_info(driver):time.sleep(5)eles_p = driver.find_elements(By.CLASS_NAME, 'book_item')print(f"找到 {len(eles_p)} 个图书项")  # 调试输出for ele_p in eles_p:ele_p.click()handles = driver.window_handlesdriver.switch_to.window(handles[-1])time.sleep(5)name = driver.find_element(By.CLASS_NAME, 'book-name').textprice = driver.find_element(By.CLASS_NAME, 'price').textauthor = driver.find_element(By.CLASS_NAME, 'book-author').textfile.write(f'图书名:{name}\t价格:{price}\t作者名:{author}\n')print(f"已保存:{name}")  # 调试输出driver.close()driver.switch_to.window(handles[-2])  # 回到上一个标签页(索引-2)
  • get_info 函数:负责从当前页面提取图书信息
    • 等待 5 秒让页面加载完成
    • 查找所有图书项元素
    • 遍历每个图书项,点击打开详情页
    • 切换到新打开的标签页
    • 提取书名、价格和作者信息并写入文件
    • 关闭当前标签页,回到图书列表页
file = open('excel图书汇总.txt', 'w', encoding='utf-8')
chrome_options = Options()
chrome_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options=chrome_options)
driver.get('https://www.ptpress.com.cn/')
  • 打开文件用于保存数据
  • 配置并启动 Edge 浏览器
  • 访问人民邮电出版社网站
elements = driver.find_elements(By.TAG_NAME, "input")
elements[0].send_keys("excel" + Keys.RETURN)
handles = driver.window_handles
driver.switch_to.window(handles[1])
driver.find_element(By.ID, "booksMore").click()
handles = driver.window_handles
driver.switch_to.window(handles[-1])
get_info(driver)
  • 找到搜索框并输入 "excel" 进行搜索
  • 切换到搜索结果页面
  • 点击 "更多图书" 按钮
  • 切换到新打开的图书列表页面
  • 调用 get_info 函数提取第一页的图书信息
page_num = 1  # 记录当前页码
while True:try:# 尝试查找下一页按钮next_button = driver.find_element(By.CLASS_NAME, 'ivu-page-next')# 检查按钮是否禁用if 'ivu-page-disabled' in next_button.get_attribute('class'):print(f"已到达最后一页(第{page_num}页),停止爬取")breaknext_button.click()page_num += 1print(f"已翻到第{page_num}页")time.sleep(3)  # 等待页面加载get_info(driver)except Exception as e:print(f"爬取过程中出错:{e}")print(f"最后成功爬取的是第{page_num}页")break
  • 实现自动翻页功能:
    • 查找下一页按钮
    • 检查按钮是否被禁用(表示已到最后一页)
    • 点击下一页按钮并更新页码
    • 等待页面加载后继续提取信息
    • 使用 try-except 捕获异常,确保程序健壮性
file.close()
driver.quit()  # 关闭浏览器
  • 关闭文件和浏览器,释放资源

代码优化建议

  1. 等待机制改进

    • 使用显式等待替代固定的 time.sleep (),提高代码稳定性
    • 示例:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 等待图书项元素加载完成
eles_p = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'book_item'))
)

异常处理增强

  • 在 get_info 函数中添加元素查找的异常处理
  • 示例:
try:name = driver.find_element(By.CLASS_NAME, 'book-name').text
except:name = "未找到书名"

数据存储优化

  • 考虑将数据保存为 CSV 或 Excel 格式,便于后续处理
  • 示例:
import csvwith open('books.csv', 'w', newline='', encoding='utf-8') as csvfile:writer = csv.writer(csvfile)writer.writerow(['图书名', '价格', '作者名'])writer.writerow([name, price, author])

增加日志记录

  • 使用 logging 模块替代简单的 print 语句,便于调试和追踪
  • 示例:
import logginglogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logging.info(f"找到 {len(eles_p)} 个图书项")

这个程序通过自动化浏览器操作,成功实现了批量获取图书信息的功能。通过合理的优化,可以进一步提高代码的稳定性和可维护性。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91711.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91711.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91711.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue中的refs字段使用记录

这段代码是 Vue.js 中结合 Element UI 等 UI 库的典型表单验证写法,具体含义如下:代码拆解 this.$refs.fromData.validate((valid) > {// 验证后的回调逻辑 })this.$refs.fromData $refs 是 Vue 提供的特殊属性,用于访问模板中通过 ref&qu…

多方案对比分析:后端数据加密策略及实践

多方案对比分析:后端数据加密策略及实践 随着互联网业务对用户隐私和数据安全的要求不断提升,后端系统中对敏感数据的加密保护已成为必备需求。从对称加密、非对称加密到数据库透明加密、应用层字段加密,各种方案各有特点。本文将以方案对比分…

《Java语言程序设计》1.4 复习题

1.4.1 什么是操作系统?列出一些流行的操作系统?操作系统(Operating System)是运行在计算机上的最重要的程序。操作系统管理和控制计算机的活动。通用计算机的流行操作系统有Microsoft Windows、Mac OS以及Linux。如果没有在计算机上安装和运行操作系统,像Web浏览器…

OpenCV图像自动缩放(Autoscaling)函数autoscaling()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于对输入图像进行自动缩放(Autoscaling),即根据输入图像的像素值范围将其线性映射到一个新的范围内&am…

多线程的认识

竞争与协作在单核 CPU 系统里,为了实现多个程序同时运行的假象,操作系统通常以时间片调度的方式,让每个进程执行每次执行一个时间片,时间片用完了,就切换下一个进程运行,由于这个时间片的时间很短&#xff…

SpringCloud相关总结

SpringCloud相关总结 1. 权威文档推荐: 官方文档:https://spring.io/cloud 玩的时候,注意SpringBoot与SpringCloud的版本兼容问题,推荐参考:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%…

NW983NW988美光固态闪存NW991NW992

美光NW系列固态闪存深度解析:技术、对比与应用指南一、技术根基与架构创新美光NW系列固态闪存的技术突破源于其先进的G9 NAND架构,该架构采用5纳米制程工艺和多层3D堆叠技术,在单位面积内实现了高达256层的存储单元堆叠,存储密度较…

pytest + requests 接口自动化测试框架

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 pytest + req

Android性能优化之网络优化

一、网络性能瓶颈深度解析 1. 网络请求全链路耗时分析 #mermaid-svg-3cXlC9wERu99EHQH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3cXlC9wERu99EHQH .error-icon{fill:#552222;}#mermaid-svg-3cXlC9wERu99EHQH …

实现库存显示和状态按钮的Question

首先实现显示图书库存 1 if条件标签里的test""要和实体类的属性名保持一致 否则会报找不到get方法的错误org.apache.ibatis.reflection.ReflectionException: There is no getter for property named stock in class2后端已经把bookStock传到前端了,但是显…

vue + Cesium 实现 3D 地图水面效果详解

一、引言Cesium 是一个强大的开源 JavaScript 库,用于创建基于 Web 的 3D 地理信息系统 (GIS) 应用程序。它提供了丰富的 API,可以实现各种复杂的地理可视化效果,包括地形渲染、建筑物建模、矢量数据显示等。本文将详细介绍如何使用 Cesium 实…

统信 UOS 运行 Windows 应用新利器!彩虹虚拟化软件 V3.2 全新上线,限时30天免费体验

原文链接:统信 UOS 运行 Windows 应用新利器!彩虹虚拟化软件 V3.2 全新上线,限时30天免费体验 在国产操作系统逐渐普及的今天,许多用户仍面临一个实际问题——一些办公软件或行业工具仍然仅支持 Windows 系统。对于已全面部署统信…

Vue中使用vue-3d-model实现加载3D模型预览展示

场景 要实现在页面中简单快速的加载3D模型用于产品展示。 实现效果如下: 注: 博客: 霸道流氓气质-CSDN博客 实现 3D模型技术方案对比 这里用于快速展示简单3d模型。 3D模型文件下载 可下载的网站较多,比如: Sk…

GaussDB join 连接的用法

1 join 连接的作用join 连接用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。 最常见的 join 类型:inner join(简单的 join)。 inner join 从多个表中返回满足 join条件的所有行。2 示例数据让我们看看选自 "…

GitHub开源轻量级语音模型 Vui:重塑边缘智能语音交互的未来

前言 今天将深入解析一款颠覆性开源语音模型——Vui(来自 Fluxions-AI 项目)。它正以“轻量化”为矛,刺破传统语音模型高耗能的壁垒,让智能语音无处不在。 GitHub:https://github.com/fluxions-ai/vuihuggingface&am…

用aws下载NOAA的MB文件

安装aws下载某航次MB文件 安装aws curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install下载对应航次数据 aws s3 cp s3://noaa-wcsd-pds/data/raw/Atlantis/AT26-09 /home/xxx/…

Kubernetes (k8s)、Rancher 和 Podman 的异同点分析

1. Kubernetes (k8s) 类型:容器编排系统。功能: 自动化部署、扩展和管理容器化应用。支持跨多台主机的容器编排。提供服务发现、负载均衡、滚动更新等功能。 架构:基于 Master-Node 架构,Master 负责调度和管理,Node 运…

71 模块编程之新增一个字符设备

前言这个 主要是 最开始的时候了解驱动的时候, 看到的一系列的 case, 这里 来大致剖析一下 相关的道理这些模块 是怎么和内核交互的, 内核的这些业务是怎么实现的 这里主要是一个模块来注册了一个字符设备 然后这个字符设备 可读可写, 基于的是分配的一段空间 测试用例测试模块…

小众创新方向!多传感器融合与视觉惯性导航,定位精度和效率大幅提升!

多传感器融合与视觉惯性导航技术(VINS)取得了显著进展。近期,研究人员通过优化视觉与惯性传感器数据的融合算法、引入深度学习技术以及改进系统架构,显著提升了VINS在复杂环境下的定位精度和鲁棒性。基于深度学习的特征提取方法能…

超简单linux上部署Apache

1.Apache是什么?Apache 是世界上最流行的 ​​开源Web服务器软件​​,由 Apache 软件基金会维护。​​主要功能​​:接收客户端(如浏览器)的HTTP请求,返回网页、图片等静态/动态资源。​​特点​​&#xf…