Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chrome Extension #105

Open
zenden2k opened this issue Mar 29, 2015 · 27 comments
Open

Chrome Extension #105

zenden2k opened this issue Mar 29, 2015 · 27 comments
Labels

Comments

@zenden2k
Copy link
Owner

грубо говоря, должны быть возможности:

Сделать скриншот всей страницы
Сделать скриншот фрагмента (выбор прямоугольной области с возможностью прокрутки, в Joxi например прокрутка не работает)
Правый клик по картинке -> Загрузить с помощью Image Uploader
Выделить текст с картинками -> Правый клик -> Перезалить картинки с помощью Image Uploader
И совсем круто было бы если бы получилось реализовать поддержку "Пользовательских элементов меню"

Используя Native Messaging
https://developer.chrome.com/extensions/nativeMessaging

@arhangelsoft
Copy link
Contributor

Не сказал бы что это вариант...
ПО запущенно постоянно, почему бы не реализовать внутренний HTTP/WS сервер и AJAX или те же WS передавать сообщения в ПО и выполнять действия? Плюсом будет тот факт, что AJAX и WS поддерживают все браузеры.

@zenden2k
Copy link
Owner Author

А если не запущено? Запустить из расширения никак не удастся, кроме как через Native Messaging.
Так что наверно придется сделать и то и другое.

@zenden2k
Copy link
Owner Author

Кстати прочитал вашу статью, http://arhangelsoft.ru/2013/06/programmer/почему-подмена-user-agent-для-twebbrowser-не-является-ре/
делаю тут одну штуку http://rawgit.com/zenden2k/image-uploader/master/Docs/api_webbrowser.html
как сделать чтобы эмулировалась самая последняя версия?

@arhangelsoft
Copy link
Contributor

А если не запущено? Запустить из расширения никак не удастся, кроме как через Native Messaging.
Так что наверно придется сделать и то и другое.

когда писал своё расширения, паранойя у хрома зашкаливала сильнее чем у касперского. Странно... обязательно применю Native Messaging.

Кстати прочитал вашу статью

В конце статьи прописано, как заставить рендер рисовать страничку в соотв. с нужным стандартом, для конкретного exe, если тот использовать этот элемент винды.

как сделать чтобы эмулировалась самая последняя версия?

Тут нужно учитывать особенности ОС:

  1. эмулятор можно использовать начиная с IE8.
    Фактически IE8 нужно будет и поставить пользователю на комп.
  2. Для винды до Vista, IE8 это максимально возможный IE, дальнейшие не поставить из-за древности OS и как следствие нет нужных компонент в ядре винды.
  3. Для 7-и и далее, есть где разгуляться. Эмулируй хоть до 11 IE, соотв. 11 IE должен быть установлен. Нельзя эмулировать то, чего нет.

Определяете версию ОС, определяете версию установленного IE,
пишите в реестр правило с нужным кодом эмуляции, перезапускаете ПО и все.

Пойду допишу это в статью...

@zenden2k
Copy link
Owner Author

@arhangelsoft
Copy link
Contributor

Прикольная штука! А доступ к DOM будет? Можно будет нагревать всякие хитро-выдуманные системы анти-спама :) Типа "введите капчу", хоп полноценное окно веб-браузера для ввода...

@zenden2k
Copy link
Owner Author

Ну как бы диалоговое окно ввода капчи давно есть (AskUserCaptcha)
А насчет доступ к DOM, пока не знаю.

Этот класс нужен для другого - для авторизации через OAuth 2.0 на некоторых тупых сайтах.

@arhangelsoft
Copy link
Contributor

OAuth вроде бы стандартизирован же. Должны мыть общие методы работы.. ну в общем применение ему найдется))

@zenden2k
Copy link
Owner Author

Мне бы с событиями разобраться. Вы не знаете случайно, чем отличается у интерфейса IWebBrowser2 OnNavigateComplete2 от OnDocumentComplete? Мне вообще нужно детектить момент смены URL.

@arhangelsoft
Copy link
Contributor

1е - когда загружен сам документ.
2е - когда DOM отрисован рендером и доступен для COM. Я бы использовал Navigate.

@zenden2k
Copy link
Owner Author

Вроде онлайн сервисы считают мой браузер за 11 версию, но javascript ошибки как продолжали сыпаться, так и продолжают....
А, они и в самом IE сыпятся в консоль. Неужто IE так плох, даже 11 версия?

@arhangelsoft
Copy link
Contributor

Ну IE любит отличаться в плане недореаализации общепринятых стандартов, потом приходится использовать макро-язык IE чтобы давать ему правильные JS/CSS. С одной стороны виноват IE, с другой, разработчики сайта, которые забыли про IE. И вот непонятно.

В нормальном IE все так же ок? 11 IE сами пробовали?

@zenden2k
Copy link
Owner Author

Я думаю, что если сделать доступ к DOM, этому классу найдется гораздо более широкое применение

@zenden2k
Copy link
Owner Author

А вот и первый скрипт, использующий новый класс
https://github.com/zenden2k/image-uploader/blob/master/Data/Scripts/vk.nut

@arhangelsoft
Copy link
Contributor

Лучше отдельным классом парсер DOM из строки (кроссплатформенно).

@arhangelsoft
Copy link
Contributor

Not bad 👍

@zenden2k
Copy link
Owner Author

Вот что получилось
http://rawgit.com/zenden2k/image-uploader/master/Docs/api_htmldocument.html
http://rawgit.com/zenden2k/image-uploader/master/Docs/api_htmlelement.html
плюс есть возможность запускать javascript в браузере и получать результат его выполнения

Правда оказалось что у IHTMLInputFileElement свойство value только для чтения ((( я думал это ограничение только для javascript.

@arhangelsoft
Copy link
Contributor

надо будет попробовать, однако это сугубо Win фишка. Может все таки парсер HTML?

@arhangelsoft
Copy link
Contributor

Все ж вспомнил ещё один крайне интересный проект... http://phantomjs.org/ может вы его как-то прикрутите? веб-бро кросс-платформенный, без окон без дверей...

@arhangelsoft
Copy link
Contributor

В своё время пытался, да и сейчас где-то лежит, пытался все это в dll завернуть :) Не прокатило.

@zenden2k
Copy link
Owner Author

Парсер будет #80
правда не знаю когда

@zenden2k
Copy link
Owner Author

Я всё таки сделал это!
Аплод через Internet Explorer. В интернете писали, что заполнить IHTMLInputFileElement невозможно. Оказалось, что если очень хотеть, то можно. Там такой замысловатый код получился, с хуками, таймерами, доступом через IAccesible. Не знаю, насколько стабильно это будет работать, но всё же как-то работает.
https://github.com/zenden2k/image-uploader/blob/master/Data/Scripts/vfl.nut

@arhangelsoft
Copy link
Contributor

Там такой замысловатый код получился, с хуками, таймерами, доступом через IAccesible. Не знаю, насколько стабильно это будет работать, но всё же как-то работает.

все проще. Через DOMские интерфейсы это нельзя. А через JS можно на ушах стоять :)

String code = "alert('o_O');";
String result = webBrowser1.Document.InvokeScript("eval",code);

Могу даже дома на Delphi накидать вам демку, пишите произвольный JS и он выполняется.

Можно не eval, а допустим плодить узлы в DOM c кодом, и так же invokeScript вызывать.

@zenden2k
Copy link
Owner Author

zenden2k commented Apr 1, 2015

Причем тут это? Заполнить input type=file через JS тем более не получится.
А функция runJavaScript есть в API скриптов http://rawgit.com/zenden2k/image-uploader/master/Docs/api_webbrowser.html

@zenden2k zenden2k changed the title Разработать расширение для Chrome Chrome Extension Apr 12, 2015
@arhangelsoft
Copy link
Contributor

Могу написать) как должно выглядить и работать?

@zenden2k
Copy link
Owner Author

Пока не готово API со стороны программы. Я пока не решил как передавать данные в Image Uploader, через Native Messaging или HTTP, а Native Messaging только для запуска программы и получения номера порта.
Наверно будет правильнее сделать через HTTP, чтобы потом можно было легко прикрутить поддержку Firefox

Но грубо говоря, должны быть возможности:
Сделать скриншот всей страницы
Сделать скриншот фрагмента (выбор прямоугольной области с возможностью прокрутки, в Joxi например прокрутка не работает)
Правый клик по картинке -> Загрузить с помощью Image Uploader
Выделить текст с картинками -> Правый клик -> Перезалить картинки с помощью Image Uploader
И совсем круто было бы если бы получилось реализовать поддержку "Пользовательских элементов меню"

@arhangelsoft
Copy link
Contributor

Я сразу использовал HTTP. Изврат с запуском бинарника отмел, т.к. это грубо нарушение безопасности, что собственно блокируется периодически всеми бро, а через AJAX засылай что хочешь, куда хочешь.

Сделать скриншот фрагмента (выбор прямоугольной области с возможностью прокрутки, в Joxi например прокрутка не работает)

Очень просто это делается. Я просто передам в программу скрин страницы целиком, а вы уже там сами крутите её как угодно 👯

по хорошему лучше вместо XHR использовать веб-сокеты. Их уже поддерживают все бро, за исключением старых версий осла. Настроку порта отдать пользователю на стороне сервера(IU) и клиента(браузер), т.к. Native Messaging есть только у хрома(гоогловского), остальные не дадут просто взять и запусть EXE да ещё и получить что-то. Разве что мозила через интерфейсные расширения.

И совсем круто было бы если бы получилось реализовать поддержку "Пользовательских элементов меню"

Не смотрел, но вроде бы это статично, не помню уже.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants