LINUX.ORG.RU

Копирование HTML с картинками

 , , ,


0

1

Делаю на веб-странице (для определённости — в firefox) Ctrl-A, переключаюсь в LibreOffice Writer, кликаю средней кнопкой мыши — вставляется красиво отформатированный текст и картинки. Можно даже сохранить как HTML с картинками.

А как сделать то же автоматически, не задействуя LibreOffice? В идеале — скриптом, который автоматически определяет, что буфер изменился, и тут же сохраняет содержимое.

Пробовал читать буфер скриптами на питоне средствами Qt6 и GTK4. Большая часть нагугленных скриптов устарели и или не работают, или крэшат интерпретатор. Методом тыка сумел найти отображение в виде HTML или текста для Qt6. Но не primary selection, а clipboard.

from PyQt6.QtWidgets import QAbstractItemView, QApplication, QTableView
from PyQt6.QtGui import QStandardItem, QStandardItemModel
app = QApplication([])
c = app.clipboard()

Далее c.mimeData().formats() выдаёт тот же список, что и xclip -t TARGETS, HTML можно получить c.mimeData().html(), текст — c.mimeData().text() или c.text(). Как я понял из хэлпа, c.Mode(1) должно переключить на selection вместо clipboard, но это не происходит.

Как в PyQt6 обращаться к primary selection?
Как в PyQt6 детектировать изменение primary selection?
Как LibreOffice извлекает картинки из скопированного с веб-страницы? — Ответ: похоже, парсит HTML и скачивает содержимое <img ...>. В таком случае, удалю простыни исследования xclip. чтобы не отвлекали.

★★★★★

Последнее исправление: question4 (всего исправлений: 3)
Ответ на: комментарий от static_lab

Почему «естественно»? Там нет тегов img? А на исходной странице?

То есть LibreOffice парсит теги img? И если сайт не отдаёт их без нужных кук, не сможет вставить?

Где бы это проверить?..

UPD: Проверил. Яндекс и Gmail отдают приватные и коммерчески ценные файлы всем желающим, если знаешь URL. А вот с сайта, доступного только через прокси, LO вставить рисунки не смог.

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 4)

Как в PyQt6 обращаться к primary selection?

https://doc.qt.io/qt-6/qclipboard.html#supportsSelection https://doc.qt.io/qt-6/qclipboard.html#Mode-enum

if (clipboard->supportsSelection() && clipboard->hasHtml()) {
        QString html = clipboard->html(QClipboard::Selection);
}

Как в PyQt6 детектировать изменение primary selection?

https://doc.qt.io/qt-6/qclipboard.html#notes-for-x11-users

X11 also has the concept of ownership; if you change the selection within a window, X11 will only notify the owner and the previous owner of the change, i.e. it will not notify all applications that the selection or clipboard data changed.

static_lab ★★★★★
()