这是我的代码:
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
我认为还有另一个存在类似问题的线程。该线程中的解决方案对我而言不起作用,或者我不知道如何实施该解决方案。
答案 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")
浏览器快照:
答案 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 ))