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

Selenium Python触发UnexpectedAlertPresentException报错如何修改代码

问题解决方法

错误原因

  • 核心报错是因为你预设的待爬URL列表中存在无效链接(比如ID为1163693348的链接不符合站点的ID规则),访问无效页面时站点会弹出提示「대상을 찾을 수 없습니다(找不到目标)」的alert弹窗,Selenium未处理弹窗就执行后续元素查找操作,就会触发UnexpectedAlertPresentException异常。
  • 代码本身还存在多处逻辑问题:
    1. 循环内重复修改number变量值,会导致CSS选择器定位的行号错乱,甚至超出表格实际行数
    2. 没有设置页面元素等待逻辑,可能出现页面未加载完成就查找元素的报错
    3. 使用list作为变量名,覆盖了Python内置的list关键字,属于不规范写法
    4. 没有做异常捕获逻辑,单次请求或元素查找失败就会导致整个程序终止

修复后的代码

import openpyxl
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.chrome.options import Options
# 新增导入需要的工具类
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoAlertPresentException, TimeoutException, NoSuchElementException, UnexpectedAlertPresentException

wb = openpyxl.Workbook()
chrome_options = Options()


sheet = wb.active
sheet.append(["1lable", "2lable"])
wb.save("필름메이커스.xlsx")

path = "/Users/KimJinwoo/Desktop/도구/파이썬 작업공간./chromedriver 2"

driver = webdriver.Chrome(path)
# 加隐式等待,全局生效
driver.implicitly_wait(10)

driver.get('https://www.filmmakers.co.kr/actorsAudition/category/2343665')

driver.find_element_by_name("user_id").send_keys("3434343")
driver.find_element_by_name("password").send_keys("3434343")
driver.find_element_by_css_selector("#fo_login_widget > button").click()
driver.get('https://www.filmmakers.co.kr/actorsAudition/11445767?category=2343665')
lost = ['https://www.filmmakers.co.kr/actorsAudition/11636208?category=2343665']
# 变量名改为url_list,避免覆盖内置关键字
url_list = ['https://www.filmmakers.co.kr/performerWanted/11638737/page/1?category=8294214' , 
'https://www.filmmakers.co.kr/performerWanted/11637736/page/1?category=8294214' , 
'https://www.filmmakers.co.kr/performerWanted/1163693348/page/1?category=8294214' , 
'https://www.filmmakers.co.kr/performerWanted/11636933/page/1?category=8294214' , 
'https://www.filmmakers.co.kr/performerWanted/11636543/page/1?category=8294214' , 
'https://www.filmmakers.co.kr/performerWanted/11636508/page/1?category=8294214' , 
'https://www.filmmakers.co.kr/performerWanted/11636231/page/1?category=8294214' , 
'https://www.filmmakers.co.kr/performerWanted/11635838/page/1?category=8294214' , 
'https://www.filmmakers.co.kr/performerWanted/11635747/page/1?category=8294214' , 
'https://www.filmmakers.co.kr/performerWanted/11635719/page/1?category=8294214' , 
'https://www.filmmakers.co.kr/performerWanted/11635657/page/1?category=8294214' , 
'https://www.filmmakers.co.kr/performerWanted/11635481/page/1?category=8294214' , 
'https://www.filmmakers.co.kr/performerWanted/11635371/page/1?category=8294214']

for url in url_list: 
    try:
        driver.get(url)
        # 先处理可能出现的alert弹窗
        try:
            alert = driver.switch_to.alert
            # 关闭弹窗
            alert.accept()
            print(f"访问{url}时发现无效页面弹窗,已跳过")
            # 无效页面直接跳过后续爬取逻辑
            continue
        except NoAlertPresentException:
            # 没有弹窗正常执行
            pass

        # 先获取表格所有行,不要硬编码行数
        tr_list = driver.find_elements_by_css_selector("#board_content > div.board > table.ui.unstackable.striped.celled.table > tbody > tr")
        for tr in tr_list:
            try:
                abc = tr.find_element(By.CSS_SELECTOR, "td.three.wide.text-bold")
                table = tr.find_element(By.CSS_SELECTOR, "td:nth-child(2)")
                t = abc.text
                b = table.text
                print(t,b)
                sheet.append([t,b])
            except NoSuchElementException:
                # 单行元素查找失败跳过
                continue
        # 每次爬完一个页面存一次
        wb.save("필름메이커스1.xlsx")
    except Exception as e:
        print(f"访问{url}出现未知错误:{str(e)},已跳过")
        continue

driver.quit()
wb.close()

主要修改点

  • 新增alert弹窗自动检测和关闭逻辑,访问无效页面弹出提示后会自动关闭并跳过该页面,不会中断程序
  • 修复了循环行数的逻辑错误,改为先获取页面所有表格行再遍历,不会出现行号超出实际行数的问题
  • 新增了多层异常捕获逻辑,单个页面、单行数据爬取失败都不会终止整个程序
  • 新增了隐式等待,保证元素加载完成后再执行查找操作
  • 修正了不规范的变量命名
  • 新增了资源关闭逻辑,避免Excel文件损坏

内容的提问来源于stack exchange,提问作者김진우

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:06:08