在Python Selenium中如何向下滚动一个页面?

2,667 阅读4分钟

如果我们想下移到一个页面,或者想在一个不在视野中的页面上搜索什么,我们就用滚动来到达那里。有可能用Selenium自动滚动一个页面吗?Selenium的主要功能中没有滚动的选项。但是我们可以通过使用驱动对象,在Python中启用一些额外的javascript功能来实现它。在Selenium中,可以用三种不同的方式向下滚动页面。今天我们将尝试了解所有三种可能的选项。

设置环境

因为我对旅游有热情,所以我喜欢看旅游博客。今天我们将尝试滚动一个名为"世界上游客最多的50个旅游景点".

所以,让我们开始这个过程。首先,我们需要从selenium导入WebDriver ,然后从中创建一个驱动对象。接下来,我们需要指定ChromeDriver 的路径,因为我们将使用chrome浏览器来滚动页面。maximize_window() 的方法,以便有一个更好的视野。然后我们将尝试使用driver.get() 方法连接到网站。我们将使用隐式等待10秒。当我们连接后,页面底部会出现一个cookie政策。我们需要找到 "OK, got it "按钮的WebElement来接受它,然后点击它。

from selenium import webdriver
driver = webdriver.Chrome(executable_path = r'G:/chromedriver_win32/chromedriver.exe')
driver.maximize_window()
driver.get('https://www.lovehomeswap.com/blog/latest-news/the-50-most-visited-tourist-attractions-in-the-world')
driver.implicitly_wait(10)
cookie = driver.find_element_by_link_text('OK, got it')
cookie.click()

通过像素向下滚动页面

我们可以通过像素数来滚动页面。有一个方法叫execute_script() ,它可以让我们滚动一个页面。这个命令是这样的。

driver.execute_script("window.scrollBy(0,500)","")

这里我们需要在scrollBy() 方法中输入两个参数。0是起始像素位置或默认像素,500是我们想滚动到的像素位置。通过改变这些值,可以从一个地方向下滚动到另一个地方。execute_script() 方法的第二个参数将保持为空。让我们在网站上试着做一下。

driver.execute_script("window.scrollBy(0,3000)","")

由于我们将scrollBy() 方法的第二个参数从500设置为3000,我们可以看到右侧的滚动条没有保持在其默认位置。它已经在3000像素的位置向下滚动了一下。通过改变第二个参数,我们可以在这个方法的帮助下访问页面的某些地方。

向下滚动页面,直到找到元素为止

现在我们想在网页中搜索一个特定的元素,但我们不知道这个点的确切像素位置。我们怎样才能向下滚动到那个特定的元素呢?这也可以通过下面的命令实现。

driver.execute_script("arguments[0].scrollIntoView();",Element)

要使用这个命令,首先我们需要确定我们要查看的元素,然后我们将其存储到一个变量中。我们将再次使用execute_script() 方法,它也将接受两个参数。我们将输入"arguments[0].scrollIntoView();"作为第一个参数,将包含已识别元素的变量作为第二个参数。希望滚动条会自动移动到该元素所在的位置。

让我们试着从网页上找到元素"Niagra Falls" 。我们想设置我们的滚动器来自动查看这个元素。下面的代码就很好。

niagara_falls = driver.find_element_by_link_text('Niagara Falls')
driver.execute_script("arguments[0].scrollIntoView();",niagara_falls)

在这里,我们试图通过链接文本找到该元素,并创建了一个变量niagara_falls ,其位置为WebElement 。在下一行中,我们用driver.execute_script 方法执行命令。

尼亚加拉大瀑布出现在页面的顶部。有时由于 "登录 "栏的存在,它可能不可见。那么你需要向上滚动一下才能看到。

向下滚动直到页面的末端

execute_script 方法也可以向下滚动到任何页面的末尾。该命令将看起来像这样。

driver.execute_script("window.scrollBy(0,document.body.scrollHeight)")

在这里,我们将再次在execute_script() 方法中使用javascript语句。scrollBy() 方法将接受两个参数。第一个参数是0,作为初始起点,第二个参数应该是javascript定义的"document.body.scrollHeight",因为它可以帮助滚动器到达页面的终点。如果我们运行该代码,我们将看到这样的页面。

我们可以从右侧看到,滚动条已经到达了页面的结束点。

所以,这就是我们现在在Selenium python中使用的自动向下滚动浏览器的方法的全部内容。