【问题标题】:Element not interactable when trying to access a pop-up with Selenium尝试使用 Selenium 访问弹出窗口时元素不可交互
【发布时间】:2020-02-07 14:57:48
【问题描述】:

我正在尝试抓取以下网站:https://www.nemlig.com/,但这并不像我以前那么容易,因为我要抓取的页面不是静态的。我正在尝试使用 Selenium 做的是单击此:

这样邮政编码弹出窗口是可见的。然后,插入一个数字并回车。

这是我的看法:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome(executable_path=r"C:\Users\user\lib\chromedriver_77.0.3865.40.exe")
browser.get('https://www.nemlig.com/')

elem = browser.find_element_by_xpath("//div[@class='timeslot-statusbutton']")
elem.clear()
elem = browser.find_element_by_xpath("//input[@class='prompt__input ng-pristine ng-valid ng-empty ng-touched']")
elem.send_keys("2300")
elem.send_keys(Keys.RETURN)

browser.get 之后的所有内容都返回此错误:

Traceback(最近一次通话最后一次):

文件“”,第 8 行,在 elem = browser.find_element_by_xpath("//div[@class='timeslot-statusbutton']").click()

文件“D:\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py”,第 80 行,点击 self._execute(Command.CLICK_ELEMENT)

文件“D:\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py”,第 633 行,在 _execute return self._parent.execute(command, params)

文件“D:\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py”,第 321 行,在执行中 self.error_handler.check_response(response)

文件“D:\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py”,第 242 行,在 check_response raise exception_class(message, screen, stacktrace)

ElementNotInteractableException:元素不可交互 (会话信息:chrome=77.0.3865.90)

我怎样才能正确地做到这一点?

【问题讨论】:

  • 尝试点击跨度css:.timeslot-statusbutton__text
  • 所以我把它改成了span[@class='timeslot-statusbutton__text'],我得到了同样的错误。
  • elem.clear() != elem.click() 不要在按钮上执行清除,还要检查弹出窗口是否尚未打开。通过 css .timeslot-prompt 查找元素并检查是否有属性 disabled-hidden,表示它没有打开。如果有则表示已经打开,无需点击。
  • 是的。我最终想通了elem.clear() 的事情。将其替换为browser.execute_script("arguments[0].click();", elem)。感谢您提供有关弹出窗口的提示!但是,elem.send_keys("2300") 现在是 not interactable。你觉得现在哪里出了问题?
  • 正如我上面提到的,请安全检查弹出窗口是否已经打开!如果正常的发送文本方法不起作用,请使用 execute_script 将文本发送到输入

标签: python selenium selenium-webdriver


【解决方案1】:

你可以试试这个代码:

driver = webdriver.Chrome(executable_path = r'C:/Users/***/Downloads/BrowserDriver/chromedriver_win32/chromedriver.exe')
wait = WebDriverWait(driver,10)

driver.maximize_window()

driver.get("https://www.nemlig.com/")

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".timeslot-prompt.initial-animation-done")))

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[type='tel'][class^='pro']"))).send_keys('ABC')  

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".btn.prompt__button"))).click()  

进口将是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多