网站标签变更导致Selenium触发TimeoutException异常该如何解决?
解决方案
- 先移除失效定位代码:当前触发报错的
section.section div.container h2定位规则已随网站前端结构更新失效,延长等待时间无法解决该类问题——因为目标元素已不存在于指定的DOM路径中。若你实际需求仅为获取Trustscore相关数据,可直接删除该行无效代码,无需等待不存在的元素加载。 - 替换更稳定的Trustscore元素定位规则:原XPATH依赖页面固定文本结构,容错率低,可替换为不依赖文本、关联元素属性的定位规则,示例如下:
替换前://div[text()='Trustscore']/../following-sibling::div/descendant::div[@class='icon']
替换后://div[contains(@class, 'trustscore')]//div[@class='icon'] - 优化滚动逻辑:原固定滚动1000px的逻辑可能因页面结构更新无法滚动到目标元素区域,可修改为自动滚动到目标元素位置,避免因元素不在可视区导致的可见性判断失败。
- 可选优化:增加异常捕获与重试机制,针对页面加载波动的场景可加最多3次重试逻辑,避免单次超时直接报错。
修正后完整代码示例
from selenium.common.exceptions import TimeoutException import time from random import randrange # Initialise Chrome parameters chrome_options = webdriver.ChromeOptions() # Open Chrome driver=webdriver.Chrome(path,chrome_options=chrome_options) driver.maximize_window() driver.get(my_web) wait = WebDriverWait(driver, 30) time.sleep(randrange(5)) t_score = None try: # 先定位Trustscore模块,滚动到对应区域 trust_block = wait.until(EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'trustscore')]"))) driver.execute_script("arguments[0].scrollIntoView();", trust_block) # 等待分数元素可见后获取文本 t_score = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[contains(@class, 'trustscore')]//div[@class='icon']"))).text except TimeoutException: # 可自定义超时后的处理逻辑 print("获取Trustscore数据超时")
内容的提问来源于stack exchange,提问作者LdM
相关产品推荐
相关产品推荐

