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
|
|
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. |
|
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... |
|
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-linepobierać 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. |
|
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). |
|
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%. |
|
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 |
|
« 1 » |