使用 Python 在 Slack 聊天中使用 Selenium 滚动页面

问题描述 投票:0回答:1

我的脚本正在从 Slack 聊天中抓取数据,但我没有 API,因此我使用 Selenium 进行网页抓取,当我刷新页面时,我需要滚动到消息页面的底部。

我设法使用选择器有效地定位滚动条,并且我正在尝试不同的方法来向下移动页面,但它没有移动一英寸。

感谢您的任何建议!

scroll_selector = 'body > div.p-client_container > div > div > div.p-client_workspace_wrapper > div.p-client_workspace > div.p-client_workspace__layout > div:nth-child(2) > div:nth-child(2) > div > div.p-file_drag_drop__container > div.p-workspace__primary_view_body > div > div:nth-child(3) > div > div > div.c-scrollbar__track > div'
            try:
                WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.CSS_SELECTOR, scroll_selector)))
                scrollbar_track = driver.find_element(By.CSS_SELECTOR, scroll_selector)
                print("HTML Element located")
            except TimeoutException:
                print("HTML Element not located")    
            
            # Here different options tried to move the sidebar
            driver.execute_script("arguments[0].click();", scrollbar_track)
            logger.debug("Scroll bar Clicked")

            driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollbar_track)
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

            scrollbar_track.send_keys(Keys.PAGE_DOWN)

            scrollbar_track.send_keys(Keys.DOWN)
            time.sleep(2)
            scrollbar_track.send_keys(Keys.DOWN)

python selenium-webdriver scroll
1个回答
0
投票

我记得我有 Slack,并检查了 HTML。因此,当 HTML 文档大于视口时,您可以使用

window.scrollTo()
上下滚动。但在本例中,滚动包含在 HTML 元素(消息区域)内。因此我们需要在元素上调用
scrollTo()
(而不是滚动条本身)。

哪个元素实际上在滚动并不明显。我必须在开发控制台中使用以下代码将事件侦听器绑定到所有元素,以便我可以找到它:

document.querySelectorAll("*").forEach(function(div){
  // Bind each to a scroll event listener
  div.addEventListener("scroll", function(){
      console.log(this);
  });
});

(归功于斯科特·马库斯

元素所在位置:

<div data-qa="slack_kit_scrollbar" role="presentation" class="c-scrollbar__hider" tabindex="-1">

然后我构建了一个 XPATH 来查找这个元素。有两个滚动条,一个用于频道/DM,一个用于消息。所以 XPATH 是

(//div[@data-qa="slack_kit_scrollbar"])[2]

放在一起:

messages_scroller = driver.find_element(By.XPATH, 
                    '(//div[@data-qa="slack_kit_scrollbar"])[2]')
driver.execute_script("arguments[0].scrollTo(0, arguments[0].scrollHeight);",
                      messages_scroller)
© www.soinside.com 2019 - 2024. All rights reserved.