Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Wykrywanie tekstu na stronie


Rekomendowane odpowiedzi

Opublikowano

Witam!

Chciałbym się dowiedzieć jak wykryć jedną rzecz na stronie, aby można było użyć ją w C++.

 

Chodzi mi o to, aby ze strony internetowej pobierało wybraną informację i wyświetlało, używało ją w bocie.

Jak to zrobić ?

Opublikowano

To zależy w jaki sposób pobierasz stronę internetową. 

 

Wychodząc z założenia, że nie wiesz nic o temacie i uczysz się od podstaw: 
Poleciłbym Ci tworzenie projektu w C# WinForms ( odradzam WPF do tego celu, chyba, że jest to ważne z innych względów ). 

 

Korzystając z kontrolki WebBrowser

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser(v=vs.110).aspx 
masz szybki i łatwy dostęp do kodu HTML każdej odwiedzanej przez Ciebie strony. 

WebBrowser::Document zwraca HtmlDocument, z którego możesz wyciągać dane metodami getElementById, GetElementsByTagName itp. 

Ta sygnatura jest pusta.

Opublikowano

Odradzasz zdecydowanie C++ ?

 

Spróbuję zacząć robić w tym C# :D

 

Sprawozdanie z progresu wystawię w weekend :D

Opublikowano

Nie tyle odradzam, co do tego celu WebBrowser w C# jest zdecydowanie łatwiejszy i szybszy ( do zaprojektowania ). 

 

Rozwiązaniem typowym dla C++ byłby WinInet (

http://msdn.microsoft.com/en-us/library/windows/desktop/aa383630(v=vs.85).aspx
) i nie ma żadnego powodu, by męczyć się z tym na tak niskim poziomie.

 

Jeśli nie zależy Ci na renderowaniu ( wyświetlaniu ) strony, możesz również skorzystać z HttpWebRequest (

 http://msdn.microsoft.com/pl-pl/library/system.net.httpwebrequest(v=vs.110).aspx
).

Ta sygnatura jest pusta.

Opublikowano

Moje pytanie jest takie: jak użyć tych bibliotek, aby można było wczytać jedną linijkę z kodu PHP i ją wykorzystać ?

Opublikowano

Nie wiem dokladnie o co ci chodzi, ale domyslam sie że ze zrodla strony chcesz 'wydobyc' jakies informacje i uzyc tego w bocie.

 

Za dlugo tym sie nie bawilem, ale wysylasz HttpWebRequest, zgarniasz response a pozniej wyszukujesz w tym response danej frazy,ukladu,ciagu czy co tam potrzebujesz(mozesz to zrobic za pomoca regexa). Ogolnie wszystko znajdziesz na necie...  

Opublikowano

Kod PHP nie jest widoczny dla klienta ( przeglądarki w tym przypadku ). 

 

Możesz odczytać tylko kod HTML. 

 

Po zainstalowaniu C#:

Youtube: simple C# webbrowser 

Google: read html from webbrowser

Ta sygnatura jest pusta.

Opublikowano

Kod PHP nie jest widoczny dla klienta ( przeglądarki w tym przypadku ). 

 

Możesz odczytać tylko kod HTML. 

 

Po zainstalowaniu C#:

Youtube: simple C# webbrowser 

Google: read html from webbrowser

 

A myslisz ze on wie czego szuka?

Zachcialo sie pewnie gimbusowi zrobic 'pro bota' a nawet nie wie czego szuka... Po co mu niby jakis kod PHP w bocie?

 

Takie tematy powinny byc odrazu zamykane bo ani my nie wiemy czego on szuka ani.... on sam tego nie wie.

Opublikowano

Wiem czego szukam, to forum jest dla laików, a nie dla osób, które potrafią wszystko zrobić.

 

Nie wiem jak wyeksportować za pomocą HttpWebRequest linijki kodu, która mówi o wygranej, bądź przegranej.

Opublikowano

Nigdzie nie powiedziałem, że to jest forum dla tych co potrafią wszystko zrobić.

Po prostu jak oczekujesz pomocy to wypadałoby jasno określić czego szukasz...

 

Na początku piszesz, że chcesz pobrać informację ze strony, później nagle chcesz wydobyć jakiś kod PHP.

 

 

 

Nie wiem jak wyeksportować za pomocą HttpWebRequest linijki kodu, która mówi o wygranej, bądź przegranej.

 

Zacznijmy od tego że HttpWebRequest służy jedynie do wysyłania/odbierania pakietów HTTP.

Już pisałem jak wydobyć fragment response...

Wysyłasz pakiet http, zgarniasz response od serwera i w tym response szukasz(np. za pomocą regexa) danego fragmentu.

Nikt gotowca za ciebie nie napisze. Tak jak mówiłem szukaj w google, znajdziesz tam mase przykładów ktore bedziesz mogl przerobic i zastosowac.

 

No i polecam najpierw pobrac jakis HTTP Sniffer żeby sie w ogole zorientowac jak wyglada response(bo pewnie tego tez nie wiesz)

Opublikowano

WebBrowser jest znacznie łatwiejszym rozwiązniem niż HttpWebRequest. 

 

Po stworzeniu kontrolki WebBrowser możesz przejść na wybraną stronę korzystając z WebBrowser::Navigate oraz odczytać tekst źrodłowy strony jako string poprzez akcesor WebBrowser::DocumentText: 

webBrowser1.Navigate("http://www.google.pl");
string s = webBrowser1.DocumentText;
Debug.WriteLine(s);

 

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documenttext.aspx

Ta sygnatura jest pusta.

Opublikowano

Nie mam pojęcia dlaczego nie działa mi strona Microsoftu, przeszukałem internet i nic nie znalazłem co by zadziałało.

Jak wiadomo tam wszystko można znaleźć, bo tutorialu do tej biblioteki WebBrowser nie znalazłem.

 

@Edit

Zaraz zainstaluję Service Packa może on coś pomoże :D

 

@Edit x2

Już wiem w czym tkwi problem, także wieczorem będę mieć już dostępne strony Microsoftu :)

 

@Edit x3

Zastanawiałem się nad C#, ale jednak już zacząłem w C++ i do tej pory nie wiem jak użyć HttpWebRequest :(

Przydałby się porządny poradnik/kurs na temat wymienionej wcześniej Klasy.

Opublikowano

HttpWebRequest to klasa dla .NET. 

 

Jeśli chcesz z niej korzystać, musisz pisać w języku dla .NET'u.

Jeśli C++ to twój 100% wybór, musisz pisać w C++/CLI. 

 

Rozwiązaniem natywnym dla C++, bez korzystania z .NET'u, byłby WinInet (

http://msdn.microsoft.com/en-us/library/windows/desktop/aa384322(v=vs.85).aspx
). Na podanej stronie znajdziesz jakieś sample. W przypadku logowania się do jakiegoś serwisu ( np. gry przeglądarkowej ) musisz pamiętać o poprawnej obsłudze Cookies. 

Ta sygnatura jest pusta.

Opublikowano

A może zainteresowałbyś się biblioteką cURL ?

 

Też bym sugerował użyć cURL'a. A do wydobycia konkretnych informacji: boost::regex

 

Dla mojej prostej konsolowej twórczości do sprawdzania, czy moje boty żyją tak właśnie to robię:

 

 

std::string readBuffer;
static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp)
{
    size_t realsize = size * nmemb;
    readBuffer.append((const char*)contents, realsize);
    return realsize;
}
 
void checkForPlayers()
{
    online = false;
    std::string messageToSend = "";
    ZeroMemory(&messageToSend, messageToSend.size());
    CURL* curl1 = curl_easy_init();
      CURLcode res1;
    std::list<std::string> playerList;

      if(curl1)
      {
        char buffer[128];
        sprintf(buffer, "http://www.tibia.com/community/?subtopic=worlds&world=%s", worldToCheck.c_str());
        curl_easy_setopt(curl1, CURLOPT_URL, buffer);
        ZeroMemory(buffer, sizeof(buffer));
        curl_easy_setopt(curl1, CURLOPT_FOLLOWLOCATION, 1L);
        curl_easy_setopt(curl1, CURLOPT_WRITEFUNCTION, WriteCallback);
        res1 = curl_easy_perform(curl1);
        curl_easy_cleanup(curl1);

        boost_regex::regex_type worldPlayers("&name=[^>]*>([^<]+)<");
        boost_regex next(readBuffer.c_str(), readBuffer.c_str() + readBuffer.size(), worldPlayers, 1);
        boost_regex end;

        playerList.clear();
        for(; next != end; ++next)
        {
            playerList.push_back(decodeTags(next->str()));
        }

        playerList.sort();
 
/* Reszta kodu */
    }
}

 

Kod curla jest z przykładów, z ich oficjalnej strony.

 

Pozdrawiam, Czepek!

Opublikowano

Dzięki za aktywny udział w temacie i mam pytanie:

czy znalazł ktoś może poradnik do cUrl po polsku ? 

Wiem, że jest wiele po angielsku, ale na tak bardzo zaawansowanym poziomie nie jestem i nie rozumiem połowy rzecz, a tłumacz Google wręcz mi przeszkadza :/

 

Jeśli nikt nie znalazł żadnego poradnika to cóż, spróbuję z angielskimi tutorialami, ale poczekam jeszcze na Wasz odzew.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...