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

Ubuntu22.04下Firefox+Selenium4.2.0通过ID找元素报错求助

环境信息

  • 系统:Ubuntu 22.04(代号jammy)
  • Firefox:通过apt安装(非snap版本)
  • Selenium版本:4.2.0
  • 开发语言:Python3

运行代码

#!/bin/usr/python3
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
#driver = webdriver.PhantomJS()
driver.get('https://euw.leagueoflegends.com/en-gb/')
time.sleep(5)
driver.refresh()


#search_field = driver.find_element_by_id('truste-show-consent')
#search_field = driver.find_element("id", "login")
#ID = "id"
#search_field = driver.find_element(By.ID, "login")
search_field = driver.find_element(By.ID,'truste-show-consent')

#driver.find_element("id", "login")

print(search_field.text)
driver.send_keys(Keys.F5)
search_field.click()

错误信息

WebDriverError@chrome://remote/content/shared/webdriver/Errors.jsm:192:5
NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.jsm:404:5
element.find/<<@chrome://remote/content/marionette/element.js:291:16

问题描述

尝试通过By.ID定位元素'truste-show-consent'时触发NoSuchElementError,需要排查并解决该问题。

解决方案

1. 检查元素是否在iframe中

多数Cookie授权弹窗会嵌入在iframe内,Selenium默认无法直接定位iframe里的元素,需先切换到对应iframe:

# 定位truste相关的iframe
iframe = driver.find_element(By.CSS_SELECTOR, "iframe[src*='truste']")
driver.switch_to.frame(iframe)
# 再定位目标元素
search_field = driver.find_element(By.ID,'truste-show-consent')
# 操作完成后切回主页面
driver.switch_to.default_content()

2. 替换固定等待为显式等待

time.sleep(5)是固定等待,无法保证元素完全加载完成,改用显式等待确保元素可交互:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 最长等待10秒,直到元素可点击
search_field = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, 'truste-show-consent'))
)

3. 验证元素ID的正确性

手动打开目标页面,按F12打开开发者工具,在元素搜索框输入#truste-show-consent,确认元素是否存在。部分网站会动态生成元素ID,若ID有变化,需改用其他定位方式(比如CSS选择器结合元素文本或其他属性)。

4. 修正代码中的错误

代码里的driver.send_keys(Keys.F5)是错误用法,send_keys是元素对象的方法,若要刷新页面,直接使用driver.refresh()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:36:27