コード例 #1
0
ファイル: Images.py プロジェクト: edumantovani/rpaframework
    def take_screenshot(self, filename=None, region=None) -> Image:
        """Take a screenshot of the current desktop.

        :param filename:    Save screenshot to filename
        :param region:      Region to crop screenshot to
        """

        region = to_region(region)

        with mss.mss() as sct:
            if region is not None:
                image = sct.grab(region.as_tuple())
            else:
                # mss uses the first monitor on the array as an
                # alias for a combined virtual monitor
                image = sct.grab(sct.monitors[0])

        if filename is not None:
            filename = Path(filename).with_suffix(".png")
            mss.tools.to_png(image.rgb, image.size, output=filename)
            notebook_image(filename)
            self.logger.info("Saved screenshot as '%s'", filename)

        # Convert raw mss screenshot to Pillow Image. Might be a bit slow
        pillow_image = Image.frombytes("RGB", image.size, image.bgra, "raw",
                                       "BGRX")
        return pillow_image
コード例 #2
0
ファイル: Browser.py プロジェクト: thup/rpaframework
    def screenshot(
        self,
        locator: str = None,
        filename: str = "",
    ) -> None:
        # pylint: disable=C0301, W0212
        """Capture page and/or element screenshot.

        ``locator`` if defined, take element screenshot, if not takes page screenshot

        ``filename`` filename for the screenshot, by default creates file `screenshot-timestamp-element/page.png`
        if set to `None` then file is not saved at all

        Example:
            | Screenshot | locator=//img[@alt="Google"] | filename=locator.png |             # element screenshot, defined filename
            | Screenshot | filename=page.png            |                                    # page screenshot, defined filename
            | Screenshot | filename=${NONE}             |                                    # page screenshot, NO file will be created
            | Screenshot |                              |                                    # page screenshot, default filename
            | Screenshot | locator=//img[@alt="Google"] |                                    # element screenshot, default filename
            | Screenshot | locator=//img[@alt="Google"] | filename=${CURDIR}/subdir/loc.png  # element screenshot, create dirs if not existing
        """  # noqa: E501
        screenshot_keywords = ScreenshotKeywords(self)
        default_filename_prefix = f"screenshot-{int(time.time())}"

        def __save_base64_screenshot_to_file(base64_string, filename):
            path = screenshot_keywords._get_screenshot_path(filename)
            screenshot_keywords._create_directory(path)
            with open(filename, "wb") as fh:
                fh.write(base64.b64decode(base64_string))
                self.logger.info("Screenshot saved to file: %s", filename)

        if locator:
            element = screenshot_keywords.find_element(locator)
            screenshot_keywords._embed_to_log_as_base64(
                element.screenshot_as_base64, 400)
            if filename is not None:
                filename = filename or os.path.join(
                    os.curdir, f"{default_filename_prefix}-element.png")
                __save_base64_screenshot_to_file(element.screenshot_as_base64,
                                                 filename)
                notebook.notebook_image(filename)
        else:
            screenshot_as_base64 = self.driver.get_screenshot_as_base64()
            screenshot_keywords._embed_to_log_as_base64(
                screenshot_as_base64, 800)
            if filename is not None:
                filename = filename or os.path.join(
                    os.curdir, f"{default_filename_prefix}-page.png")
                __save_base64_screenshot_to_file(screenshot_as_base64,
                                                 filename)
                notebook.notebook_image(filename)
コード例 #3
0
    def crop_image(self, image, region, filename=None, save_format="PNG"):
        """Take a screenshot of the current desktop.

        :param image:       Image to crop
        :param region:      Region to crop image to
        :param filename:    Save cropped image to filename
        :param save_format: File format to save the image in
        """
        region = to_region(region)
        image = to_image(image)

        image = image.crop(region.as_tuple())
        image.load()

        if filename:
            image.save(filename, save_format)
            notebook_image(filename)
コード例 #4
0
ファイル: Images.py プロジェクト: edumantovani/rpaframework
    def crop_image(self, image, region, filename=None):
        """Crop an existing image.

        :param image:       Image to crop
        :param region:      Region to crop image to
        :param filename:    Save cropped image to filename
        """
        region = to_region(region)
        image = to_image(image)

        image = image.crop(region.as_tuple())
        image.load()

        if filename:
            # Suffix isn't created automatically here
            image.save(Path(filename).with_suffix(".png"), "PNG")
            notebook_image(filename)
コード例 #5
0
    def take_screenshot(self, filename=None, region=None, save_format="PNG"):
        """Take a screenshot of the current desktop.

        :param filename:    Save screenshot to filename
        :param region:      Region to crop screenshot to
        :param save_format: File format to save the screenshot in
        """
        region = to_region(region)

        if region is not None:
            image = ImageGrab.grab(bbox=region.as_tuple())
        else:
            image = ImageGrab.grab()

        if filename is not None:
            filename = Path(filename).with_suffix(f".{save_format.lower()}")
            image.save(filename, save_format)
            notebook_image(filename)
            self.logger.info("Saved screenshot as '%s'", filename)

        return image