Python+;硒,罐装';t单击';按钮';被跨度包裹

Python+;硒,罐装';t单击';按钮';被跨度包裹,python,selenium,onclick,css-selectors,webdriver,Python,Selenium,Onclick,Css Selectors,Webdriver,我是新来这里的。每次刷新页面后,我都试图使用selenium单击“更多”按钮来展开“审阅”部分 该网站是TripAdvisor。more按钮的逻辑是,只要您单击第一个more按钮,它就会自动为您展开所有审阅部分。换句话说,你只需要点击第一个“更多”按钮 所有按钮都有类似的类名。例如taLnk.hvrIE6.tr415411081.moreLink.ulBlueLinks。只有数字部分每次都会改变 完整元素如下所示: <span class="taLnk hvrIE6 tr413756996

我是新来这里的。每次刷新页面后,我都试图使用selenium单击“更多”按钮来展开“审阅”部分

该网站是TripAdvisor。
more
按钮的逻辑是,只要您单击第一个
more
按钮,它就会自动为您展开所有审阅部分。换句话说,你只需要点击第一个“更多”按钮

所有按钮都有类似的类名。例如
taLnk.hvrIE6.tr415411081.moreLink.ulBlueLinks
。只有数字部分每次都会改变

完整元素如下所示:

<span class="taLnk hvrIE6 tr413756996 moreLink ulBlueLinks" onclick="          var options = {
      flow: 'CORE_COMBINED',
      pid: 39415,
      onSuccess: function() { ta.util.cookie.setPIDCookie(2247); ta.call('ta.servlet.Reviews.expandReviews', {type: 'dummy'}, ta.id('review_413756996'), 'review_413756996', '1', 2247);; window.location.hash = 'review_413756996'; }
    };
    ta.call('ta.registration.RegOverlay.show', {type: 'dummy'}, ta.id('review_413756996'), options);
    return false;
  ">
More&nbsp; </span>
driver = webdriver.Firefox()
driver.get(newurl)
page_source = driver.page_source
soup = BeautifulSoup(page_source)
moreID = soup.find("span", class_=re.compile(r'.*\bmoreLink\b.*'))['class']
moreID = '.'.join(moreID[0:(len(moreID)+1)])
moreButton = 'span.' + moreID
button = driver.find_element_by_css_selector(moreButton)
button.click()
time.sleep(10)
但是,我不断收到这样的错误消息:

WebDriverException:消息:元素在点(318.5, 7.100006103515625). 其他元素将接收单击

你能告诉我如何解决这个问题吗?任何帮助都将不胜感激

尝试使用:

当我需要单击
元素而不是实际的按钮或链接时,我使用了这种技术

WebDriverException:消息:元素在点(318.5,7.100006103515625)处不可单击。其他元素将接收单击

当元素不在视图端口中且selenium由于其上的其他覆盖元素而无法单击时,将发生此错误。在这种情况下,您应该尝试以下解决方案之一:-

  • 在单击之前,您可以尝试使用
    ActionChains
    访问该元素,如下所示:-

    from selenium.webdriver.common.action_chains import ActionChains
    
    button = driver.find_element_by_css_selector(moreButton)
    
    ActionChains(button).move_to_element(element).click().perform()
    
  • 您可以尝试使用
    execute\u script()
    在单击之前访问该元素:-

    driver.execute_script("arguments[0].scrollIntoView(true)", button)
    button.click()
    
  • 您可以尝试将
    JavaScript::click()
    execute\u script()
    一起使用,但此
    JavaScript::click()
    无法达到测试目的。首先是因为它不会像真正的点击一样生成所有事件(焦点、模糊、鼠标向下、鼠标移动…),其次是因为它不能保证真正的用户可以与元素交互。但是为了摆脱这个问题,你可以把它看作是一个替代的解决方案。
    driver.execute_script("arguments[0].click()", button)
    

注意:-在使用这些选项之前,请确保您正在尝试使用正确的定位器与正确的元素进行交互,否则
WebElement。单击()
在等待元素可见并使用
WebDriverWait
可单击后效果良好。此外,我还尝试了等待功能-{WebDriverWait(driver,10)。直到(EC.element_to_be_clickable((By.CLASS_NAME,more)))并收到一条空的错误消息谢谢elethan。我试过了。但我还是收到了与我问题中的错误消息相同的错误消息。@backbarrice你确定要取消对
按钮的原始调用吗。click()
?@elethan.是的,我做了。我想知道这是否是因为附近有另一个跨度大小完全相同,类名相同,onlick值相同,所有内容都相同。因此,当我尝试单击该跨度的坐标时,另一个按钮停止了它。为了清楚起见,有两种类型的“更多”按钮。一种用于扩展查看内容t、 另一个用于扩展响应内容。我只需单击该页面上的第一个“更多”按钮。无论它是哪一个。我认为find.element(w/o s)将帮助我找到第一个。但它没有。@backpacerice您可以尝试使用
find\u elements\u by…
方法,而不是
find\u elements\u by…
方法。这些方法将返回元素列表,您可能能够从该列表中获取正确的元素。例如,在您的示例中:
buttons=driver.find\U元素\U按\U css\U选择器(更多按钮)
将为您提供一个元素列表,其中css选择器与
moreButton
匹配。您确定页面上
按钮
当前指向哪个元素吗?谢谢。我使用了ActionChains并成功运行了一次。但是,下一次运行失败。可能是因为连接问题。但是谢谢!驱动程序。执行脚本(“参数[0]。单击()”,按钮)适合我
driver.execute_script("arguments[0].click()", button)