You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium ChromeDriver无报错但抛堆栈跟踪,程序意外终止求助

问题:Python Selenium自动化程序无提示意外终止

我用Python Selenium实现流程自动化,但程序意外终止且无明确错误提示。代码已用try/except包裹,也设置了元素存在的显式等待,排除了元素未找到的问题。试过全局try/except和增加time.sleep等待页面加载,问题依旧。

代码示例

from selenium import webdriver
from selenium.webdriver.common.by import By
import random
import re
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time

caps = DesiredCapabilities().CHROME
caps["pageLoadStrategy"] = "eager"
driver = webdriver.Chrome(desired_capabilities=caps) 

warningstring = ""
pagenum = 1
driver.get("url")
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div/div/div/div/form/input[1]'))
).send_keys("email")
WebDriverWait(driver,10).until(
    EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div/div/div/div/form/input[2]'))
).send_keys("password")
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div/div/div/div/form/button'))
).click()
while True: 
    for i in range(1, 25):
        try: 
            driver.get(WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div/div[5]/div/ul/li[{0}]/div[2]/div[1]/a'.format(i)))
            ).get_attribute("href"))
            dabangfloor = WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div[3]/div[2]/div/div/div/div[1]/div[3]/div/ul/li[2]/div[2]'))
            ).text.split("/")[1].replace("층","")
            dabangpark = re.findall(r'\d+', WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div[3]/div[2]/div/div/div/div[1]/div[3]/div/ul/li[7]/div[2]'))
            ).text)[0]
            dabangpurpose = WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div[3]/div[2]/div/div/div/div[1]/div[3]/div/ul/li[9]/div[2]/p'))
            ).text 
            print(i, dabangfloor, dabangpark, dabangpurpose)
            driver.get("url".format(pagenum))
        except Exception as e:
            print(e)
            print(warningstring)
            exit(0)
    try:
        pagenum += 1
    except Exception as clicke: 
        print(clicke)
        print("End of the page, done.")
        print(warningstring)
        exit(0)
k = input("Press Any Key")

程序终止时的控制台输出

Message: 
Stacktrace:
0   chromedriver                        0x0000000102601670 chromedriver + 4298352
1   chromedriver                        0x00000001025f9bbc chromedriver + 4266940
2   chromedriver                        0x000000010222c758 chromedriver + 280408
3   chromedriver                        0x0000000102267b38 chromedriver + 523064
4   chromedriver                        0x00000001022a0080 chromedriver + 753792
5   chromedriver                        0x000000010225a2d0 chromedriver + 467664
6   chromedriver                        0x000000010225b354 chromedriver + 471892
7   chromedriver                        0x00000001025c16c4 chromedriver + 4036292
8   chromedriver                        0x00000001025c5c64 chromedriver + 4054116
9   chromedriver                        0x00000001025cc2d8 chromedriver + 4080344
10  chromedriver                        0x00000001025c6970 chromedriver + 4057456
11  chromedriver                        0x000000010259d8dc chromedriver + 3889372
12  chromedriver                        0x00000001025e525c chromedriver + 4182620
13  chromedriver                        0x00000001025e53b4 chromedriver + 4182964
14  chromedriver                        0x00000001025f40f4 chromedriver + 4243700
15  libsystem_pthread.dylib             0x000000019898206c _pthread_start + 148
16  libsystem_pthread.dylib             0x000000019897ce2c thread_start + 8

解决方案与排查方向

  • 版本匹配问题:这种无具体错误信息的Chromedriver栈追踪,最常见原因是ChromeDriver与Chrome浏览器版本不兼容。检查Chrome版本(设置→关于Chrome),下载对应版本的ChromeDriver替换当前使用的驱动。
  • 页面加载策略调整:eager加载策略可能导致DOM未完全渲染就执行操作,即使有显式等待也可能触发不稳定问题。可以尝试切换为默认的normal加载策略,或者在关键步骤前添加driver.implicitly_wait(2)补充等待。
  • 循环内页面跳转的稳定性优化:循环中频繁调用driver.get()回到列表页后,需重新等待列表容器加载完成再继续循环,避免因页面未就绪导致后续元素定位失败。例如在driver.get("url".format(pagenum))后添加:
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div/div[5]/div/ul')))
    
  • 异常处理逻辑优化:当前except块直接exit(0)会导致程序立即终止,无法定位具体出错项。建议修改为跳过当前循环项并记录详细错误:
    except Exception as e:
        print(f"第{pagenum}页,第{i}项出错: {str(e)}")
        print(warningstring)
        continue  # 替换exit(0),继续执行后续循环
    
  • 绝对XPATH的脆弱性修复:绝对XPATH依赖页面完整结构,稍有变动就会失效。建议改用相对XPATH,例如登录输入框可改为//form//input[@type='email'],列表项链接改为//ul[@class='列表容器类名']/li[{0}]/div[2]/div[1]/a(根据实际class调整),提升定位稳定性。
  • 资源泄漏处理:长时间循环可能导致浏览器资源占用过高崩溃,可每处理N页后重启浏览器,或定期执行driver.delete_all_cookies()清理缓存。

内容的提问来源于stack exchange,提问作者justiceserv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:12:01