Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
即使在页面加载后,Selenium也无法单击元素_Selenium_Web Scraping_Beautifulsoup - Fatal编程技术网

即使在页面加载后,Selenium也无法单击元素

即使在页面加载后,Selenium也无法单击元素,selenium,web-scraping,beautifulsoup,Selenium,Web Scraping,Beautifulsoup,我试图从一个页面上刮取一些数据,这些数据只有在经过三个步骤后才能到达,即单击文本以显示复选框,选中一个复选框,然后单击一个按钮将我带到下一个页面,从这一点我将刮取数据。我正在使用Python的Selenium包进行三次单击,然后使用driver.page_source发送到BeautifulSoup以获取数据 该网页位于此处:。在左侧,您有一个运动列表,您可以单击该列表以显示复选框。这就是我似乎不能用硒做的事情。我在HTML中找不到任何可以单击的元素。如果我手动完成这一步,那么脚本的其余部分工作

我试图从一个页面上刮取一些数据,这些数据只有在经过三个步骤后才能到达,即单击文本以显示复选框,选中一个复选框,然后单击一个按钮将我带到下一个页面,从这一点我将刮取数据。我正在使用Python的Selenium包进行三次单击,然后使用driver.page_source发送到BeautifulSoup以获取数据

该网页位于此处:。在左侧,您有一个运动列表,您可以单击该列表以显示复选框。这就是我似乎不能用硒做的事情。我在HTML中找不到任何可以单击的元素。如果我手动完成这一步,那么脚本的其余部分工作得很好。让xpath选中该框有点棘手,但是使用bs4和这个我可以完成步骤2。那么剩下的就容易了

问题如何使用Selenium完成第一步,单击“棒球”或“+”以显示复选框列表

下面提供的是

  • 步骤的屏幕截图
  • 完整代码
  • 如果我尝试跳过步骤1,则堆栈跟踪(如果复选框未公开,则不允许我与之交互)

  • 这些屏幕截图更具体地规划了流程:



    如果我尝试“跳过”步骤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()