使用selenium python滚动网页的特定部分



我们如何使用selenium-python在网页的特定部分向下滚动直到结束?

示例:

网页:https://www.google.com/maps/search/Chemists+in+varanasi+地区

在打开页面时,默认情况下,左侧面板中只有7个列表(也可以在inspect html中看到(,但当我们向下滚动时,它会加载更多列表,直到所有20个列表都列出为止。

尝试了下面列出的多种方法,但都不起作用:

elem = driver.find_element_by_class_name('section-scrollbox')
(Basically getting the left pane element based on class name)
elem.send_keys(Keys.PAGE_DOWN)
driver.execute_script("arguments[0].scrollBy(0, 10000)", elem)
driver.execute_script('document.getElementsByClassName("section-scrollbox").scrollDown += 1000')
driver.execute_script('document.querySelector('[aria-label="Results for Chemists in varanasi district"]').scrollBy(0,1000)')

你应该在完整的滚动条元素上滚动

因此,基本上您的要求是滚动网页的特定部分。

虽然大多数可用的答案都围绕着滚动整个网页本身,但确实可以完全滚动网页的特定部分。

有相当多的网站的滚动条在源代码中不是一个可识别的元素,因此点击可以向下滚动该部分。

在这种情况下,您可以使用javascript操作该部分。

但是,如果在源代码中标识了滚动条,那么配置一个简单的单击操作就可以完成任务。

首先确定要滚动的网页的子部分

xpath_element = "//aside[@class='sidebar mCustomScrollbar_mCS_2']//div[@class='mCSB_container']"
section = driver.find_element(By.XPATH, xpath_element)

现在举个例子,假设您想滚动特定部分3次,因此我们可以初始化相同的计数器变量:

counter = 0

while counter < 3:  # this will scroll 3 times
driver1.execute_script('arguments[0].scrollTop = arguments[0].scrollTop + arguments[0].offsetHeight;',
section)
counter += 1
# add a timer for the data to fully load once you have scrolled the section
time.sleep(5) # You might need to install time library to use this statement

这将帮助您滚动网页中的部分。请注意,您可以根据自己的要求修改execute_script(),因此,例如,如果您希望在每次尝试中滚动到该部分的底部,您可以简单地使用:

driver.execute_script(
'arguments[0].scrollTop = arguments[0].scrollTop + document.getElementById("search-results-container").scrollHeight;',
section,
)

在那里你得到了你试图滚动的部分的滚动高度。

最新更新