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

如何用Selenium Python定位whoscored搜索框?代码报错求助

问题描述

我尝试定位网站https://1xbet.whoscored.com/的搜索文本框,在Colab中编写了以下代码:

from selenium import webdriver
from selenium.webdriver.common.by import By

# Initialize the webdriver
service = Service(executable_path=r'/usr/bin/chromedriver')
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
browser = webdriver.Chrome(service=service, options=options)
# Navigate to a webpage
browser.get('https://1xbet.whoscored.com/')

element = browser.find_element(By.XPATH,'//*[@id="search-box"]')

element.clear()
element.send_keys('Manchester united')

# Close the driver
browser.quit()

运行时抛出NoSuchElementException错误,错误信息如下:

---------------------------------------------------------------------------
NoSuchElementException                    Traceback (most recent call last)
<ipython-input-130-cd823d469a61> in <cell line: 13>()
     11 browser.get('https://1xbet.whoscored.com/')
     12 
---> 13 element = browser.find_element(By.XPATH,'//*[@id=&quot;search-box&quot;]')
     14 element.clear()
     15 element.send_keys('Manchester united')

2 frames
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response)
    243                 alert_text = value["alert"].get("text")
    244             raise exception_class(message, screen, stacktrace, alert_text)  # type: ignore[call-arg]  # mypy is not smart enough here
--> 245         raise exception_class(message, screen, stacktrace)

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="search-box"]"}
  (Session info: headless chrome=112.0.5615.49); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
解决建议
  • 修复XPATH转义问题:代码里的XPATH使用了HTML转义字符&quot;,这在Python字符串中无效,直接改为单双引号嵌套的格式:'//*[@id="search-box"]'或者"//*[@id='search-box']",更简洁的方式是直接用By.ID定位,避免XPATH的转义麻烦:browser.find_element(By.ID, "search-box")。
  • 添加显式等待:页面加载存在延迟,直接查找元素会因为元素未渲染完成失败。导入等待相关模块,等待元素可交互后再操作:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 替换原元素查找代码
    element = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.ID, "search-box"))
    )
    
  • 检查iframe嵌套情况:如果搜索框被嵌套在iframe中,需要先切换到对应iframe才能定位元素,示例代码:
    # 假设iframe的ID是"iframe-id",实际需通过开发者工具确认
    iframe = browser.find_element(By.ID, "iframe-id")
    browser.switch_to.frame(iframe)
    # 之后再查找搜索框
    element = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.ID, "search-box")))
    # 操作完成后切回主文档
    browser.switch_to.default_content()
    
  • 优化ChromeOptions配置:Colab环境下运行无头Chrome,建议补充以下配置,避免内存不足或视口问题导致元素不可见:
    options.add_argument('--window-size=1920,1080')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--disable-gpu')
    
  • 验证元素实际属性:手动打开目标网站,用浏览器开发者工具(F12)确认搜索框的ID是否确实为search-box,网站更新可能导致元素属性变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:05:29