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



    欢迎关注 『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 Options
    
    chrome_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变化
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    n. 待添加~


    总结

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

    版权声明:

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

    Copyright 2023 mzh

    Crated:2023-3-1

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


  • 相关阅读:
    ChatGPT提示词工程&LLM应用全解
    操作系统MIT6.S081:P7->Interrupts
    react中获取dom元素的高度(table铺满屏幕剩余高度)
    3 个常识点必须先了解!0基础入门Python!
    SpringBoot项目为什么需要引入大量的starter?如何自定义starter
    C语言:操作符详解(2)
    如何使用 Dijkstra 算法找到从源到所有顶点的最短路径--附C++/Java源码
    可以写进简历的软件测试项目实战经验(包含电商、银行、app等)
    Excel数据处理:动态数据分析报表、单元格数字格式、使用排序工具
    JS 对象为空判断
  • 原文地址:https://blog.csdn.net/u011027547/article/details/136306261