代码之家  ›  专栏  ›  技术社区  ›  micharaze Charley Cui

使用Selenium+Python滚动到元素后的元素屏幕截图?

  •  3
  • micharaze Charley Cui  · 技术社区  · 6 年前

    我想从Chrome网站上截取一个元素的屏幕截图。在截图之前,我向下滚动到包含以下代码的元素:

    element = self.browser.find_element_by_class_name("class_name")
    print(game_table.location)
    self.browser.execute_script("arguments[0].scrollIntoView();", element)
    

    在此之后,我不想在PIL的帮助下截取此元素的屏幕截图:

    location = element.location
    size = element.size
    img = browser.get_screenshot_as_png()
    img = Image.open(io.BytesIO(img))
    
    left = location['x']
    top = location['y']
    right = left + size['width']
    bottom = top + size['height']
    
    cropBox = (left, top, right, bottom)
    
    img = img.crop(cropBox)
    img.save('screenshot.png')
    

    element.location 给我元素的坐标。但屏幕截图将仅从视图中获取,因此我需要从y位置减去向下滚动的高度,以获得元素在视图中的位置。

    如何获得向下滚动的高度?还是有更好的解决方案?

    2 回复  |  直到 6 年前
        1
  •  2
  •   micharaze Charley Cui    6 年前

    幸亏 Florent B.'s comment!

    我换了线 location = element.location

    location = element.location_once_scrolled_into_view
    
        2
  •  1
  •   Gaurang Shah    6 年前

    我想你可以用 getBoundingClientRect javascript函数,但不确定。 您可以在此处找到详细文档。

    https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect