Получить источник текущей вкладки в Google Chrome через Applescript - PullRequest
6 голосов
/ 14 декабря 2010

Это детская игра в Safari, которая имеет хорошую поддержку Applescript.Служба поддержки Google Chrome AS только что поступила, поэтому я не сомневаюсь в этом.Я в основном пытаюсь получить текущий HTML-код через буфер обмена, чтобы я мог получить информацию.У нас есть несколько изящных команд, таких как:

tell application "Google Chrome"
 view source of active tab of window 1
 save active tab of window 1
 print active tab of window 1
 reload active tab of window 1
 go back active tab of window 1
 go forward active tab of window 1
 copy selection of active tab of window 1
 paste selection active tab of window 1
end tell

, но, увы, вы не можете сказать "set X to source of active tab of window 1".У кого-нибудь есть предложения для меня?Мои текущие идеи состоят в том, чтобы загрузить код, который мне нужен, в фоновом режиме в Safari (довольно некрасиво) или попытаться отобразить исходный код и захватить его с помощью сценария пользовательского интерфейса, но это также безобразно.Также я постоянно сталкиваюсь с ошибками скриптинга, которые мешают ему работать.

Любая помощь будет принята.

Ответы [ 5 ]

6 голосов
/ 12 февраля 2012

Поскольку Google Chrome поддерживает Javascript

--Applescript code
tell active tab of window 1
    set sourcehtml to execute javascript
    document.getElementsByTagName('html')[0].innerHTML
end tell
2 голосов
/ 27 августа 2015

Библиотека Chrome AppleScript может execute JavaScript.

Это назначит полный источник страницы для source и вернет его

tell application "Google Chrome"
    set source to execute front window's active tab javascript "document.documentElement.outerHTML"
end tell
2 голосов
/ 14 декабря 2010

Я очень рад узнать, что Chrome теперь поддерживает AppleScript.К сожалению, пока он минимален, но я уверен (надеюсь!), Что станет лучше.Поскольку нет никакого способа получить источник напрямую, я бы выбрал следующий хакерский маршрут:

tell application "Google Chrome"
    view source of active tab of window 1 -- Or whichever tab you want
    delay 3
    repeat while loading of active tab of window 1
        delay 3
    end repeat
    select all of active tab of window 1 -- Must *always* be the active tab
    copy selection of active tab of window 1
    delete tab (active tab index of window 1) of window 1
end tell
delay 1
return the clipboard

Да, это хакерский, но это неизбежно, учитывая текущее состояние словаря сценариев.Сценарий должен быть простым: откройте вкладку источника, дождитесь ее загрузки, выберите содержимое, скопируйте его и закройте вкладку.Вы можете поиграть с delay 3 s, чтобы увидеть, что работает лучше всего.Обратите внимание, что first active tab of window 1 является произвольным, остальные явно ссылаются на вкладку источника. Кроме того, очевидно, что нет способа закрыть вкладку из скриптового словаря Chrome (oy vey), поэтому мне пришлось использовать вместо этого JavaScript. Кроме того, последний delay 1 не должен было бы необходимо, но если бы этого не было, мои тесты иногда возвращали неправильные данные, даже если содержимое буфера обмена было правильным, когда я их вставлял. Я думаю, это потому, что было достаточно текста, что потребовалось заметное количество времени дляобновить буфер обмена.

Редактировать 1: Я заменил execute the active tab of window 1 javascript "window.close()" на строку delete tab, как мне было предложено.К сожалению, delete tab active tab of window 1 не работает, поэтому вам нужна эта немного более запутанная конструкция.

2 голосов
/ 15 декабря 2010
-- This script copies the HTML of a tab to a TextEdit document.
tell application "Chromium"
 tell tab 1 of window 1 to view source
 repeat while (loading of tab 2 of window 1)
 end repeat
 tell tab 2 of window 1 to select all
 tell tab 2 of window 1 to copy selection
end tell

tell application "TextEdit"
 set text of document 1 to the clipboard
end tell

Объяснение: Скрипт находится в узком цикле, ожидая загрузки вкладки, затем просто копирует HTML-код в буфер обмена.

tell application "Google Chrome"
    set t to active tab index of window 1
    tell active tab of window 1 to view source
    set t to t + 1
    repeat while (loading of tab t of window 1)
    end repeat
    tell tab t of window 1 to select all
    tell tab t of window 1 to copy selection
    delete tab t of window 1
end tell

EDIT1: приведенный выше скрипт должен делать то, что вы хотите

0 голосов
/ 14 декабря 2010

Поскольку «поддержка AS» в Chrome «только что прибыла», она должна быть «захватывающей».Испытывая некоторые команды, которые они имеют в своем словаре, похоже, что у них все еще есть некоторые изломы, которые нужно решить.До тех пор, пока Google не предложит в API способ облегчения получения исходного кода (и / или обработки смежных изломов), вам придется использовать одну из альтернатив, упомянутых в вашем посте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...