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

Selenium操作Twitter登录XPath定位失败,疑因UI更新导致

问题:Selenium操作X(原Twitter)登录页面无法定位元素报错NoSuchElementException

问题详情

  • 用Selenium操作X登录页面时,无法通过指定XPath定位元素并输入内容,触发selenium.common.exceptions.NoSuchElementException错误
  • 推测是X今日更新UI导致原有定位路径失效
  • 已检查页面iframe,确认无需切换上下文

报错堆栈信息

Traceback (most recent call last):
  File "c:\Users\user\Desktop\pyhton\test.py", line 20, in <module>
    username = Driver.find_element(By.XPATH,'//*[@id="react-root"]/div/div/div/main/div/div/div/div[2]/div[2]/div/div[4]/label/div/div[2]')  
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
  File "C:\Users\user\AppData\Roaming\Python\Python311\site-packages\selenium\webdriver\remote\webdriver.py", line 741, in find_element     
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Roaming\Python\Python311\site-packages\selenium\webdriver\remote\webdriver.py", line 347, in execute
    self.error_handler.check_response(response)
  File "C:\Users\user\AppData\Roaming\Python\Python311\site-packages\selenium\webdriver\remote\errorhandler.py", line 229, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="react-root"]/div/div/div/main/div/div/div/div[2]/div[2]/div/div[4]/label/div/div[2]"}
  (Session info: chrome=124.0.6367.158)
Stacktrace:
        GetHandleVerifier [0x00007FF7A31F1522+60802]
        (No symbol) [0x00007FF7A316AC22]
        (No symbol) [0x00007FF7A3027CE4]
        (No symbol) [0x00007FF7A3076D4D]
        (No symbol) [0x00007FF7A3076E1C]
        (No symbol) [0x00007FF7A30BCE37]
        (No symbol) [0x00007FF7A309ABBF]
        (No symbol) [0x00007FF7A30BA224]
        (No symbol) [0x00007FF7A309A923]
        (No symbol) [0x00007FF7A3068FEC]
        (No symbol) [0x00007FF7A3069C21]
        GetHandleVerifier [0x00007FF7A34F41BD+3217949]
        GetHandleVerifier [0x00007FF7A3536157+3488183]
        GetHandleVerifier [0x00007FF7A352F0DF+3459391]
        GetHandleVerifier [0x00007FF7A32AB8E6+823622]
        (No symbol) [0x00007FF7A3175FBF]
        (No symbol) [0x00007FF7A3170EE4]
        (No symbol) [0x00007FF7A3171072]
        (No symbol) [0x00007FF7A31618C4]
        BaseThreadInitThunk [0x00007FF8056C7344+20]
        RtlUserThreadStart [0x00007FF8063626B1+33]

运行代码

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
Driver = webdriver.Chrome()

Driver.get('https://x.com/i/flow/login')
time.sleep(3)
username = Driver.find_element(By.XPATH,'//*[@id="react-root"]/div/div/div/main/div/div/div/div[2]/div[2]/div/div[4]/label/div/div[2]')
username.send_keys('test')
time.sleep(2)

预期效果

在用户名输入框中填入“test”

解决方案

  1. 替换为稳定的定位方式:放弃依赖层级结构的绝对XPath,改用元素的固有属性定位。当前X登录页的用户名输入框可通过name属性定位,示例:用By.NAME直接定位text,或XPath写法//input[@name='text']。
  2. 使用显式等待替代固定sleep:固定time.sleep()稳定性差,改用WebDriverWait等待元素可交互,避免页面未加载完成就执行定位操作。

修改后的代码示例:

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

driver = webdriver.Chrome()
driver.get('https://x.com/i/flow/login')

# 等待用户名输入框可交互,最长等待10秒
username_input = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.NAME, 'text'))
)
username_input.send_keys('test')

# 后续操作完成后关闭浏览器
# driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:24:53