python - 使用 phatomJS 和 selenium 滚动浏览网站

标签 python selenium phantomjs

我需要滚动网页(例如 Twitter),并对网站上出现的新元素进行网络抓取。我尝试使用 python 3.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.pngscreen3.png 相同。但是,如果我将 webdriverPhantomJS 更改为 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

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

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

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

关于python - 使用 phatomJS 和 selenium 滚动浏览网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40369932/

相关文章:

Ruby Selenium Webdriver - 配置 Sauce Labs 通过/失败

java - 如何为 Selenium 测试创建兼容的 JAR 文件?

javascript - 函数调用一次,但触发多次

python - 如何使用机器人与所有人进行 DM - discord.py

python - Numpy 奇怪的行为 - 健全性检查。这怎么可能?

python - 将 datetime.datetime 对象写入文件

css - 在 Selenium 中查找两个跨度之间的元素

javascript - 更改事件中的全局变量无法正常工作

javascript - 通过在 phantomjs 上运行 highcharts-convert.js 生成图像

Python战舰随机数生成器