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

使用Selenium无法定位TripAdvisor搜索框元素的问题求助

问题:Selenium无法定位TripAdvisor搜索框

我是Selenium新手,正在开发TripAdvisor评论爬取工具,在搜索框输入文本时始终失败。
目标页面:https://www.tripadvisor.co.uk/
HTML截图:HTML截图

尝试通过class name定位元素时,出现NoSuchElementException错误,报错信息如下:

Traceback (most recent call last):
  File "C:\Users\raefm\AppData\Roaming\JetBrains\PyCharmCE2021.1\scratches\scraper.py", line 16, in <module>
    search = driver.find_element("class name", "qjfqs _G B- z _J Cj R0")
  File "C:\Users\raefm\PycharmProjects\scraper\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 740, in find_element
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
  File "C:\Users\raefm\PycharmProjects\scraper\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 346, in execute
    self.error_handler.check_response(response)
  File "C:\Users\raefm\PycharmProjects\scraper\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".qjfqs _G B- z _J Cj R0"}
  (Session info: chrome=114.0.5735.199); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception

当前代码:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
import time

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

driver.get("https://www.tripadvisor.co.uk")

accept = driver.find_element("id", "onetrust-accept-btn-handler")
accept.click()
search = driver.find_element("class name", "qjfqs _G B- z _J Cj R0")
search.send_keys("xyz")
search.send_keys(Keys.RETURN)

time.sleep(100)

解决建议
  • 核心问题:Class Name定位不支持多类名
    Selenium的class name定位只能传入单个类名,你写的qjfqs _G B- z _J Cj R0是多个类名组合,会被解析成无效的CSS选择器(报错里的.qjfqs _G B- z _J Cj R0不符合语法),自然找不到元素。

  • 替换成可靠的定位方式
    推荐用以下几种方式定位搜索框:

    1. 单个核心类名的CSS选择器:
      用搜索框的核心类qjfqs直接定位:
      search = driver.find_element(By.CSS_SELECTOR, ".qjfqs")
      
    2. 结合属性的CSS选择器:
      如果类名不稳定,可结合搜索框的placeholder属性(比如实际页面中可能是"Search"):
      search = driver.find_element(By.CSS_SELECTOR, 'input[placeholder="Search"]')
      
    3. ID定位(如果有):
      若搜索框有唯一ID,用ID定位是最稳定的方式。
  • 添加显式等待解决加载延迟
    页面加载速度可能慢于代码执行速度,用显式等待代替time.sleep,能确保元素加载完成后再执行操作:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待同意按钮可点击并点击
accept = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "onetrust-accept-btn-handler"))
)
accept.click()

# 等待搜索框出现并输入内容
search = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".qjfqs"))
)
  • 完整修正后的代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.tripadvisor.co.uk")

# 处理Cookie同意弹窗
accept = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "onetrust-accept-btn-handler"))
)
accept.click()

# 定位搜索框并输入内容
search = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".qjfqs"))
)
search.send_keys("xyz")
search.send_keys(Keys.RETURN)

driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:52:50