Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Komunikacja programu z przeglądarką

Ostatnio zmodyfikowano 2017-07-03 01:21
Autor Wiadomość
latajacaryba
Temat założony przez niniejszego użytkownika
Komunikacja programu z przeglądarką
» 2017-07-01 22:09:46
Witam. Jakimi bibliotekami musiałbym się zainteresować, by mój program mógł komunikować się z przeglądarką (Firefox)? Zależy mi na:
* pobierać dane z paska URL, z karty na której aktualnie jestem
* pobierać dane z pasków URL wszystkich kart, które są otwarte
* otwierać stronę, mając podany adres URL

Słyszałem o libcurl, ale wole się spytać, może ktoś wie coś więcej
P-162972
jankowalski25
» 2017-07-01 22:56:39
Jeśli znasz SFML, to wystarczy. Stawiasz serwer na localhoście i stąd dostaniesz zawartość paska URI (zwłaszcza, jeśli w ustawieniach wpiszesz, aby cały ruch przechodził przez Twój serwer). Otwieranie strony sprowadza się do napisania własnego klienta (podstawowe funkcjonalności znajdziesz w
sf::Http
, resztę musisz sobie dopisać lub skorzystać z gotowych rozwiązań, chociażby SFNUL).

W najprostszym przypadku potrzebujesz pośrednika (proxy) pomiędzy przeglądarką, a Internetem. Łączysz się przeglądarką ze swoim serwerem, a on przekazuje wszystko dalej i zwraca wynik z powrotem do przeglądarki. Pomiędzy możesz zrobić wszystko, co jest wykonalne w C++.

Nie zapomnij, że domyślnie proxy na localhoście może być zablokowane, wtedy trzeba pozmieniać parę opcji, aby przeglądarka na to pozwoliła.

Innym sposobem jest napisanie wtyczki pod konkretną przeglądarkę. W ten sposób powstał na przykład ExtCpp0x.
P-162973
latajacaryba
Temat założony przez niniejszego użytkownika
» 2017-07-02 00:17:47
stąd dostaniesz zawartość paska URI
A jak mógłbym go pobrać do programu?

Poza tym (proszę nie krzyczeć :D ,nie znam się na tym) po co stawiamy taki serwer? Myślałem, że potrzebne są one tylko gdy np. napisaliśmy stronę i chcemy by była dostępna w internecie...
P-162974
jankowalski25
» 2017-07-02 00:48:10
1. Przeglądarka jest klientem. Jeśli napiszesz serwer, to będziesz mógł się połączyć (localhost nie wymaga Internetu, działa na lokalnym komputerze - jak sama nazwa wskazuje - local i host). To zadziała nawet w przypadku zamkniętych przeglądarek (gdzie nie możesz obejrzeć kodu źródłowego) oraz nawet, gdy nie da się napisać żadnej wtyczki (brak wsparcia ze strony autora?) i samą przeglądarkę potraktujesz jako "czarną skrzynkę".
2. Możesz napisać wtyczkę, ale wtedy musisz się dopasować do przeglądarki (możliwe, że zajdzie potrzeba skorzystania z innego języka, na przykład JavaScript). W sumie to w przypadku Firefoksa chyba możesz mieć program napisany w dowolnym języku i się z nim komunikować przez Native messaging (jednak wtedy i tak musisz się dopasować do przeglądarki).

Dopisano:
Można jeszcze kombinować z konsolą:

pobierać dane z paska URL, z karty na której aktualnie jestem
https://askubuntu.com​/questions/929686​/get-url-of-current-active-tab-from-firefox-via-command-line

pobierać dane z pasków URL wszystkich kart, które są otwarte
Podobnie, jak poprzednio. Będzie się to sprowadzało do wyciągnięcia danych z innej karty.

otwierać stronę, mając podany adres URL
Wpisanie w konsoli
firefox adres_www
 domyślnie powinno otworzyć daną stronę w nowej karcie.
P-162975
latajacaryba
Temat założony przez niniejszego użytkownika
» 2017-07-02 17:50:17
Na razie to tyle, dzięki. Jeśli będę potrzebował wiedzieć coś więcej to napiszę. :)

EDIT:
Wpisanie w konsoli firefox adres_www domyślnie powinno otworzyć daną stronę w nowej karcie.
Niestety, nazwa firefox nie jest rozpoznawana...

Natomiast i tak nie wiem jak by to zrobić z poziomu programu... Nie chodzi mi o ręczne wpisywanie ;P


Nie znam pythona, ale rozumiem, że mam otworzyć plik recovery.js w którym są adresy URL i wczytać. Jednak (nie wiem dlaczego) takiego pliku w ogóle u mnie nie ma (a przynajmniej nie ma go w folderze, w którym jest sam Firefox. Szukałem również wyszukiwarką i nic).
P-162988
jankowalski25
» 2017-07-02 21:28:47
nazwa firefox nie jest rozpoznawana
Jaki system? Bo jeśli Windows, to zgodnie z http://kb.mozillazine.org​/Command_line_arguments plik nazywa się "firefox.exe" (możliwe, że nie jest w PATH, wtedy trzeba przejść do odpowiedniego folderu). Samo "firefox" jest pod dystrybucjami Linuksa (tam pliki wykonywalne zwykle nie mają żadnych rozszerzeń).

jak by to zrobić z poziomu programu
Zwykle należy najpierw przygotować treść poleceń do wykonania (można je trzymać chociażby w
std::string
, aby wygodnie wszystko poskładać), a następnie należy wywołać odpowiednią funkcję (zależną od systemu operacyjnego), która spowoduje wykonanie tego w konsoli. Pod Windowsem będzie to coś z WinAPI w stylu
ShellExecute()
, pod Linuksem funkcje typu
popen()
. Z różnych powodów lepiej nie używać funkcji
system()
. Ewentualnie można zapisać całość jako skrypt *.bat (Windows), *.sh (Linux) lub inny, zależny od używanego środowiska i go uruchomić ręcznie (bash, batch i inne shelle są wystarczająco złożone, aby napisać sensowny kod, a w razie potrzeby można wywoływać inne programy, w tym własne twory).

Jednak (nie wiem dlaczego) takiego pliku w ogóle u mnie nie ma
Bo tam było przykładowe rozwiązanie pod Linuksa, w Windowsie pewnie całość leży w folderze %APPDATA%\Mozilla\Firefox\Profiles. Ogólnie rzecz biorąc to, co pod Linuksem trafia zwykle do $HOME, to pod Windowsem zazwyczaj znajdzie się w %APPDATA%.
P-162992
latajacaryba
Temat założony przez niniejszego użytkownika
» 2017-07-03 01:21:18
Ohh... faktycznie była pod %appdata%.
Co do skryptów to chyba wybiorę jednak opcje WinApi ShellExecute() i tak wystarczy mi, że wczoraj dopiero zainteresowałem się... co to w ogóle jest host :P
Co do CMD to zerknę jutro co z tą ścieżką. Tymczasem jestem bardzo wdzięczny za poświęcony czas.
Gdybym czegoś jeszcze nie wiedział, odważę się dopytać :D
P-162998
« 1 »
  Strona 1 z 1