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

Selenium+Python操作圣克拉拉县税务网站时报Web element not interactable错误

Selenium 「web element not interactable」报错解决方案

该问题由站点新增的反自动化检测规则、页面新增遮挡元素共同导致,可按以下步骤修改代码修复:

  • 新增浏览器启动参数,消除Selenium自动化特征
    站点会检测window.navigator.webdriver等Selenium默认标识,初始化驱动时添加以下配置绕过检测:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    # 禁用自动化检测特征
    chrome_options.add_argument("--disable-blink-features=AutomationControlled")
    chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
    chrome_options.add_experimental_option("useAutomationExtension", False)
    # 替换为正常浏览器的User-Agent
    chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
    
    # 初始化驱动
    site = webdriver.Chrome(options=chrome_options)
    # 注入JS修改webdriver属性
    site.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
    })
    
  • 优先处理页面遮挡元素
    站点现在首次加载会弹出Cookie同意弹窗,遮挡搜索框导致元素无法交互,打开站点后先处理弹窗:

    site.get('https://payments.sccgov.org/propertytax/Secured')
    time.sleep(3)
    # 尝试点击Cookie同意按钮,无弹窗则跳过
    try:
        cookie_btn = site.find_element_by_xpath('//button[contains(text(),"I Accept")]')
        cookie_btn.click()
        time.sleep(1)
    except:
        pass
    
  • 改用JS执行交互操作
    原生send_keys、click方法容易被反爬拦截,也容易受页面层级影响触发报错,替换为JS直接操作元素:

    # 输入APN编号
    apn = site.find_element_by_xpath('//*[@id="ParcelNumber"]')
    site.execute_script("arguments[0].value = arguments[1]", apn, num)
    # 提交搜索
    go = site.find_element_by_xpath('//*[@id="ParcelSubmit"]')
    site.execute_script("arguments[0].click()", go)
    
  • 优化元素获取逻辑
    提交后等待页面加载完成再提取数据,避免过早定位元素报错:

    time.sleep(5)
    # 提取数据逻辑保持不变
    baldue1 = site.find_element_by_xpath('//*[@id="select_invoiceslist"]/div[1]/div[3]/div[2]/div[8]').text
    baldue2 = site.find_element_by_xpath('//*[@id="select_invoiceslist"]/div[1]/div[3]/div[4]/div[8]').text
    landval = site.find_element_by_id('billdetailstablemain').text
    

修改完成后即可正常遍历提取数据,若仍有拦截可适当拉长等待时间,或增加每次请求的间隔避免触发频率限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:48:01