1

Тема: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Пацоны! Хлэп ми!
Какой функцией AutoHotKey_L можно скопипастить выделенный текст в броузере фиревокс?

Но не просто выделенный текст, а исходный код выделенного фрагмента.
Т.е. текст вместе с HTML-разметкой.

А?

Что я хочу-то?
Хочу чтобы было достаточно выделить на веб-страничке нужный мне фрагмент текста и в буфере оказывалась что-то типа

<span class="post">Пацоны! Хлэп ми! <br> Какой функцией AutoHotKey_L можно скопипастить выделенный текст в броузере фиревокс? <br> &nbsp;<br> Но не просто выделенный текст, а исходный код выделенного фрагмента. <br> Т.е. текст вместе с HTML-разметкой. <br> &nbsp;<br> А?<img src="http://i.ru-board.com/s/type.gif" border="0"></span>

Просто это всё мне нужно для того, что я получив исходный код выделенного кусок буду его парсить.

Пардон. Забыл важную деталь
Нужно чтобы не только исходный  HTML-код выделенного куска копировался в буфер, но и содержимое полей (например Search бокса в гугле и яндексе)

2

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Текст в буфер помещает само приложение, т.е. Фаерфокс в данном случае. Если он туда кладёт кроме простого текста также и HTML, тогда можно извлечь его из буфера. А если не кладёт, то хреново.

3

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Хреново. Т.е. придется ещё и в Firefox скрипт писать, который будет выцарапывать из страницы кроме текста ещё и HTML-разметку.
Selenium что-ли заюсать для этих целей? Или есть что получше для написания скриптов в Firefox

4

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Да. в Firefox есть мулька "показать исходный код выделенного фрагмента". Может быть её как-то заюсать в AHK-скрипте?

5

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Нет, я имел в виду, что когда вы что-то копируете на страничке, браузер помещает это что-то в буфер обмена сразу в нескольких форматах. Вот, к примеру, что туда кладёт IE:

---------------------------
Clipboard Formats
---------------------------
49161   DataObject
    1   CF_TEXT
   13   CF_UNICODETEXT
49405   HTML Format
49322   Rich Text Format
49706   msSourceUrl
49171   Ole Private Data
   16   CF_LOCALE
    7   CF_OEMTEXT
---------------------------
ОК   
---------------------------

Когда вы потом будете делать вставку в какое-то приложение, оно может выбрать нужный ему формат. Блокнот выберет CF_UNICODETEXT, к примеру.

Скопируйте что-нибудь в Фаерфоксе и попробуйте извлечь HTML вот таким кодом:


ClipGetData(html, "HTML Format", 1)
html := StrGet(&html, "utf-8")

MsgBox, % html

ClipGetData(ByRef Data, Format, IsText = 0)
{
    If Format is not Integer
    {
        Format := DllCall("RegisterClipboardFormat", "Str", Format)
        If (Format = 0) {
            MsgBox, Ошибка при регистрации формата.
            Return False
        }
    }
    Ret := DllCall("IsClipboardFormatAvailable", "UInt", Format)
    If (Ret = 0) {
        MsgBox, Формата нет в буфере обмена.
        Return False
    }
    Ret := DllCall("OpenClipboard", "Ptr", 0)
    If (Ret = 0) {
        MsgBox, Буфер обмена не открылся.
        Return False
    }
    hData := DllCall("GetClipboardData", "UInt", Format)
    If (hData = 0) {
        DllCall("CloseClipboard")
        MsgBox, Сбой при чтении из буфера обмена.
        Return False
    }
    cbData := DllCall("GlobalSize", "Ptr", hData)
    pData := DllCall("GlobalLock", "Ptr", hData)
    VarSetCapacity(Data, cbData)
    DllCall("RtlMoveMemory", "Ptr", &Data, "Ptr", pData, "Ptr", cbData)
    DllCall("GlobalUnlock", "Ptr", hData)
    DllCall("CloseClipboard")
    If IsText
        VarSetCapacity(Data, -1)
    Return True
}

6

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Попробовал. Пишет "формата нет в буфере обмена"

7 (изменено: YMP, 2014-04-21 10:27:03)

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Странно. Сейчас поставил Фаерфокс, код с ним работает. Вот какие форматы он кладёт в буфер обмена:


---------------------------
Clipboard Formats
---------------------------
49161   DataObject
49563   text/html
49405   HTML Format
49896   text/_moz_htmlcontext
49897   text/_moz_htmlinfo
   13   CF_UNICODETEXT
    1   CF_TEXT
49878   text/x-moz-url-priv
49171   Ole Private Data
   16   CF_LOCALE
    7   CF_OEMTEXT
---------------------------
ОК   
---------------------------

Может, вы выделили, но не скопировали?

8

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Просто у меня включено (в каком-то аддоне) автокопирование при выделение.
Видимо его оказалось недостаточно.
Сейчас попробовал нажать пункт "копировать" в контекстном меню. И таки да. Ваш скрипт работает.

Огромное Вам спасибо.

9

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

А содержимое полей поиска никак нельзя выдрать с помощью AutoHotKey?
В частности содержимое search box-а яндекса и гугла и приаттачить его к содержимому буфера обмена?

10

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Не знаю, я этим не озадачивался никогда.

11

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Ладно. Пока буду выдирать поисковый запрос из URL яндекс-страницы

12 (изменено: stealzy, 2014-04-23 11:15:16)

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

+ Offtopic ТуамОсес

ТуамОсес, куда не зайду - повсюду твои вопросы. И на handycache, и на ru-boarde, и тут, я что-то упустил?:D

13

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

+ открыть спойлер

А зачем Вы за мной повсюду ходите?

14

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

YMP пишет:

Скопируйте что-нибудь в Фаерфоксе и попробуйте извлечь HTML вот таким кодом:

А чего-то он в Опере не работает, ведь Фаерфокс в нем не оговорен?

15

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

DD пишет:

А чего-то он в Опере не работает, ведь Фаерфокс в нем не оговорен?

У меня работает, когда копирую из Оперы. Браузер ему по барабану, ему нужен формат "HTML Format" в буфере обмена. У меня Опера его туда помещает.

16

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

А как содержимое зеарцых бокса до кучи копировать в том же клике что и копирование сниппета?

17

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Без понятия.

18 (изменено: Malcev, 2014-05-02 05:15:26)

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Криво скрипт копирует.
Например я выделяю на главной странице форума текст от "Общение" до "Важная информация"
Через view selection source имеем:

<span>Общение</span></h2>
    </div>
    <div class="main-subhead">
        <p class="item-summary"><span><strong class="subject-title">Форум</strong> в этой категории с подробностями про <strong class="info-topics">темы</strong>, <strong class="info-posts">сообщения</strong>, <strong class="info-lastpost">последнее сообщение</strong></span></p>
    </div>
    <div id="category1" class="main-content main-category">
        <div id="forum25" class="main-item odd main-first-item">
            <span class="icon "><!-- --></span>
            <div class="item-subject">
                <h3 class="hn"><a href="http://forum.script-coding.com/viewforum.php?id=25"><span>Важная информация</span>

А через скрипт:

Version:0.9
StartHTML:00000149
EndHTML:00001023
StartFragment:00000183
EndFragment:00000987
SourceURL:http://forum.script-coding.com/index.php
<html><body>
<!--StartFragment--><div class="main-head">
        <h2 class="hn"><span>Общение</span></h2>
    </div>
    <div class="main-subhead">
        <p class="item-summary"><span><strong class="subject-title">Форум</strong> в этой категории с подробностями про <strong class="info-topics">темы</strong>, <strong class="info-posts">сообщения</strong>, <strong class="info-lastpost">последнее сообщение</strong></span></p>
    </div>
    <div id="category1" class="main-content main-category">
        <div id="forum25" class="main-item odd main-first-item">
            <span class="icon "></span>
            <div class="item-subject">
                <h3 class="hn"><a href="http://forum.script-coding.com/viewforum.php?id=25"><span>Важная информация</span></a></h3>
            </div></div></div><!--EndFragment-->
</body>
</html>

19

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Malcev пишет:

Криво скрипт копирует.

Чё? Вы второй пост читали? Копирует в буфер ПРИЛОЖЕНИЕ, а не скрипт. Скрипт просто извлекает из буфера указанный формат. Что туда браузер положил в этом формате, то и будет извлечено.

20

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Да я знаю.
Не так сформулировал.
Так что использовать данную фичу броузера - не вариант.

21

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

В вашем-то примере почему не вариант? Взять то, что между StartFragment и EndFragment.

22 (изменено: serzh82saratov, 2014-05-02 10:36:41)

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Ага, причём даже инфо есть, где вырезать без ошибочно.


ClipGetData(html, "HTML Format", 1)
html := StrGet(&html, "utf-8")
regexmatch(html, ".*?StartHTML:0*(.*?)\REndHTML:0*(.*?)\R", Pos)
MsgBox, % SubStr(html, Pos1, Pos2)
По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.02 (Unicode 32-bit).

23

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

И добавляется это в начале:

<div class="main-head">
        <h2 class="hn">

И это в конце:

</a></h3>
            </div></div></div>

24

Re: AHK: Копирование в буфер исх. кода выделенного фрагмента веб-страницы

Идея классная. Сразу бросился проверять. По факту оказалось, что при копировании текста в буфер обмена, каждый браузер поступает по своему:
MSHTA, Internet Explorer, Edge тащат в буфер обмена таблицу стилей (которая, правда, остается вне меток <!--StartFragment--><!--EndFragment-->). Вероятно для того, чтобы продвинутые приемники содержимого буфера (Word например) могли отобразить форматирование исходного текста.
Chrome, так же пытаясь обеспечить видимое соответствие, напихивает в исходный html столько дополнительных атрибутов что "мама не горюй".
Только FireFox передает выделенный html почти без искажений, ничего не добавляя и не убирая.
Opera вообще убивает все теги и передает в буфер только текст.
В общем, получается что данный способ получения html кода выделенного фрагмента можно использовать далеко не со всеми браузерами и доверять тому что полученный фрагмент 1:1 соответствует коду страницы не стоит.
Все перечисленные моменты не говорят о том, что идея - плоха, просто использовать её надо учитывая эти особенности.
Например, для сохранения выбранных фрагментов страниц для последующего чтения, она пойдет "на ура".

Чтобы не быть голословным, прицепляю результаты.

Post's attachments

test.zip 3.53 kb, 3 downloads since 2017-04-13 

You don't have the permssions to download the attachments of this post.