【发布时间】: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