Подушка на дисплеях Mac Book Pro Retina - PullRequest
0 голосов
/ 21 октября 2018

В настоящее время я пытаюсь сделать скриншот определенного веб-элемента с помощью Selenium и Pillow на Python 2.7.Код, который у меня есть, кажется, может сделать снимок экрана, а затем обрезать изображение, но на самом деле он не обрезается в точном месте элемента.После исследования я обнаружил, что это может происходить из-за dpi, используемого дисплеем Mac Book Pro, но я не нашел обходного пути для этого.

Что может быть лучшим способом решения этой «проблемы»с дисплеем сетчатки и PIL?

Это код, который я использую:

try:
    #Wait until finishing loading
    waitElement = WebDriverWait(driver,60).until(
           EC.presence_of_element_located((By.XPATH, "//*[@id='someElement']/span/input[2]"))
    )
    try:
            #Go to trends report
            driver.get("https://somewebsite.com/trends")
            waitElement = WebDriverWait(driver,60).until(
            EC.presence_of_element_located((By.ID, "Totals"))
            )

            try:

                    summary = driver.find_element_by_id("Totals")
                    driver.save_screenshot("sc.png")
                    location = summary.location
                    size = summary.size
                    x = location['x']
                    y = location['y']
                    w = size['width']
                    h = size['height']
                    width = x + w
                    height = y + h
                    im = Image.open('sc.png')
                    im = im.crop((int(x), int(y), int(width), int(height)))
                    im.save('summary.png')

            except NoSuchElementException:
                    print("Something")
    except NoSuchElementException:
            print("Something")
finally:
       driver.close()

1 Ответ

0 голосов
/ 22 октября 2018

Я столкнулся с этим (проблема с скриншотом в случае отображения ratina на Mac) и решил ее с помощью

Фрагмента, который я использовал для этого

// в основном, здесь я использую 'devicePixelRatio'рассчитать правильную ширину / высоту

    WebElement ele = findElement(By.xpath(webElementXpath));
    Point point = ele.getLocation();
    int devicePixelRatio = Integer.parseInt(returnExecuteJavaScript("return window.devicePixelRatio"));
    int eleWidth = ele.getSize().getWidth() * devicePixelRatio;
    int eleHeight = ele.getSize().getHeight() * devicePixelRatio;
    // ....... for cropping stuff , you can use your own code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...