【问题标题】:Selenium Div ScrollSelenium Div 滚动
【发布时间】:2022-02-01 21:17:12
【问题描述】:

我将 Scroll 方法应用到整个窗口,它工作正常:

driver.execute_script("window.scrollTo(0, 1000);")

问题是我必须将它应用到 DIV,所以我得到了 Div,然后像这样应用 Scroll:

    myDiv = self.driver.find_elements(By.XPATH, '//div[contains(@class,"ODSEW-ShBeI NIyLF-haAclf gm2-body-2")]')
myDiv..execute_script("window.scrollTo(0, 1000);")

但它什么也没做。有什么想法吗?

【问题讨论】:

  • 我看到你从不接受答案,在大多数情况下回答你自己的问题 - 我认为没有理由在这里回答......

标签: html selenium scroll


【解决方案1】:

假设您的 div 是可滚动的,这应该可以工作:

myDiv = self.driver.find_element(By.XPATH, '//div[contains(@class,"ODSEW-
self.driver.execute_script("arguments[0].scroll(0, 1000)", myDiv)

如果元素不可滚动:


# thanks to https://stackoverflow.com/a/35940276/5226491
find_scrollable_parent_script = '''
function getScrollParent(node) {
  if (node == null) {
    return null;
  }

  if (node.scrollHeight > node.clientHeight) {
    return node;
  } else {
    return getScrollParent(node.parentNode);
  }
}

return getScrollParent(arguments[0]);
'''
myDiv = self.driver.find_element(By.XPATH, '//div[contains(@class,"ODSEW-ShBeI NIyLF-haAclf gm2-body-2")]')
scrollable = self.driver.execute_script(find_scrollable_parent_script, myDiv)
self.driver.execute_script("arguments[0].scroll(0, 1000)", scrollable)

【讨论】:

  • 谢谢,我收到此错误:消息:javascript 错误:参数[0].scroll 不是函数(会话信息:chrome=97.0.4692.99)
  • 对不起,我的问题。第一行应该是driver.find_element 而不是driver.find_elements
  • 现在没有错误但没有滚动。我想问题是在其他和其他中有一个 div,依此类推.... 有 20 个,尝试所有但根本没有滚动。当我在“平面”窗口中使用它时,它会滚动,所以不确定问题是什么。当然,您可以在网站中滚动,所以它一定是可能的。
  • @bartoro 我认为滚动不起作用,因为该元素不可滚动。因此,尝试找到该元素'//div[contains(@class,"ODSEW-ShBeI NIyLF-haAclf gm2-body-2")]' 的第一个可滚动父级。这篇文章可能会有所帮助:stackoverflow.com/a/35940276/5226491。您可以在浏览器控制台中调用此函数,或使用 webdriver 执行(在这种情况下,您还必须将 myDiv 传递给类似 arguments[0] 的脚本)。
  • @bartoro 我再次更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
  • 2019-08-10
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
相关资源
最近更新 更多