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

使用phatomJS和selenium滚动浏览网站

葛海阳
2023-03-14

我需要在一个网页上滚动(例如twitter),并制作一个网站上出现的新元素的网络抓取。我试着用python 3. xseleniumPhantomJS来做这个。这是我的密码

import time
from selenium import webdriver
from bs4 import BeautifulSoup

user = 'ciroylospersas'
# Start web browser
#browser = webdriver.Firefox()
browser = webdriver.PhantomJS()
browser.set_window_size(1024, 768)
browser.get("https://twitter.com/")

# Fill username in login
element = browser.find_element_by_id("signin-email")
element.clear()
element.send_keys('your twitter user')
# Fill password in login
element = browser.find_element_by_id("signin-password")
element.clear()
element.send_keys('your twitter pass')

browser.save_screenshot('screen.png') # save a screenshot to disk

# Summit the login
element.submit()
time.sleep(5

browser.save_screenshot('screen1.png') # save a screenshot to disk
# Move to the following url
browser.get("https://twitter.com/" + user + "/following")
browser.save_screenshot('screen2.png') # save a screenshot to disk

scroll_script = "var h = document.body.scrollHeight; window.scrollTo(0, h); return h;"
newHeight = browser.execute_script(scroll_script)
print(newHeight)
browser.save_screenshot('screen3.png') # save a screenshot to disk

问题是我无法滚动到底部。屏幕2。png屏幕3。png是相同的。但是如果我将webdriverPhantomJS更改为Firefox,同样的代码可以正常工作。为什么?

共有1个答案

怀晋
2023-03-14

在尝试解决类似问题时,我能够在phantomJS中实现这一点:

check_height = driver.execute_script("return document.body.scrollHeight;")
while True:
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(5)
    height = driver.execute_script("return document.body.scrollHeight;")
    if height == check_height:
        break
    check_height = height

它将滚动到当前底部,等待,看看页面是否加载更多,如果没有,则退出(假设所有内容都加载了,如果高度匹配。)

在我的原始代码中,我在匹配高度旁边检查了一个“max”值,因为我只对前10页左右的“页面”感兴趣。如果还有更多,我希望它停止加载并跳过它们。

还有,这就是我作为例子的答案

 类似资料:
  • 问题内容: 是否可以使用selenium浏览给定URL(网站)的所有URI ? 我的目标是使用具有给定选择的URL的selenium来启动firefox浏览器(由于有了此网站,我知道该怎么做),然后让firefox浏览URL(该网站)拥有的所有页面。我感谢有关如何在Python中进行操作的任何提示/帮助。 问题答案: 您可以在类中使用递归方法,例如下面给出的方法。 希望这对您有所帮助。

  • 我正在抓取这个网页的用户名,在滚动后加载用户 指向页面的Url:“http://www.quora.com/Kevin-Rose/followers" 我知道页面上的用户数(本例中的用户数为43812),如何滚动页面直到加载所有用户?我在互联网上搜索过同样的代码,在任何地方我都能找到几乎相同的代码行: driver.execute_script("window.scroll至(0)") 如何确定垂

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

  • 有人能帮我吗? 提前谢了。

  • 我想运行和控制一个浏览器窗口从一个web应用程序,以自动化的一些事情(如帐户创建等)在另一个网站。 所以我的问题是,有没有一种方法可以直接从浏览器使用selenium来实现它,在这种情况下如何实现它? 我知道有selenium-webdriver for JS,但在常见的用例中,我们将它与Node.JS一起使用。 WebDriver介绍建议这是可能的: 它的主要目的是允许web作者编写测试,使用户

  • 所以,我在寻找一种不用Selenium就可以刮动态网站的方法。任何建议都有帮助。 谢了!