无法使用 Selenium 单击元素 - 元素是 "not interactable" 或 "unable to locate"

Cannot Click Element with Selenium - element is either "not interactable" or "unable to locate"

我很难点击 www.tradingview.com 的 "Sign In" 元素。我插入了一个 implicitly_wait 并尝试通过 xPath 和 class 名称查找元素。无论我尝试什么,我都得到 element not interactableunable to locate element

from selenium import webdriver

def sign_in():
    driver = webdriver.Chrome()
    driver.get('https://www.tradingview.com/')
    driver.implicitly_wait(10)
    driver.find_element_by_class_name('tv-header__profile-menu js-device-menu-btn').click()

sign_in()

您似乎在尝试查找错误的元素...

试试这个:

driver.find_element_by_xpath("//a[text()='Sign In']/ancestor::span").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

def sign_in():
    driver = webdriver.Chrome()
    driver.get('https://www.tradingview.com/')
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.tv-header__dropdown-text [href*=signin]'))).click()
sign_in()

如果一切都失败了你可以使用javascript点击

driver.execute_script("document.querySelector('[href*=signin]').click();")

嘿,试试这个,一旦它有效

driver.findElement(By.Xpath("//span//a[text()='Sign In']")).click();
  1. 如果您将定位器策略更改为 XPath Selector,您的代码将更具可读性和可理解性
  2. 考虑使用 Explicit Wait,因为它是更灵活的解决方案,可以节省时间和 CPU 周期。

示例代码:

driver.get("https://www.tradingview.com/")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//a[text()='Sign In']"))).click()