使用phatomJS和selenium滚动浏览网站

2024-03-28 17:09:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在一个网页上滚动(例如twitter),一个网页抓取新的元素出现在一个网站上的进展。我尝试使用python 3.xselenium和{}来实现这一点。这是我的密码

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和{}是相同的。但是如果我将webdriverPhantomJS改为Firefox,同样的代码可以正常工作。为什么?


Tags: toimportbrowser网页pngsaveseleniumscript
1条回答
网友
1楼 · 发布于 2024-03-28 17:09:32

当我试图解决类似问题时,我可以在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

它将滚动到当前的“底部”,等待,查看页面是否加载得更多,如果没有加载,则会跳转(假设所有内容都加载,如果高度匹配)

在我的原始代码中,我有一个“最大”值,我检查了匹配高度,因为我只对前10页左右的“页面”感兴趣。如果还有更多的话,我想让它停止装载,跳过它们。

另外,这是我用作example的答案

相关问题 更多 >