目录
一、说明
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:
图1文章来源:https://www.toymoban.com/news/detail-485859.html
程序能跑了,我不用跑了。文章来源地址https://www.toymoban.com/news/detail-485859.html
到了这里,关于selenium使用XPATH提取内容报错(已解决)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!