StaleElementReferenceException find_element in a for loop python

本文探讨了在循环中如何有效清除字符串,并重新开始元素查找功能。通过掌握这些技巧,可以提升代码效率,确保程序运行流畅。

just clear the string you find in the loop before, then start the find_element function in a new loop

没有爬取到数据,请重新改这个代码,根据上面说的报错信息from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.common.exceptions import WebDriverException from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.edge.service import Service from openpyxl import Workbook, load_workbook import time # 初始化Edge webdriver s = Service(r"C:\Program Files\Python312\edgedriver_win64\msedgedriver.exe") driver = webdriver.Edge(service=s) driver.get('https://esgratings.ccxgf.com/#/home') # 尝试加载或创建工作簿 file_path = "ESG_Ratings.xlsx" try: wb = load_workbook(file_path) ws = wb.active except FileNotFoundError: wb = Workbook() ws = wb.active ws.append(['股票代码', 'ESG评级']) # 添加标题行 # 股票代码范围 stock_codes = [ "000528.SZ", "000529.SZ", "000530.SZ", "000531.SZ", "000532.SZ", "000533.SZ", "000534.SZ", "000536.SZ", "000537.SZ", "000538.SZ", "000539.SZ", "000541.SZ", "000543.SZ", "000544.SZ", "000545.SZ", "000546.SZ", "000547.SZ", "000548.SZ", "000550.SZ", "000551.SZ", "000552.SZ", "000553.SZ", "000554.SZ", "000555.SZ", "000557.SZ", "000558.SZ", "000559.SZ", "000560.SZ" ] try: for code in stock_codes: try: # 查找输入框并输入股票代码 input_element = driver.find_element(By.CSS_SELECTOR, '.ant-input.ant-input-borderless') input_element.clear() input_element.send_keys(code) # 显式等待下拉列表可点击 wait = WebDriverWait(driver, 10) try: result_element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.style-module__inputListItem-2k4TW'))) result_element.click() except WebDriverException as inner_e: # 如果发生了任何WebDriver异常,重新查找并点击元素 print(f"Encountered an error: {str(inner_e)}, retrying...") result_element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.style-module__inputListItem-2k4TW'))) result_element.click() # 显式等待页面加载完毕 wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.style-module__resultConRight2-16WxH'))) # 获取并解析ESG评级信息 rating_element = driver.find_element(By.CSS_SELECTOR, '.style-module__resultConRight2-16WxH') rating = rating_element.text.strip() ws.append([code, rating]) # 清除输入框内容 close_icon = driver.find_element(By.CSS_SELECTOR, '.style-module__inputClose-B3kTl') close_icon.click() time.sleep(1) # 等待清除动作完成 except Exception as e: print(f"An error occurred while processing stock code {code}: {str(e)}") except Exception as e: print(f"An error occurred outside the stock code loop: {str(e)}") finally: # 无论是否出现异常,都保存Excel文件并退出浏览器 wb.save("ESG_Ratings.xlsx") driver.quit()
最新发布
09-24
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值