将iframe滚动500像素或3000像素会得到相同的结果

问题描述 投票:0回答:1

我一直在尝试向下滚动iframe来截取屏幕截图,并以为我找到了解决方案,但遇到一个问题,滚动500像素或3000像素会得到相同的结果(以及滚动100像素,但滚动1表示我在页面顶部,所以看上去有点正常)

该解决方案取自this question,而我当前的代码如下:(添加了屏幕截图代码,以防万一,尽管它实际上并不位于同一定义中。

def scroll_iframe(self):
    iframe = self.driver.find_element_by_id('js-map-iframe')
    self.driver.switch_to.frame(iframe)
    self.driver.execute_script("window.scrollTo(0,3000);")
    time.sleep(5)
    self.driver.switch_to.default_content()
    time.sleep(3)
    print('iframe scroll_1')
    self.driver.set_window_size(1920, 4500)
    self.driver.save_screenshot("screenshot.png")
    print('screenshot taken')
    self.driver.quit()

我不太确定源代码的哪一部分会有用,但是我使用了find_element_by_id,因为代码看起来像这样:

<div class="pt-map-iframe-parent" style="width: 375px; height: 31804px;">
                <iframe src="long-test" frameborder="0" id="js-map-iframe" style="width: 375px; height: 31804px; transform: scale(1);"></iframe>

iframe本身的高度为31804,因此iframe的高度应该不是问题。关于如何解决此问题的任何想法,以及为什么设置window.scrollTo(0,500)和(0,3000)都会得到相同的结果?

python selenium iframe scroll
1个回答
0
投票
Window.scroll()

Window.scroll()方法将窗口滚动到文档中的特定位置。因此,调用以下两种方法之一:

  • 向下滚动Window.scrollTo()以截取屏幕截图无效。


    解决方案

    一种有效的方法是如下对Window.scrollTo()元素调用

    scrollIntoView()


    参考

    您可以在以下位置找到几个相关的讨论:

      scrollIntoView()
  • <iframe>
  • © www.soinside.com 2019 - 2024. All rights reserved.