1 (изменено: Krot66, 2013-09-02 09:52:11)

Тема: AHK: Быстрое копирование многостраничных сетевых книг в текстовый файл

Предназначен для тех, кто занимается созданием электронных книг или хочет читать на ридере интересующий текст в удобочитаемом виде. Пригоден так же для ускоренного конспектирования, набивки цитат и других подобных занятий.
При сравнительно благоприятных условиях (хорошая скорость загрузки, наличие ссылок и умеренное количество мусора внизу страницы) темп 7-8 страниц в минуту является вполне реальным и не требующим особого напряжения.

Поддерживаются Opera и браузеры на движке WebKit (Chrome, Maxthon 3+, Comodo Dragon, Iron, etc.)

Как это работает:

  • Зажав Ctrl, щелкаем правой кнопкой мыши перед началом первой строки интересующего текста.

  • Страница прокручивается к концу, выделяя текст.

  • Перемещая мышь, корректируем выделение внизу страницы

  • Отпускаем Ctrl, если это первый фрагмент, вводим или подтверждаем сгенерированное название в появляющемся окне, переходим к следующей странице и т.д.. Если нажать левую кнопку мыши ДО отпускания Ctrl, выделение будет сброшено, а добавление отменено.

  • Возможно так же сохранение выделенных вручную фрагментов по Alt+ПКМ (это работает где угодно)

Использование качественной баннерорезки (например, AdBlock) может существенно упрощать процесс. Следует так же подбирать подходящий масштаб страницы.

#NoEnv 
SendMode Input 
SetWorkingDir %A_ScriptDir%
#SingleInstance force
SetTitleMatchMode Slow
CoordMode Mouse, Screen

;--------------------------------------------------
; Ctrl+правый клик перед первой строкой - автоматическое выделение (сохраняется после отпускания Ctrl)
; Alt+правый клик - сохранение выделенного вручную
; Ctrl+Alt+B - открытие текущего файла
; Ctrl+Alt+N - новая книга
;--------------------------------------------------
adr:=1 ; - вставлять адрес первой страницы в начало файла
sep:="====================" ; - разделитель фрагментов
num:=0 ; - нумерация разделителей
enc:=1 ; - кодировка файла (0 - ANSI; 1 - UTF-8)
sound:=0 ; - звуковой сигнал при сохранении (помимо тултипа) 
;--------------------------------------------------

Menu Tray, Icon, shell32.dll, 40
Menu Tray, NoStandard
Menu Tray, Add, Новая книга, ^!vk4E
Menu Tray, Add, Просмотр файла, ^!vk42
Menu Tray, Add, Открыть папку, Folder
Menu Tray, Add
Menu Tray, Add, Выход, Exit

If (enc=1)
    FileEncoding UTF-8
FileCreateDir Books
SysGet, M, MonitorWorkArea
n:=0

^!vk4E::
MsgBox 64, ,% "Новая книга!`nСкопировано  " n "  фрагментов", 2
n:=0
return

^!vk42::
IfExist % "Books\" t ".txt"
    Run % "Books\" t ".txt"
else
    MsgBox, 16, Ошибка, Ничего не сохранено!, 1
return

Exit:
ExitApp

Folder:
Run % "Books"
return

!RButton::
KeyWait Alt, U T6
goto Save

^RButton:: 
KeyWait RButton, U T2
If Errorlevel
    return
MouseClick Left , , , , , D
MouseGetPos x, y
MouseMove 100 , 0, , R
MouseMove 0 , 50, , R
Send {End} 
MouseMove MRight*0.5, y
KeyWait Ctrl, U T10
MouseClick Left , , , , , U
Save:
text:=CopyText(1)
If (text="")
{
    MsgBox, 16, Ошибка, Ничего не скопировано!, 1
    return
}
n:=n+1
If (n=1)
{
    WinGetActiveTitle t
    t:=DelAppName(t)
    StringLeft t, t, 80
    t:=ValidName(t)
    mes:="Введите имя файла без расширения:"
    Input:
    InputBox t, ,% mes, , 600, 160, , , , ,% t
    If Errorlevel
    {
        n=0
        return
    }
    e:=FileExist("Books\" t ".txt")
    If (e<>"")
    {
        mes:="Имя файла существует!"
        goto Input
    }
    If (adr<>0)
        add:=CopyAddress()
}
n2:=""
If (num=1)
    n2:=n " "
s:="`n`n" n2 . sep "`n`n"
FileAppend % add . s . text, % "Books\" t ".txt"
If Errorlevel
    MsgBox, 16, , Ошибка сохранения!, 1
else
{
    Tooltip Сохранено
    If (sound=1)
        SoundBeep 400, 200
    Sleep 500
    ToolTip
}
e:=0
add:=""
return

CopyAddress()
{
    Sleep 500
    ClipBoard := ""
    Send !{vk44}
    Sleep 300
    Send ^{Ins}
    ClipWait 0.5
    Send {Esc}
    return Clipboard
}

CopyText(t=0.5)
{
    ClipBoard := ""
    Send ^{Ins}
    ClipWait % t
    return Trim(ClipBoard)
}

DelAppName(n)
{
    StringCaseSense On
    StringGetPos pos, n, %A_Space%-%A_Space%, r
    If (pos>0)
        StringLeft n, n, pos+2
    StringCaseSense Off
    return Trim(n)
}

ValidName(n)
{
    StringReplace n, n, `r`n, %A_Space%, All
    StringReplace n, n, `n, %A_Space%, All
    StringReplace n, n, \, %A_Space%, All
    StringReplace n, n, /, %A_Space%, All
    StringReplace n, n, :, ,All
    StringReplace n, n, *, ,All
    StringReplace n, n, ?, ,All
    StringReplace n, n, ", ,All
    StringReplace n, n, >, %A_Space%, All
    StringReplace n, n, <, %A_Space%, All
    StringReplace n, n, |, -, All
    StringReplace n, n, %A_Space%%A_Space%, %A_Space%, All
    return Trim(n)
}

2

Re: AHK: Быстрое копирование многостраничных сетевых книг в текстовый файл

Krot66, ознакомьтесь с этой темой, отредактируйте заголовок.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Быстрое копирование многостраничных сетевых книг в текстовый файл

Судя по описанию, скрипт довольно узко специализирован, и кмк, вряд ли вызовет большое желание копипастить вручную текст со страниц, пусть  и в полуавтоматическом режиме.
Ежели автор желает довести скрипт до более-менее приемлемого по уровню комфорта использования, то почему бы не научить скрипт скачивать страничку самому, парсить на предмет полезного текста и ссылок на след.страничку, и по достижении конца оформлять одним файлом?

4

Re: AHK: Быстрое копирование многостраничных сетевых книг в текстовый файл

ТС
Вы либо тут спрашивайте что да как, или будучи опытным в АНК выкладывайте с понтом есть такое чудо может его в коллекцию?.
Или есть такое чудо, в моём понимании, скажите что не так?.
Что за ваш четвёртый вариант?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5 (изменено: Krot66, 2013-09-03 09:49:28)

Re: AHK: Быстрое копирование многостраничных сетевых книг в текстовый файл

Скрипт делался со вполне конкретными целями, как замена оффлайновым браузерам, результат работы которых все равно нуждается в обработке, которая не столь проста и требует много больше времени. Книги (fb2, epub и прочее) легко делаются из текстовых файлов, а не их скачанных файлов, где слишком много мусора. Потратить в среднем 3-4 минуты на получение материала и не забивать себе голову излишествами - вот цель, для которой он создан.
Что же касается парсинга страниц, то никакой разборщик html-кода не даст вам уверенности, что вы получите искомое. Например, замечательная примочка к Опере cleanPages все равно выбирает наибольший текстовый фрагмент и безбожно гючит на коротких страницах
Четвертый вариант позволяет добавлять короткие фрагменты к основному тексту, если в этом возникает необходимость (нр, если расположены вне основной части страницы)