为什么我无法向下滚动页面?

时间:2014-03-09 20:20:46

标签: javascript python selenium

我正在尝试使用selenium和python并使用execute_script命令向下滚动页面。但是,当我执行我的代码时,我不会向下滚动页面底部。以下是我的代码:

def create_browser(first_page=None):
    print "Starting"
    browser = webdriver.Firefox()
    if first_page:
        browser.get(first_page)
    print "Done."
    return browser

browser = create_browser()
print 'loaded'
browser.get('https://chrome.google.com/webstore/detail/ie-tab/hehijbfgiekmjfkfjpbkbammjbdenadd/reviews')
time.sleep(4)
elem = WebDriverWait(browser, 30).until(EC.presence_of_all_elements_located((By.XPATH, '//a[@ga:type="NextLink"]')))
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
print "Scrolled."

我得到了“滚动”。打印在我的控制台上,但页面没有向下滚动。我看过一些页面说browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")会将我滚动到页面底部。但是,在我的情况下,这不会发生。这是否与使用AJAX的网页有关?或者是不同的东西?更重要的是,如何向下滚动页面?我想向下滚动页面并单击“下一步”,以便我可以看到下一个评论,我想继续这样做,直到评论结束。我该怎么做?

4 个答案:

答案 0 :(得分:0)

似乎在您正在访问的网页上,滚动条实际上​​并不是您所在窗口的滚动条。您可能意味着滚动评论框或叠加层,而不是正文。因为滚动身体没有(可见)效果。

因此,您必须找到要滚动的元素,然后滚动该元素。

例如,评论框的选择器(可以滚动)是.webstore-te-qc-rb-Lg。然后你的代码看起来像这样:

var a = document.getElementsByClassName("webstore-te-qc-rb-Lg");
// assuming a.length == 1
a[0].scrollTop = a[0].scrollHeight;

这对我有用,但这完全取决于你想要达到的元素以及scollbar的位置。您可以使用firefox内置的开发工具找到它是哪一个:Inspector>用鼠标选择元素,找到包裹滚动条和相关内容的元素。

希望它有所帮助。

答案 1 :(得分:0)

向下滚动的另一种方法是使用页面的body标记获取元素,并在该元素上发送:space:down个键 -

body = driver.find_element(:tag_name, 'body')
body.send_keys :space

body.send_keys :down

您可以重复向下滚动,直到满足您的条件。

答案 2 :(得分:0)

使用此代码

JavascriptExecutor jse =(JavascriptExecutor)浏览器;         jse.executeScript(" window.scrollBy(0,document.body.scrollHeight || document.documentElement.scrollHeight)","");

取代你的: browser.execute_script(" window.scrollTo(0,document.body.scrollHeight);")

答案 3 :(得分:0)

我必须添加一点延迟才能使其正常运行。不要问我为什么... 1毫秒可说的不是太多:

<body onload="setTimeout(function(){window.scrollBy(0,document.body.scrollHeight)}, 1);>