有效地使用Selenium滚动Web驱动程序

时间:2014-03-04 13:51:44

标签: python selenium python-3.x selenium-webdriver

我正在尝试搜索另一种正确滚动网页的方法。我需要滚动网页的原因是因为75%的数据是延迟加载的。这意味着在我滚动浏览之前它不会显示出来。我目前正在使用如下的慢速方法

browser.execute_script("window.scrollTo(0, document.body.scrollHeight/1.8);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/1.9);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/2.0);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/2.1);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/2.2);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/2.3);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/2.5);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/2.6);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/2.7);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/2.8);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/2.9);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/3.0);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/3.1);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/3.2);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/3.3);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/3.4);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/3.5);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/3.7);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/3.8);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/4);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/4.2);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/4.3);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/4.5);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/4.7);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/4.9);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/5.2);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/5.1);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/5.8);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/3.7);")
    time.sleep(0.2)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight/50);")
    time.sleep(0.2)

有关滚动的任何建议。提前谢谢。

1 个答案:

答案 0 :(得分:4)

使用Selenium滚动的一个不错的方法是向正文发送空格键:

background = browser.find_element_by_css_selector("body")
for i in range(5):
    background.send_keys(Keys.SPACE)
    time.sleep(1)

如果需要,您可以使用Shift +空格键的相似代码向上滚动。

顺便说一句,使用range这样循环特定次数可能是一个坏主意......最好循环直到某些特定元素可见,如果可能的话。这仅仅是为了举例。