当前位置: 首页 > news >正文

『python爬虫』xpath变化导致无法找到指定元素(持续更新中~)

目录

    • xpath变化的原因
    • 1. 语言设置
    • 2. 窗口大小
    • n. 待添加~
    • 总结


欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中

xpath变化的原因

XPath 可能会出现变化的原因有很多,以下是一些常见的情况:

  • 网页结构变化:如果网页的 HTML 结构发生了变化,XPath 可能会随之而变化。例如,元素的层级关系、属性名称或值的变化都可能导致 XPath 发生改变。

  • 动态生成内容:一些网页使用 JavaScript 或 AJAX 技术来动态加载内容,这样的页面在不同时间点可能会呈现不同的 HTML 结构,导致 XPath 发生变化。

  • 响应式设计:一些网站为了适配不同的设备和屏幕尺寸,会采用响应式设计,在不同的屏幕尺寸下展示不同的 HTML 结构,这也会导致 XPath 的变化。

  • 版本更新:一些网站可能会不断进行版本更新,以改进用户体验或添加新功能,这也可能会导致 XPath 的变化。

  • 数据库内容变化:如果网页内容是从数据库中动态获取的,数据库中数据的变化也可能会导致网页结构的变化,从而影响 XPath。

  • 为应对这些变化,当编写爬虫或使用 XPath 时,建议定期检查网页结构,避免硬编码的 XPath,而是使用相对稳定的定位方式,如基于 CSS 类名或 ID 进行定位,或者使用相对路径来编写 XPath,以减少受到变化的影响。

  • 此文收集我自己遇到的奇葩具体情况,不一定所有网站都适用,用于排查一些奇葩网站.

1. 语言设置

有些网站的语言设置很奇怪.切换语言居然会改动xpath
本地你浏览器访问是你设置过的cn中文,但是用谷歌打开来的时候默认是en英文,必要时在你的url中传入 诸如"langue=cn"这种参数,保证稳定,或者你一开始就在英文模式下设计.


2. 窗口大小

有些奇葩网站有自适应,窗口大小会导致适用不同的网页模板整个样子会变化.
你用driver.get(‘url’)打开网页的时候的默认窗口大小可能不同分辨率电脑不一样,第一次打开可以先用width = driver.execute_script("return document.body.clientWidth")height = driver.execute_script("return window.innerHeight")得到默认的宽度和高度.

from selenium import webdriver
from selenium.webdriver.chrome.options import Optionschrome_options = Options()# 创建 ChromeOptions 对象
# 启动 Chrome 浏览器
driver = webdriver.Chrome(options=chrome_options)# 打开登录页面
driver.get('url')
width = driver.execute_script("return document.body.clientWidth")
height = driver.execute_script("return window.innerHeight")
print("当前窗口大小为:{}x{}".format(width, height))
driver.set_window_size(800,600)#不设置固定大小,可能会导致xpath变化

n. 待添加~


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
『未完待续』


http://www.lryc.cn/news/307461.html

相关文章:

  • 人大金仓数据库Kingbase服务SQL基础操作手册
  • 赎金信00
  • 如何运行github上的项目
  • 机器学习-02-机器学习算法分类以及在各行各业的应用
  • Java项目学习
  • npm run dev和npm run serve两个命令的区别
  • ui设计:利用即使设计设计出漂亮样式
  • [unity]lua热更新——个人复习笔记【侵删/有不足之处欢迎斧正】
  • Springboot日常总结-@RestController和@Controller的区别
  • MongoDB之客户端工具与核心概念及基本类型篇
  • Essential C++ 编程基础
  • 07 Qt自绘组件:图片预览小组件ImageViewer
  • Groovy(第九节) Groovy 之单元测试
  • gprMax3.0随机介质建模
  • 自动驾驶---行业发展及就业环境杂谈
  • Matlab 矩阵基础
  • TikTok矩阵系统的功能展示:深入解析与源代码分享!
  • Gradio Dataframe sort 问题
  • 【机器学习300问】24、模型评估的常见方法有哪些?
  • ArcgisForJS如何将ArcGIS Server发布的点要素渲染为热力图?
  • 第 2 章 微信小程序的构成 (代码导读)断更,后续继续更新
  • 十一、Qt自定义Widget组件、静态库与动态库
  • 八、ChatGPT能替代什么人?
  • QT C++实现点击按键弹出窗口并显示图片/视频|多窗口应用程序的设计和开发
  • shell和go实现:防火墙放行所有端口,唯独拦截80端口
  • QT信号槽实现分析
  • 【pytorch】tensor.detach()和tensor.data的区别
  • 教师资格证相关
  • 卷积神经网络介绍
  • XSS简介