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
相关产品推荐
相关产品推荐

