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

使用Selenium爬取漫威官网时搜索功能无法正常运行

问题根因

代码无法触发搜索有几个明确的问题:

  • 自定义Chrome配置完全没生效:代码里定义了无头模式、窗口尺寸参数,但初始化webdriver.Chrome()时没有传入options参数,所有配置都没实际加载,默认小窗口下很容易出现元素定位偏移、点击被页面其他元素拦截的问题。
  • 前端动画阻断交互:Cookie同意弹窗、搜索弹出框都有淡入淡出的过渡动画,仅判断DOM里元素可点击就立刻操作,大概率会被还没消失的遮罩层挡住,或者搜索框还没完成焦点绑定,输入的内容、触发的回车都不会被响应。
  • 搜索触发逻辑不匹配:当前漫威站点的搜索框做了输入防抖,直接把Keys.RETURN拼在搜索关键词后面一起传入send_keys,事件会被防抖逻辑吞掉,不会触发搜索跳转。
  • 硬编码驱动路径兼容性差:手动写死chromedriver的本地存储路径,只要浏览器自动更新、驱动位置变动,代码就会直接启动失败。
可运行修正代码
from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time

user_input = input("character: ")
options = Options()
options.headless = True
options.add_argument("--window-size=1920,1080")
# 关闭自动化标识,降低被站点反爬识别的概率
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])

# 传入配置参数,Selenium 4.6及以上版本无需手动指定chromedriver路径,会自动匹配对应浏览器版本的驱动
driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 20)
driver.get("https://www.marvel.com/search")

# 处理Cookie授权弹窗,等待弹窗遮罩完全消失再进行下一步
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button#onetrust-accept-btn-handler"))).click()
wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, "div.onetrust-pc-dark-filter")))
time.sleep(0.5)

# 点击搜索图标,等待搜索框弹出动画完全结束后再输入内容
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.nav-icon.gcom-icon-search"))).click()
search_input = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#searchString")))
time.sleep(0.8)
search_input.clear()
search_input.send_keys(user_input)
time.sleep(0.3) # 等待输入内容同步到输入框,避开防抖拦截
search_input.send_keys(Keys.RETURN)

# 后续可在此处添加搜索结果解析逻辑
print("搜索触发完成,当前页面地址:", driver.current_url)
driver.quit()
更稳定的优化方案

不需要模拟繁琐的前端点击操作,漫威搜索页原生支持URL传参直达结果页,跳过所有交互步骤,运行效率和稳定性比模拟UI操作高很多:

user_input = input("character: ")
options = Options()
options.headless = True
options.add_argument("--window-size=1920,1080")
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 20)

# 直接构造搜索结果页地址访问
driver.get(f"https://www.marvel.com/search?query={user_input}")
# 等待搜索结果模块加载完成即可开始解析
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.search-results")))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:30:53