selenium使用XPATH提取内容报错(已解决)

这篇具有很好参考价值的文章主要介绍了selenium使用XPATH提取内容报错(已解决)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、说明

1.1、前言

1.2、报错信息

1.3、报错代码

二、解决

2.1、搜索引擎解决

2.2、最终解决


一、说明

1.1、前言

背景:使用selenium,获取招工平台岗位要求与待遇信息出现报错

环境:windows 10家庭版

语言:python 3

模块:selenium

出现的问题:

selenium.common.exceptions.StaleElementReferenceException: Message: The element reference: element is not attached to the page document

意思是说节点陈旧,使用当前节点找不到信息,是否刷新啥的。

1.2、报错信息

完整报错信息如下:

selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of <div class="item__10RTO"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed
Stacktrace:
RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:182:5
StaleElementReferenceError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:463:5
element.resolveElement@chrome://remote/content/marionette/element.sys.mjs:674:11
evaluate.fromJSON@chrome://remote/content/marionette/evaluate.sys.mjs:255:31
evaluate.fromJSON@chrome://remote/content/marionette/evaluate.sys.mjs:263:29
evaluate.fromJSON@chrome://remote/content/marionette/evaluate.sys.mjs:263:29
receiveMessage@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:74:34

1.3、报错代码

 driver = Firefox()  # 创建一个浏览器对象
 driver.get("页面url")  # 访问网页
 # 访问页面后,出现登录或注册弹窗,影响下一步,所以要把弹窗关掉
 # 右键检查,选项页面元素,直接复制xpath路径
 driver.implicitly_wait(8)
 # driver.switch_to.window(driver.window_handles[-1])
 one_el = driver.find_element(By.XPATH, '//*[@id="cboxClose"]')  # 定位标签位置,一般是打叉的位置
 one_el.click()  # 点击该位置,点击打叉也就是关闭弹窗
 time.sleep(3)
 # 在文本框输入内容,先定位,在输入值,敲回车或者点击搜索
 driver.find_element(By.XPATH, '//*[@id="search_input"]').send_keys("python", Keys.ENTER)
 all_li = driver.find_elements(By.XPATH, '/html/body/div/div[2]/div/div[2]/div[3]/div/div[1]/div')
 for li in all_li:
     job_name = li.find_element(By.XPATH, './div/div/div/a').text
     job_time = li.find_element(By.XPATH, './div/div/div/span').text
     job_price = li.find_element(By.XPATH, './div/div/div[2]/span').text
     print(job_name, job_time, job_price)

二、解决

2.1、搜索引擎解决

1)首先是使用了搜索引擎进行问题的查找,大概明白了出现这个报错是什么原因(后面会讲),感谢热心网友分享;

2)尝试使用大部分网友分享的办法:使用try,except结构来进行页面的刷新,但是发现报的是一样的错误(此时已经加了延时)

这个办法在我这行不通。。。

2.2、最终解决

输入搜索内容后,进行延迟,确保页面内容可以完整出现,然后在进行刷新(关键是这个,这个刷新使节点更新了),在延迟,使内容完全加载,此时在进行节点与内容的获取。

代码如下:

    driver = Firefox()  # 创建一个浏览器对象
    driver.get("页面url")  # 访问网页
    # 访问页面后,出现登录或注册弹窗,影响下一步,所以要把弹窗关掉
    # 右键检查,选项页面元素,直接复制xpath路径
    driver.implicitly_wait(8)
    # driver.switch_to.window(driver.window_handles[-1])
    one_el = driver.find_element(By.XPATH, '//*[@id="cboxClose"]')  # 定位标签位置,一般是打叉的位置
    one_el.click()  # 点击该位置,点击打叉也就是关闭弹窗
    time.sleep(3)
    # 在文本框输入内容,先定位,在输入值,敲回车或者点击搜索
    driver.find_element(By.XPATH, '//*[@id="search_input"]').send_keys("python", Keys.ENTER)
    time.sleep(3)  # 等待内容加载完成
    driver.refresh()  # 刷新页面,使节点刷新
    time.sleep(3)  # 等待页面加载完成,此时的节点才是正确的
    all_li = driver.find_elements(By.XPATH, '/html/body/div/div[2]/div/div[2]/div[3]/div/div[1]/div')
    # a = 1
    for li in all_li:
        job_name = li.find_element(By.XPATH, './div/div/div/a').text
        job_time = li.find_element(By.XPATH, './div/div/div/span').text
        job_price = li.find_element(By.XPATH, './div/div/div[2]/span').text
        print(job_name, job_time, job_price)

结果如下图1:

selenium使用XPATH提取内容报错(已解决)

 图1

程序能跑了,我不用跑了。文章来源地址https://www.toymoban.com/news/detail-485859.html

到了这里,关于selenium使用XPATH提取内容报错(已解决)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • XPath:学习使用XPath语法提取HTML/XML文档中的数据使用语法

    以下是一些XPath语法示例,用于提取HTML/XML文档中的数据: 选择元素: 选择所有p元素: //p 选择根元素: / 属性匹配: 选择class属性为\\\"example\\\"的div元素: //div[@class=\\\'example\\\'] 文本内容提取: 提取所有a元素的文本内容: //a/text() 提取第一个p元素的文本内容: //p[1]/text() 使用逻辑

    2024年02月11日
    浏览(43)
  • 网页数据的解析提取(XPath的使用----lxml库详解)

            在提取网页信息时,最基础的方法是使用正则表达式,但过程比较烦琐且容易出错。对于网页节点来说,可以定义id、class或其他属性,而且节点之间还有层次关系,在网页中可以通过XPath或CSS选择器来定位一个或多个节点。那么,在解析页面时,利用XPath或CSS选择器

    2024年02月22日
    浏览(48)
  • web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天

    获取到的断言信息就是实际结果 预期结果使我们确定的,直接写在代码中的 而实际结果是无法确定的,所以需要用一些方法去获取 代码示例 场景:当我们加载页面的时候,一些元素是需要时间的 就有可能发生,代码执行到了,而元素没有被加载出来 此时就会出现找不到元

    2024年01月17日
    浏览(45)
  • Selenium使用xpath定位元素

    参考资料: 【web自动化测试】xpath元素定位 接下来是使用 xpath 必须掌握的核心知识点,只要掌握好这些知识点,基本上能定义到想要的元素。 // 开头表示相对路径, 也可以用 / 开头表示绝对路径,一般用相对路径。 [] 内表示属性条件 [@name=‘accout’] 表示获取name属性等于

    2023年04月08日
    浏览(53)
  • selenium XPATH 使用简单例子

    定位所有的 a 元素: //a 定位带有特定id属性的元素: //*[@id=“exampleId”] 定位带有特定class属性的元素: //*[contains(@class, “exampleClass”)] 定位包含特定文本的元素: //*[text()=“Example Text”] 定位包含特定部分文本的元素: //*[contains(text(), “Partial Text”)] 定位第一个 元素: /

    2024年02月21日
    浏览(44)
  • Selenium 解决html中的嵌套问题(xpath中存在iframe)

    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“xpath”,“selector”:\\\"/… 在已确定页面元素全部加载完成,并且确定xpath路径正确的情况下,可以考虑是否存在标签嵌套或者存在iframe标签的情况。 iframe标签可以将一个HTML文档嵌入在一个

    2024年02月12日
    浏览(52)
  • python selenium的xpath的使用

    2024年02月12日
    浏览(42)
  • python+selenium使用xpath定位的问题

    python用selenium调chrome爬取网页信息遇到报错: 1.InvalidSelectorException: Message: invalid selector: The result of the xpath expression is [object Attr]. It should be an element 原因是selenium不支持从xpath中直接获取text文本信息。 xpath表达式修改为: 2.Message: no such element: Unable to locate element: xpath表达式一直

    2024年02月12日
    浏览(43)
  • 网络爬虫(二)——Xpath和Selenium的使用

    虽然正则表达式处理字符串的能力很强,但是在编写正则表达式的时候代码还是比较麻烦的,如果不小心写错一处,那么将无法匹配页面中所需要的数据,因为网页中包含大量的节点,而节点中又包含id、class等属性。如果在解析页面中的数据时,通过Xpath来定位网页中的数据

    2024年02月03日
    浏览(43)
  • “jmeter使用xpath提取器获取请求响应中的value值作为下一个请求的输入”案例

    使用jmeter5.2.1的xpath提取器获取请求响应结果中值作为下一个请求的输入,并在Bean Shell后置处理器中编写通过日志打印 XPath提取器 提取的内容。 提取内容为请求响应结果中的 input type=\\\"hidden\\\" name=\\\"execution\\\" value=\\\"a6cd.........................................................\\\" ,需要提取的为 v

    2023年04月11日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包