【问题标题】:phantomjs doesn't scroll down using window.scollTophantomjs 不使用 window.scollTo 向下滚动
【发布时间】:2016-04-13 22:41:15
【问题描述】:

所以我使用 selenium/phantomjs 中最基本的方式来执行向下滚动操作。 它似乎在代码中都很好,但不起作用。 我尝试打印“document.body.scrollHeight”,每次滚动后它都保持不变。 (例如高度保持在 10532)

我正在浏览某个人的推特页面,例如“twitter.com/XXXXX”

谁能给我提示一下我可以在这里做什么?

我使用的 webdriver 是 phantomjs

代码如下:

def getfullpage(url):
    print "getting fullpage..."
    driver.get(url)
    time.sleep(2)
    reloads = 3000
    pause = 0
    driver.save_screenshot("what'shappening.jpg")
    for times in range(reloads):
        driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
        time.sleep(pause)
        newheight = driver.execute_script("return document.body.scrollHeight")
        print newheight
    page = driver.page_source.encode("utf-8","ignore")
    return page

【问题讨论】:

  • 你检查过 phantomjs 是否有滚动条吗?当然,无头浏览器不会滚动......

标签: javascript python selenium web-scraping phantomjs


【解决方案1】:

我会等待滚动高度增加并改用document.documentElement.scrollHeight

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.PhantomJS()
wait = WebDriverWait(driver, 20)

driver.get("https://twitter.com/barackobama")
time.sleep(1)

# scroll the height
height = driver.execute_script("var h=document.documentElement.scrollHeight; window.scrollTo(0, h); return h;")

# wait for the scroll height to increase
wait.until(lambda drv: drv.execute_script("return document.documentElement.scrollHeight;") > height)

# display the final scroll height
print driver.execute_script("return document.documentElement.scrollHeight;")

【讨论】:

  • 感谢您的帮助!我尝试过这种方式但没有得到更好的结果,我尝试将等待时间提高到 60 秒,但它仍然会引发超时异常。我查看了屏幕截图,一切都很好,它正在查看正确的页面。它所要做的就是向下滚动,但它没有。我相信我的网络连接很好。很奇怪的问题。
  • 它对我来说很好,虽然这个例子中的页面是不可滚动的。我用更长的页面更新了 URL。
猜你喜欢
  • 2017-11-06
  • 2013-05-09
  • 2015-08-08
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
相关资源
最近更新 更多