消息:元素在访问标签时不可交互 python

Message: element not interactable on accessing a tag python

我正在尝试访问 url 上的登录按钮,如下面的代码所示。我已经验证了 url 和 href 的内容。它们都与使用 inspect element dev 工具显示的内容一致。

但是在单击提取的元素时出现错误:

Message: element not interactable 

我不知道为什么会这样。

请帮我解决这个问题

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait

# setup the browser
browser = webdriver.Chrome('./chromedriver')
browser.get('https://libraries.usc.edu/')
browser.maximize_window()

# access the relevant a tag after inspecting it in dev tool inspect element
a_tag_elt = WebDriverWait(browser, 10).until(lambda browser :
                                             browser.find_element_by_css_selector('div.site-header__signin a'))

# sanity check by printing out the details
print(type(a_tag_elt))
print(a_tag_elt.get_attribute('href'), a_tag_elt.get_attribute('innerHTML'))

# produces Message: element not interactable error
a_tag_elt.click()

# quit the browser
browser.quit()

单击“登录”link 引发 WebDriverWait() 和 element_to_be_clickable() 以及以下 css 选择器。

WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"a.main-navigation__navbar>.main-navigation__navbar-text"))).click()

或遵循 xpath。

WebDriverWait(browser,5).until(EC.element_to_be_clickable((By.XPATH,"//span[text()='Sign In']"))).click()

您需要导入以下库。

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

要单击文本为 登录 的元素,您需要诱导 for the element_to_be_clickable() and you can use either of the following :

  • 使用CSS_SELECTOR:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.main-navigation__navbar span"))).click()
    
  • 使用XPATH:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='main-navigation__navbar ']//span"))).click()
    
  • 注意:您必须添加以下导入:

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