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

无头模式下Selenium报ElementNotInteractableException,正常模式运行正常

问题描述

我用Python结合Selenium爬取ted.europa.eu网站的招标信息,脚本需每日执行以获取当日发布的新招标内容。该脚本在正常模式下运行完全正常,但启用无头模式时,出现错误:

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: [object HTMLInputElement] has no size and location

筛选逻辑代码

import sys
import time
import re
from datetime import datetime
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from dotenv import load_dotenv

load_dotenv("../../../../.env")

sys.path.append("../src")
sys.path.append("../../../../utils")

from driver import *
from lted import LTED
from runnable import *

# start
print('start...')
counter = 0
start = datetime.now()

# get driver
driver = get_driver_from_url("https://ted.europa.eu/TED/browse/browseByMap.do%22)
actions = ActionChains(driver)

# change language to spanish
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "lgId")))
driver.find_element(By.ID, "lgId").click()
driver.find_element(By.XPATH, "//select[@id='lgId']/option[text()='español (es)']").click()

# click on "Busqueda avanzada"
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "goToSearch")))
driver.find_element(By.ID, "goToSearch").click()

# accept cookies and close tab
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "cookie-consent-banner")))
driver.find_element(By.XPATH, "//div[@id='cookie-consent-banner']/div[1]/div[1]/div[2]/a[1]").click()
driver.find_element(By.XPATH, "//div[@id='cookie-consent-banner']/div[1]/div[1]/div[2]/a[1]").click()

# click on specific date and set to today
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "publicationDateSpecific")))
element = driver.find_element(By.ID, "publicationDateSpecific")
actions.move_to_element(element).perform()

driver.find_element(By.ID, "publicationDateSpecific").click()
driver.find_element(By.CLASS_NAME, "ui-state-highlight").click()

# click on search
driver.find_element(By.ID, "search").click()

驱动初始化代码

get_driver_from_url()方法来自from driver import *,代码如下:

def get_driver_from_url(url):
    options = webdriver.ChromeOptions()
    options.add_argument("--no-sandbox") 
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--start-maximized") 
    options.add_argument("--headless") 
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
    driver.get(url)
    return driver

已尝试添加--start-maximized参数、使用ActionChains移动到元素、将等待条件改为EC.element_to_be_clickable或EC.visibility_of_element_located,但均未解决问题。


解决方案分析
  • 修正URL错误
    你的初始化代码中URL末尾多了%22(引号的URL编码),会导致跳转到错误页面,修正为:
driver = get_driver_from_url("https://ted.europa.eu/TED/browse/browseByMap.do")
  • 指定无头模式窗口分辨率
    无头模式下--start-maximized可能无法正确渲染页面尺寸,导致元素被隐藏。添加固定窗口大小参数,同时使用新版无头模式提升兼容性:
def get_driver_from_url(url):
    options = webdriver.ChromeOptions()
    options.add_argument("--no-sandbox") 
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--window-size=1920,1080")
    options.add_argument("--headless=new")
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
    driver.get(url)
    return driver
  • 优化等待条件
    将EC.presence_of_element_located替换为EC.element_to_be_clickable,确保元素存在、可见且可交互,同时适当延长等待时间应对页面加载延迟:
# 修改日期选择部分的等待逻辑
WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.ID, "publicationDateSpecific"))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "ui-state-highlight"))).click()
  • 移除重复的Cookie操作
    代码中连续点击两次Cookie同意按钮,可能导致页面状态异常,只保留一次点击:
# accept cookies and close tab
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='cookie-consent-banner']/div[1]/div[1]/div[2]/a[1]"))).click()
  • 取消不必要的ActionChains操作
    无头模式下move_to_element操作可能无效,直接点击已确认可交互的元素即可,无需额外移动操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:05:59