Как считывать цвет конкретных пиксели с сайта,Python

Есть сайт, на котором расположены прямоугольники.

Нужно узнать их цвет и вывести в консоль как RGB.

Пример сайта: введите сюда описание изображения

Пример того , что должно получиться в консоли (оформление не имеет значения) :

введите сюда описание изображения


Ответы (1 шт):

Автор решения: S. Nick

Так как мне нравится все делать на PyQt5, то я вам и продемонстрирую как бы я это сделал.

Если вы еще не устанонови PyQt5, то я очень рекомендую.

PyQt — реализация фреймворка Qt для языка Python.

pip install PyQt5
pip install pyqt5-tools

Теперь запускаем python main.py, нажимаем на пипетку и водим по экрану, на консоль получаем результат.


main.py

from PyQt5.QtCore import QByteArray, Qt, QRectF, QLineF, pyqtSignal, QTimer
from PyQt5.QtGui import (QFontDatabase, QFont, QPainter, 
                         QPainterPath, QColor, QPen)
from PyQt5.QtWidgets import (QPushButton, QApplication, QWidget,
                             QDialog, QVBoxLayout)


FONT = b'AAEAAAALAIAAAwAwR1NVQrD+s+0AAAE4AAAAQk9TLzI9eEj0AAABfAAAAFZjbWFw6Cq4sAAAAdwAAAFwZ2x5ZhP0dwUAAANUAAAA8GhlYWQU7DSZAAAA4AAAADZoaGVhB94DgwAAALwAAAAkaG10eAgAAAAAAAHUAAAACGxvY2EAeAAAAAADTAAAAAZtYXhwAQ8AWAAAARgAAAAgbmFtZT5U/n0AAAREAAACbXBvc3Ta6Gh9AAAGtAAAADAAAQAAA4D/gABcBAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAIAAQAAAAEAAAn6lORfDzz1AAsEAAAAAADY5nhOAAAAANjmeE4AAP/ABAADQAAAAAgAAgAAAAAAAAABAAAAAgBMAAMAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKAB4ALAABREZMVAAIAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAAAAQQAAZAABQAIAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA5wLnAgOA/4AAXAOAAIAAAAABAAAAAAAABAAAAAQAAAAAAAAFAAAAAwAAACwAAAAEAAABVAABAAAAAABOAAMAAQAAACwAAwAKAAABVAAEACIAAAAEAAQAAQAA5wL//wAA5wL//wAAAAEABAAAAAEAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAABwAAAAAAAAAAQAA5wIAAOcCAAAAAQAAAAAAeAAAAAMAAP/AA8EDQAApAEIASwAAAS4BIgYPAScmDgEfAQEOARcHBhQWMzEyPwEWNjcBFx4BPgE1NC8BNzY0AQ4BJyYPAgYjLgE/BTQnJjY3ARc3Byc3NjIXFhQDixlCSEEakjwOIwoNW/7DFxQFMhcvISAYMSE+GAE9WwcTEwoJPZI1/YIOJBMSDwM/BQUKBwc/AwMCAQIGCg0BPWTfkqKTIl0iIgMLGhsbGpI9DAkkDVz+xBg9ITIYQS8XMgUTGAE9XAcDBxALDQo8kjiP/YkNCgUHCwM/BAERBz8EBQUGCAcTJQ4BPGShkqKSISEjWwAAAAAAEgDeAAEAAAAAAAAAFQAAAAEAAAAAAAEACAAVAAEAAAAAAAIABwAdAAEAAAAAAAMACAAkAAEAAAAAAAQACAAsAAEAAAAAAAUACwA0AAEAAAAAAAYACAA/AAEAAAAAAAoAKwBHAAEAAAAAAAsAEwByAAMAAQQJAAAAKgCFAAMAAQQJAAEAEACvAAMAAQQJAAIADgC/AAMAAQQJAAMAEADNAAMAAQQJAAQAEADdAAMAAQQJAAUAFgDtAAMAAQQJAAYAEAEDAAMAAQQJAAoAVgETAAMAAQQJAAsAJgFpCkNyZWF0ZWQgYnkgaWNvbmZvbnQKaWNvbmZvbnRSZWd1bGFyaWNvbmZvbnRpY29uZm9udFZlcnNpb24gMS4waWNvbmZvbnRHZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQAKAEMAcgBlAGEAdABlAGQAIABiAHkAIABpAGMAbwBuAGYAbwBuAHQACgBpAGMAbwBuAGYAbwBuAHQAUgBlAGcAdQBsAGEAcgBpAGMAbwBuAGYAbwBuAHQAaQBjAG8AbgBmAG8AbgB0AFYAZQByAHMAaQBvAG4AIAAxAC4AMABpAGMAbwBuAGYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgECAQMABnhpZ3VhbgAA'


class ScaleWindow(QWidget):
    # Увеличенное окно просмотра
    def __init__(self, *args, **kwargs):
        super(ScaleWindow, self).__init__(*args, **kwargs)
        self.setWindowFlags(Qt.Tool | 
                            Qt.FramelessWindowHint |
                            Qt.WindowStaysOnTopHint)
        self.setAttribute(Qt.WA_TranslucentBackground, True)
        self.resize(1, 1)
        self.move(1, 1)
        self._image = None

    def updateImage(self, pos, image):
        self._image = image
        self.resize(image.size())
        self.move(pos.x() + 10, pos.y() + 10)
        self.show()
        self.update()

    def paintEvent(self, event):
        super(ScaleWindow, self).paintEvent(event)
        if self._image:
            painter = QPainter(self)
            painter.setRenderHint(QPainter.Antialiasing, True)
            path = QPainterPath()
            radius = min(self.width(), self.height()) / 2
            path.addRoundedRect(QRectF(self.rect()), radius, radius)
            painter.setClipPath(path)
            # изображение
            painter.drawImage(self.rect(), self._image)

            # Средний синий перекрестие
            painter.setPen(QPen(QColor(0, 174, 255), 3))
            hw = self.width() / 2
            hh = self.height() / 2
            painter.drawLines(
                QLineF(hw, 0, hw, self.height()),
                QLineF(0, hh, self.width(), hh)
            )

            # рамка
            painter.setPen(QPen(Qt.white, 3))
            painter.drawRoundedRect(self.rect(), radius, radius)


class CColorStraw(QPushButton):

    colorChanged = pyqtSignal(QColor)

    def __init__(self, parent):
        super(CColorStraw, self).__init__(parent)

        # Загрузка шрифтов в библиотеку шрифтов
        QFontDatabase.addApplicationFontFromData(QByteArray.fromBase64(FONT))
        font = self.font() or QFont()
        font.setFamily('iconfont')
        self.setFont(font)
        self.setText('')
        self.setToolTip('Нарисуйте цвет экрана')
        self._scaleWindow = ScaleWindow()
        # Не забудьте сначала показать его, а затем спрятать. 
        self._scaleWindow.show()
        self._scaleWindow.hide()

    def closeEvent(self, event):
        self._scaleWindow.close()
        super(CColorStraw, self).closeEvent(event)

    def mousePressEvent(self, event):
        super(CColorStraw, self).mousePressEvent(event)
        # Установите стиль мыши на крест
        self.setCursor(Qt.CrossCursor)

    def mouseReleaseEvent(self, event):
        super(CColorStraw, self).mouseReleaseEvent(event)
        # Установите стиль мыши на нормальный
        self.setCursor(Qt.ArrowCursor)
        self._scaleWindow.hide()

    def mouseMoveEvent(self, event):
        super(CColorStraw, self).mouseMoveEvent(event)
        # Получить положение мыши на экране
        pos = event.globalPos()
        # Возьмите часть увеличенного изображения
        image = QApplication.primaryScreen().grabWindow(
            int(QApplication.desktop().winId()),
            pos.x() - 6, pos.y() - 6, 13, 13).toImage()
        color = image.pixelColor(6, 6)
        print(f'RGB color -> ({color.red()}, {color.green()}, {color.blue()})')
        if color.isValid():
            self.colorChanged.emit(color)
        self._scaleWindow.updateImage(pos, image.scaled(130, 130))


if __name__ == '__main__':
    import sys
    import cgitb
    sys.excepthook = cgitb.enable(1, None, 5, '')

    app = QApplication(sys.argv)
    w = QDialog()
    layout = QVBoxLayout(w)
    view = CColorStraw(w)
    view.colorChanged.connect(lambda c: print(c.name()))
    layout.addWidget(view)
    w.exec_()
    QTimer.singleShot(200, app.quit)
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка