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

使用Selenium自动化Trust Wallet登录时遇NoSuchElementException问题

Trust Wallet自动登录Selenium定位元素失败(NoSuchElementException)

为保障Trust Wallet账户安全,我会频繁退出账户,因此编写Python代码实现快速重新登录,但使用CSS Selector或XPath定位元素时触发了NoSuchElementException错误,以下是代码及报错信息,已尝试两种定位方式但问题仍未解决。

代码

from selenium import webdriver 
from selenium.webdriver.chrome.options import Options 
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# chrome ayarlamaları
options = webdriver.ChromeOptions()
options.add_extension('C:/Users/JAXXXXX/AppData/Local/Google/Chrome/User Data/Default/Extensions/egjidjbpglichdcondbcbdnbeeppgdph/2.11.0_0.crx')

# sürücü başlatma
driver = webdriver.Chrome(options=options)

time.sleep(10)
# Butonun yüklenmesini bekleme
buton = driver.find_element(By.CSS_SELECTOR, "ph-no-capture w-full block flex-1 outline-none bg-transparent title-text font-medium text-left")
buton1.click()

报错信息

Traceback (most recent call last):
  File "C:\Users\JAXXXXX\Desktop\aa\trust.py", line 17, in <module>
    buton = driver.find_element(By.CSS_SELECTOR, "ph-no-capture w-full block flex-1 outline-none bg-transparent title-text font-medium text-left")
  File "C:\Users\JAXXXXX\AppData\Local\Programs\Python\Python312\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 831, in find_element
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
  File "C:\Users\JAXXXXX\AppData\Local\Programs\Python\Python312\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in execute
    self.error_handler.check_response(response)
  File "C:\Users\JAXXXXX\AppData\Local\Programs\Python\Python312\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":"ph-no-capture w-full block flex-1 outline-none bg-transparent title-text font-medium text-left"}
  (Session info: chrome=124.0.6367.92)
Stacktrace:
    GetHandleVerifier [0x00007FF66C381502+60802]
    (No symbol) [0x00007FF66C2FAC02]
    (No symbol) [0x00007FF66C1B7CE4]
    (No symbol) [0x00007FF66C206D4D]
    (No symbol) [0x00007FF66C206E1C]
    (No symbol) [0x00007FF66C24CE37]
    (No symbol) [0x00007FF66C22ABBF]
    (No symbol) [0x00007FF66C24A224]
    (No symbol) [0x00007FF66C22A923]
    (No symbol) [0x00007FF66C1F8FEC]
    (No symbol) [0x00007FF66C1F9C21]
    GetHandleVerifier [0x00007FF66C68411D+3217821]
    GetHandleVerifier [0x00007FF66C6C60B7+3488055]
    GetHandleVerifier [0x00007FF66C6BF03F+3459263]
    GetHandleVerifier [0x00007FF66C43B846+823494]
    (No symbol) [0x00007FF66C305F9F]
    (No symbol) [0x00007FF66C300EC4]
    (No symbol) [0x00007FF66C301052]
    (No symbol) [0x00007FF66C2F18A4]
    BaseThreadInitThunk [0x00007FF9911E7344+20]
    RtlUserThreadStart [0x00007FF9929626B1+33]

问题分析与解决办法

1. CSS Selector语法错误

你编写的CSS选择器是多个类名直接空格拼接,这不符合语法规则。正确写法是每个类名前加.,多个类名直接连写(空格代表后代元素,不是多类名匹配)。修正后的选择器应为:

.ph-no-capture.w-full.block.flex-1.outline-none.bg-transparent.title-text.font-medium.text-left

2. 元素可能嵌套在iframe中

Trust Wallet扩展页面的核心元素通常嵌套在iframe内,Selenium默认不会自动切换到iframe上下文,需先切换后才能定位元素:

# 等待iframe加载并切换
iframe = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.TAG_NAME, "iframe")))
driver.switch_to.frame(iframe)

# 操作完iframe内元素后,切回主文档(可选)
# driver.switch_to.default_content()

3. 替换硬等待为智能等待

time.sleep(10)是不稳定的硬等待,建议替换为Selenium显式等待,确保元素加载完成后再操作:

# 等待元素可点击后执行点击
buton = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, ".ph-no-capture.w-full.block.flex-1.outline-none.bg-transparent.title-text.font-medium.text-left"))
)
buton.click()

4. 变量名错误

代码中定义了变量buton,但点击的是未定义的buton1,需修正为一致的变量名:

buton.click()

修正后的完整代码

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

options = webdriver.ChromeOptions()
options.add_extension('C:/Users/JAXXXXX/AppData/Local/Google/Chrome/User Data/Default/Extensions/egjidjbpglichdcondbcbdnbeeppgdph/2.11.0_0.crx')

driver = webdriver.Chrome(options=options)

try:
    # 切换到Trust Wallet扩展窗口(打开扩展后默认会新建窗口)
    driver.switch_to.window(driver.window_handles[-1])
    
    # 切换到iframe(如果存在)
    iframe = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.TAG_NAME, "iframe")))
    driver.switch_to.frame(iframe)
    
    # 等待元素并点击
    buton = WebDriverWait(driver, 20).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, ".ph-no-capture.w-full.block.flex-1.outline-none.bg-transparent.title-text.font-medium.text-left"))
    )
    buton.click()
finally:
    # 可根据需求选择是否关闭浏览器
    # driver.quit()
    pass

内容的提问来源于stack exchange,提问作者Yahya Balcı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:25:59