HTTPClient Button im browser clicken

12/27/2019 10:20 KingwondA#1
Hallo, hoffe dieses mal wird geholfen das Board schaut nähmlcih ziemlich Tod aus...

Mit dem o.g. Code rufe ich die Webseite "https://www.ebay-kleinanzeigen.de/m-einloggen.html?targetUrl=/" auf und downloade den Code dieser Seite und konvertiere diesen zu einem html object.

Mit Webscraping bekommt man also den Code einer Seite, wie aber klicke ich nun auf Buttons oder schreiibe etwas in eine Textbox?

Auf YOutube hab ich nichts passenden gefunden, wenn dann wurde HttpWebRequest verwendet oder WebClient und selbst dort hatten die nur gezeigt wie man den Code einer Webseite ausgibt....

Stackoverflow war auch keine hilfe, ich brauch mal ein richtiges Code bsp.

brauche dringend hilfe will mir hier kein Selenium scheiss holen, da der Brwoser immer die Daten von den bereits installierten browser nimmt wie User Agent, Fingerprints usw..

Man müsste wohl eine POST anfrage oder wie das genau auch immer heißt zur seite hinschicken, leider fidne ich bei stackoverflow nur alten kram von vor 7 jahren und auf youtube gibt's nur die Russen die einem das mal genau erklären, leider verstehe ich die Sprache der Russen nicht....
12/30/2019 09:34 Ludder231#2
Du musst per HTTPClient die entsprechenden POST/GET Pakete senden.

(von Stackoverflow kopiert)

Ansonsten kannste das auch mit HTTPWebRequest machen. Da findest du auf jeden Fall was zu.
01/01/2020 06:21 Mad0ck#3
Hier nen Beispiel wie man sich bei nem Brwosergame via nen Loginbutton / ( Loginform ) einloggt, bzw. diese via post request abschickt.

Request aus dem Network Tab:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Beispiel mit PHP !
Sollte aber in C# ähnlich sein :)

PHP Code:
use GuzzleHttp\Client;
use 
PHPHtmlParser\Dom;


    private function 
login(){
            
$response $this->client->get(DOMAIN);
            
$resp $response->getBody();

            
$dom = new Dom;
            
$dom $dom->loadStr($resp);

            
$loginValue$dom->find('input[name="login"]')[0]->getAttribute('value');
            
            
$this->client->post(DOMAIN '/login.php', [
                
'form_params' => [
                    
'name' => $this->username,
                    
'password' => $this->password,
                    
's1' => 'Login',
                    
'w' => '1920:1080',
                    
'login' => $loginValue
                
]
            ]); 
Bei dem von dir angegebenen Link hättest du folgende Form Data beim Einlogg Button:

PHP Code:
targetUrl: /
loginWenkseSessionId8ebc2224-e7ac-4dda-b14e-b3886206aabc
loginMail
a@gmx.de
password
a
_csrf
f1e6304e-38f0-43ef-8b6b-dbcb52d78f40
fingerprint
c54aeb5a721d64263c35d7f410d01628 
sessId und crsf Token sind in er form mit der ID "Login-Form"
Fingerprint hab ich auf den ersten Block nicht gesehen.
01/02/2020 12:32 Ludder231#4
Ich geb dir mal diese Klasse hier. Damit ist es sehr leicht sowas zu programmieren. ist aber als HTTPWebRequest.

Da kannste einfach dann
PHP Code:
Connection.Get("https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=test"); 
aufrufen etc. Bei Post musste die Formular Daten als zweiten Parameter angeben.
01/18/2020 11:32 Melli-#5
Als ganz billo Version (ohne mit viel Aufwand arbeiten zu müssen) reicht auch eine Instanz des Webbrowsers. Man kann theoretisch den Webbrowser auch in vielen Threads laufen lassen, also solltest du mal kein POST / GET etc. hinbekommen nehm einfach den standard Webbrowser, der hat nämlich ".Document(s?)" auf die du dann sagen kannst ".GetElemenyBy.." und danach mit dem Element die Methode ".click" oder sowas. Ist immer noch die einfachste Lösung insofern kein Captcha vorhanden ist.
02/05/2020 21:25 Mr&MrsNice#6
Import

HTML Code:
using System.Net.Http;
using System.Web;
using System.Net;
using System.IO;
Call
HTML Code:
            var values = new Dictionary<string, string>
            {
                { "key1", "value1" },
                { "key2", "value" } 
};
            var r = PostRequest("https://sendafuckingrequest.com/someshit.php, values);
Function
HTML Code:
        public static string PostRequest(string api, Dictionary<string, string> dataParams)
        {
            string postData = "";
            foreach (string key in dataParams.Keys)
            {
                postData += HttpUtility.UrlEncode(key) + "="
                      + HttpUtility.UrlEncode(dataParams[key]) + "&";
            }
            HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(api);
            myHttpWebRequest.Method = "POST";

            byte[] data = Encoding.ASCII.GetBytes(postData);

            myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
            myHttpWebRequest.ContentLength = data.Length;

            Stream requestStream = myHttpWebRequest.GetRequestStream();
            requestStream.Write(data, 0, data.Length);
            requestStream.Close();

            HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
            Stream responseStream = myHttpWebResponse.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(responseStream, Encoding.Default);
            string pageContent = myStreamReader.ReadToEnd();

            myStreamReader.Close();
            responseStream.Close();
            myHttpWebResponse.Close();

            return pageContent;
        }
Edit:
if the website you are using, in your case im not sure, is using javascript to load content dynamically the better option would be to use selenium
02/15/2020 08:51 KingwondA#7
Quote:
Originally Posted by Mad0ck View Post
Hier nen Beispiel wie man sich bei nem Brwosergame via nen Loginbutton / ( Loginform ) einloggt, bzw. diese via post request abschickt.

Request aus dem Network Tab:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Beispiel mit PHP !
Sollte aber in C# ähnlich sein :)

PHP Code:
use GuzzleHttp\Client;
use 
PHPHtmlParser\Dom;


    private function 
login(){
            
$response $this->client->get(DOMAIN);
            
$resp $response->getBody();

            
$dom = new Dom;
            
$dom $dom->loadStr($resp);

            
$loginValue$dom->find('input[name="login"]')[0]->getAttribute('value');
            
            
$this->client->post(DOMAIN '/login.php', [
                
'form_params' => [
                    
'name' => $this->username,
                    
'password' => $this->password,
                    
's1' => 'Login',
                    
'w' => '1920:1080',
                    
'login' => $loginValue
                
]
            ]); 
Bei dem von dir angegebenen Link hättest du folgende Form Data beim Einlogg Button:

PHP Code:
targetUrl: /
loginWenkseSessionId8ebc2224-e7ac-4dda-b14e-b3886206aabc
loginMail
a@gmx.de
password
a
_csrf
f1e6304e-38f0-43ef-8b6b-dbcb52d78f40
fingerprint
c54aeb5a721d64263c35d7f410d01628 
sessId und crsf Token sind in er form mit der ID "Login-Form"
Fingerprint hab ich auf den ersten Block nicht gesehen.
Php zu C# soll ich im kopf als anfänger konvertieren? Nein danke

Quote:
Originally Posted by Melli- View Post
Als ganz billo Version (ohne mit viel Aufwand arbeiten zu müssen) reicht auch eine Instanz des Webbrowsers. Man kann theoretisch den Webbrowser auch in vielen Threads laufen lassen, also solltest du mal kein POST / GET etc. hinbekommen nehm einfach den standard Webbrowser, der hat nämlich ".Document(s?)" auf die du dann sagen kannst ".GetElemenyBy.." und danach mit dem Element die Methode ".click" oder sowas. Ist immer noch die einfachste Lösung insofern kein Captcha vorhanden ist.
ja ja kenne ich dieses scheiss teil kommt net in meine Form.

Das ganze soll headless laufen, daher eigentlich nur einer von denen oder am liebsten RestSharp (ist am aktuelslten)
[Only registered and activated users can see links. Click Here To Register...]


HttpWebRequest for control
WebClient for simplicity and brevity
RestSharp for both on non-.NET 4.5 environments
HttpClient for both + async features on .NET 4.5 environments


Auch HttpWebRequest nutze ich äußert ungerne, da es eben am ältesten ist.... und nicht mehr Zeitgemäß

Allerdings nehme ich jede Deutsche hilfe diesbezüglich an, da es im Deutschen kaum Dokumentationen darüber gibt.. Meiste findet man im Russischen
02/15/2020 09:46 Melli-#8
[Only registered and activated users can see links. Click Here To Register...]

Wenn ich die Antwort so verstehe (von Stackoverflow), wie sie gemeint war, musst du die URL die rauskommt wenn du auf den Button drückst ansprechen, und das ein HTTPClient theoretisch dazu nicht in der Lage ist. (Klar bezieht sich der Stackoverflow auf Java aber Java und C# sind in etwa gleich mit der Funktionalität.)

Deine einzige Möglichkeit:
- Selenium
klappt ebenfalls headless, ist aber wie ein webbrowser, nur das Selenium nicht in deine Form gepackt wird - sondern als seperates Fenster geöffnet wird.
02/15/2020 10:54 Mad0ck#9
Quote:
Originally Posted by KingwondA View Post
Php zu C# soll ich im kopf als anfänger konvertieren? Nein danke
Wollt dir nur helfen / nen Denkanstoß geben wie es aufgebaut ist.

Hat mir bis jetzt immer geholfen. Vorallem als Anfänger war ich dankbar, dass mir generell wer hilft.
02/29/2020 14:55 KingwondA#10
Quote:
Originally Posted by Mad0ck View Post
Wollt dir nur helfen / nen Denkanstoß geben wie es aufgebaut ist.

Hat mir bis jetzt immer geholfen. Vorallem als Anfänger war ich dankbar, dass mir generell wer hilft.
ich bin nicht undankbar für hilfe, nur hilf tmir deine hilfe nicht^^