当前位置: 代码迷 >> python >> 为什么我无法向下滚动页面?
  详细解决方案

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

热度:97   发布时间:2023-06-16 14:16:05.0

我正在尝试使用硒和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的网页有关? 还是有所不同? 更重要的是,我如何向下滚动页面? 我想向下滚动页面,然后单击“下一步”,这样我才能看到下一条评论,并且我希望一直这样做直到评论结束。 我怎么做?

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

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

例如,注释框(可以滚动)的选择器是.webstore-te-qc-rb-Lg 然后您的代码将如下所示:

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

那对我来说是成功的,但是这完全取决于您想要达到的元素以及滚动条的位置。 您可以使用firefox内置的开发工具找到它之一:Inspector>用鼠标选择元素,然后找到一个包装滚动条和相关内容的工具。

希望能帮助到你。

向下滚动的另一种方法是获取带有body标签的元素,并在该元素上发送:space:down键-

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

要么

body.send_keys :down

您可以重复向下滚动操作,直到满足条件为止。

使用此代码

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

代替您的浏览器:browser.execute_script(“ window.scrollTo(0,document.body.scrollHeight);”)

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

<body onload="setTimeout(function(){window.scrollBy(0,document.body.scrollHeight)}, 1);>
  相关解决方案