ElementNotInteractableException:消息:在Python上使用Selenium将文本发送到Quora上的Email字段时,元素不可交互错误

时间:2019-05-02 04:00:01

标签: python selenium selenium-webdriver xpath webdriverwait

这是我的代码:

from selenium import webdriver

user = "someemail@email.com"

browser = webdriver.Chrome("/path/to/browser/")

browser.get("https://www.quora.com/")

username = browser.find_element_by_name("email")

browser.implicitly_wait(10)

username.send_keys(user)

这是错误消息:

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

我认为还有另一个存在类似问题的线程。该线程中的解决方案对我而言不起作用,或者我不知道如何实施该解决方案。

5 个答案:

答案 0 :(得分:1)

from selenium import webdriver

user = "someemail@email.com"

browser = webdriver.Chrome("/path/to/browser/")

browser.get("https://www.quora.com/")

username = browser.find_element_by_xpath("//input[@class='text header_login_text_box ignore_interaction' and @type='text']")

browser.implicitly_wait(10)

username.send_keys(user)

在这里您可以找到为什么发生ElementNotInteractableException的原因。

答案 1 :(得分:1)

如评论中所述,定位器用于返回两个元素,而所需元素是第二个。驱动程序尝试与第一个元素进行交互,因此引发了异常。

很高兴在控制台中看到,定位器是否需要返回。

> $$("[name='email']") (2) [input#__w2_wD9e9Qgz12_email.text, input#__w2_wD9e9Qgz18_email.text.header_login_text_box.ignore_interaction]
> 0: input#__w2_wD9e9Qgz12_email.text 1:
> input#__w2_wD9e9Qgz18_email.text.header_login_text_box.ignore_interaction
> length: 2
> __proto__: Array(0)

再去找一个定位器,如果无法找出另一个定位器,然后发表评论会为您提供帮助。

答案 2 :(得分:1)

find_element_by_name("email")

在DOM中多次出现。所以那行不通。

您可以尝试使用此 css选择器

input[class*='header_login_text_box'][name='email']  

代码:

username = browser.find_element_by_css_selector("input[class*='header_login_text_box'][name='email']")

username.send_keys("user@gmail.com")

答案 3 :(得分:1)

要将字符序列发送到Quora登录部分中的电子邮件字段,您需要诱导 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
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument("--disable-extensions")
    # options.add_argument('disable-infobars')
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.quora.com/")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='title login_title' and text()='Login']//following::div[1]//input[@class='text header_login_text_box ignore_interaction']"))).send_keys("someemail@email.com")
    
  • 浏览器快照:

quora_email

答案 4 :(得分:0)

如果您正在使用“选择”方式,例如:

来自selenium.webdriver.support.select导入选择

尝试

选择(WebDriverWait(驱动程序,20).until(EC.element_to_be_clickable((By.XPATH,'''//*[@id="ReportViewer1_ctl04_ctl07_ddValue"]''')))))).select_by_visible_text(str(x ))