即使在页面加载后,Selenium也无法单击元素
我试图从一个页面上刮取一些数据,这些数据只有在经过三个步骤后才能到达,即单击文本以显示复选框,选中一个复选框,然后单击一个按钮将我带到下一个页面,从这一点我将刮取数据。我正在使用Python的Selenium包进行三次单击,然后使用driver.page_source发送到BeautifulSoup以获取数据 该网页位于此处:。在左侧,您有一个运动列表,您可以单击该列表以显示复选框。这就是我似乎不能用硒做的事情。我在HTML中找不到任何可以单击的元素。如果我手动完成这一步,那么脚本的其余部分工作得很好。让xpath选中该框有点棘手,但是使用bs4和这个我可以完成步骤2。那么剩下的就容易了 问题如何使用Selenium完成第一步,单击“棒球”或“+”以显示复选框列表 下面提供的是即使在页面加载后,Selenium也无法单击元素,selenium,web-scraping,beautifulsoup,Selenium,Web Scraping,Beautifulsoup,我试图从一个页面上刮取一些数据,这些数据只有在经过三个步骤后才能到达,即单击文本以显示复选框,选中一个复选框,然后单击一个按钮将我带到下一个页面,从这一点我将刮取数据。我正在使用Python的Selenium包进行三次单击,然后使用driver.page_source发送到BeautifulSoup以获取数据 该网页位于此处:。在左侧,您有一个运动列表,您可以单击该列表以显示复选框。这就是我似乎不能用硒做的事情。我在HTML中找不到任何可以单击的元素。如果我手动完成这一步,那么脚本的其余部分工作
这些屏幕截图更具体地规划了流程:
如果我尝试“跳过”步骤1,则堆栈跟踪。它不允许我与复选框交互,除非我公开列表:
---------------------------------------------------------------------------
ElementNotInteractableException Traceback (most recent call last)
<ipython-input-7-3ddcc15ccda8> in <module>
5 button = driver.find_element_by_xpath(xpath_text)
6 #print(button.get_attribute("type"))
----> 7 button.click()
8
9 # Step 3 - Click 'View Selected'
C:\python38\lib\site-packages\selenium\webdriver\remote\webelement.py in click(self)
78 def click(self):
79 """Clicks the element."""
---> 80 self._execute(Command.CLICK_ELEMENT)
81
82 def submit(self):
C:\python38\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params)
631 params = {}
632 params['id'] = self._id
--> 633 return self._parent.execute(command, params)
634
635 def find_element(self, by=By.ID, value=None):
C:\python38\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
319 response = self.command_executor.execute(driver_command, params)
320 if response:
--> 321 self.error_handler.check_response(response)
322 response['value'] = self._unwrap_value(
323 response.get('value', None))
C:\python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
240 alert_text = value['alert'].get('text')
241 raise exception_class(message, screen, stacktrace, alert_text)
--> 242 raise exception_class(message, screen, stacktrace)
243
244 def _value_or_default(self, obj, key, default):
ElementNotInteractableException: Message: element not interactable
(Session info: chrome=81.0.4044.129)
---------------------------------------------------------------------------
ElementNotInteractiableException回溯(最近一次调用)
在里面
5按钮=驱动程序。通过xpath(xpath\u文本)查找元素
6#打印(按钮。获取属性(“类型”))
---->7按钮。单击()
8.
9#步骤3-单击“查看选定内容”
C:\python38\lib\site packages\selenium\webdriver\remote\webelement.py单击(self)
78 def单击(自身):
79“单击元素。”“”
--->80自执行(命令。单击元素)
81
82 def提交(自我):
C:\python38\lib\site packages\selenium\webdriver\remote\webelement.py in\u execute(self、command、params)
631参数={}
632参数['id']=self.\u id
-->633返回self.\u parent.execute(命令,参数)
634
635 def find_元素(self,by=by.ID,value=None):
C:\python38\lib\site packages\selenium\webdriver\remote\webdriver.py in execute(self,driver\u命令,参数)
319 response=self.command\u executor.execute(driver\u command,params)
320如果响应:
-->321自我错误处理程序检查响应(响应)
322响应['value']=self.\u展开值(
323响应。获取('值',无))
C:\python38\lib\site packages\selenium\webdriver\remote\errorhandler.py in check\u response(self,response)
240警报文本=值['alert']。获取('text')
241引发异常类(消息、屏幕、堆栈跟踪、警报文本)
-->242引发异常类(消息、屏幕、堆栈跟踪)
243
244定义值或默认值(self、obj、key、default):
ElementNotInteractiableException:消息:元素不可交互
(会话信息:chrome=81.0.4044.129)
您可以使用下面的xPath单击篮球
driver.find_element_by_xpath('//a[@cfg="{type:\'h2h\',level1:\'Basketball\'}"]').click()
非常感谢-这起作用了。我不知道我在想什么。。。我想我把问题复杂化了。
driver.find_element_by_xpath('//a[@cfg="{type:\'h2h\',level1:\'Basketball\'}"]').click()