Python 使用phatomJS和selenium滚动浏览网站

Python 使用phatomJS和selenium滚动浏览网站,python,selenium,phantomjs,Python,Selenium,Phantomjs,我需要在一个网页(例如twitter)上滚动,对网站上出现的新元素进行网页抓取。我尝试使用python3.x、selenium和PhantomJS实现这一点。这是我的密码 import time from selenium import webdriver from bs4 import BeautifulSoup user = 'ciroylospersas' # Start web browser #browser = webdriver.Firefox() browser = webdr

我需要在一个网页(例如twitter)上滚动,对网站上出现的新元素进行网页抓取。我尝试使用
python3.x
selenium
PhantomJS
实现这一点。这是我的密码

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

问题是我无法滚动到底部。
screen2.png
screen3.png
是相同的。但是如果我将
webdriver
PhantomJS
更改为
Firefox
,同样的代码可以正常工作。为什么?

在尝试解决类似问题时,我能够在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页左右的“页面”感兴趣。如果还有更多,我希望它停止加载并跳过它们


另外,这也是我用作

的答案。您可以在
滚动脚本之后添加
time.sleep()
?可能需要在滚动后进行渲染。我尝试使用
时间。sleep(5)
,但不起作用。你能将高度硬编码到
10000
并查看它是否滚动吗?设置
scroll\u script
window。滚动到(0,1000)
和其他内容。如果我使用Firefox作为驱动程序,请工作。但是如果我使用PhantonJS,它就不起作用了。我需要使用PhantonJS,因为我要在没有图形界面的服务器上运行这个脚本。这是一个很好的解决方案。应该在某个时候更新,尽管3条execute语句中有两条在末尾缺少分号。如果您来到这里,对javascript了解不多,那么您可能需要一段时间才能自己弄清楚。