高效使用Selenium进行网页滚动驱动

2 投票
1 回答
864 浏览
提问于 2025-04-17 20:46

我正在寻找一种更好的方法来滚动网页。之所以需要滚动网页,是因为有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 个回答

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循环特定次数可能不是个好主意……最好是循环直到某个特定的元素可见,如果可能的话。这只是为了举个例子。

撰写回答