当前位置: 首页 > 知识库问答 >
问题:

使用selenium python网页驱动滚动网页

欧阳永宁
2023-03-14

我正在抓取这个网页的用户名,在滚动后加载用户

指向页面的Url:“http://www.quora.com/Kevin-Rose/followers"

我知道页面上的用户数(本例中的用户数为43812),如何滚动页面直到加载所有用户?我在互联网上搜索过同样的代码,在任何地方我都能找到几乎相同的代码行:

driver.execute_script("window.scroll至(0)")

如何确定垂直位置以确保加载所有用户?有没有其他方法可以实现同样的效果而不需要实际滚动?

   from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import urllib

driver = webdriver.Firefox()
driver.get('http://www.quora.com/')
time.sleep(10)

wait = WebDriverWait(driver, 10)

form = driver.find_element_by_class_name('regular_login')
time.sleep(10)
#add explicit wait

username = form.find_element_by_name('email')
time.sleep(10)
#add explicit wait

username.send_keys('abc@gmail.com')
time.sleep(30)
#add explicit wait

password = form.find_element_by_name('password')
time.sleep(30)
#add explicit wait

password.send_keys('def')
#add explicit wait

password.send_keys(Keys.RETURN)
time.sleep(30)

#search = driver.find_element_by_name('search_input')
search = wait.until(EC.presence_of_element_located((By.XPATH, "//form[@name='search_form']//input[@name='search_input']")))

search.clear()
search.send_keys('Kevin Rose')
search.send_keys(Keys.RETURN)

link = wait.until(EC.presence_of_element_located((By.LINK_TEXT, "Kevin Rose")))
link.click()
#Wait till the element is loaded (Asynchronusly loaded webpage)

handle = driver.window_handles
driver.switch_to.window(handle[1])
#switch to new window 

element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Followers")))
element.click()

共有1个答案

赫连华皓
2023-03-14

因为在加载最后一个followers bucket之后没有什么特别的显示,所以我将依赖这样一个事实:您知道用户有多少followers,并且您知道在每个向下滚动时加载了多少followers(我已经检查了-每个滚动18个)。因此,您可以计算需要向下滚动页面多少次。

以下是实现(我使用了一个只有53名追随者的不同用户来演示解决方案):

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

followers_per_page = 18

driver = webdriver.Chrome()  # webdriver.Firefox() in your case
driver.get("http://www.quora.com/Andrew-Delikat/followers")

# get the followers count
element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.XPATH, '//li[contains(@class, "FollowersNavItem")]//span[@class="profile_count"]')))
followers_count = int(element.text.replace(',', ''))
print followers_count

# scroll down the page iteratively with a delay
for _ in xrange(0, followers_count/followers_per_page + 1):
    driver.execute_script("window.scrollTo(0, 10000);")
    time.sleep(2)

此外,您可能需要根据循环变量增加这个10000Y坐标值,以防有大量追随者。

 类似资料:
  • 问题内容: 我正在抓取此网页中的用户名,该用户名在滚动后会加载用户 转到页面的网址:“ http://www.quora.com/Kevin- Rose/followers ” 我知道页面上的用户数量(在这种情况下,编号为43812)如何滚动页面,直到所有用户加载完毕?我在互联网上搜索了相同的代码,到处都可以找到几乎相同的代码行: driver.execute_script(“ window.sc

  • 在本节中,您将学习如何向下或向上滚动以显示网页上显示的其他信息。 让我们来看看下面一个测试用例,它将自动化以下场景: 调用Firefox浏览器 打开URL - www.yiibai.com 向下滚动网页以显示其它页面部分 我们将逐步创建测试用例,以便您完全了解如何使用JavaScript的“scrollBy”方法滚动网页。 第1步 - 启动Eclipse IDE并打开在本教程前几节中创建的测试套件

  • 问题内容: 我添加到我的环境变量 我在这里下载的http://selenium- release.storage.googleapis.com/index.html?path=2.46/ Python脚本: 输出: 我期望jar定义了所有内容,为什么找不到驱动程序类? 问题答案: 根据您的问题,您似乎正在使用适用于Opera 12及更高版本的旧驱动程序。假设您尝试使用最新版本的Opera,则需要使

  • 本文向大家介绍js网页滚动条滚动事件实例分析,包括了js网页滚动条滚动事件实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js网页滚动条滚动事件用法。分享给大家供大家参考。具体分析如下: 在做js返回顶部的效果时,要监听网页滚动条滚动事件,这个事件就是:window.onscroll。当onscroll事件发生时,用js获得页面的scrollTop值,判断scrollTop为一个设

  • 问题内容: 我目前正在使用Selenium Webdriver通过Facebook用户朋友页面进行解析,并从AJAX脚本中提取所有ID。但是我需要向下滚动才能得到所有的朋友。如何在Selenium中向下滚动。我正在使用python。 问题答案: 你可以使用 其中Y是高度(在全高清显示器上为1080)。 你也可以使用 滚动到页面底部。 如果你想滚动到无限加载的页面,例如社交网络页面,facebook

  • 我目前正在使用selenium webdriver通过facebook用户朋友页面进行解析,并从AJAX脚本中提取所有ID。但我需要向下滚动才能找到所有的朋友。我如何在硒向下滚动。我正在使用Python。