|
You last visited: Today at 15:39
Advertisement
HTTPClient Button im browser clicken
Discussion on HTTPClient Button im browser clicken within the .NET Languages forum part of the Coders Den category.
12/27/2019, 10:20
|
#1
|
elite*gold: 312
Join Date: May 2013
Posts: 449
Received Thanks: 45
|
HTTPClient Button im browser clicken
Hallo, hoffe dieses mal wird geholfen das Board schaut nähmlcih ziemlich Tod aus...
var url = "https://www.ebay-kleinanzeigen.de/m-einloggen.html?targetUrl=/"
var httpClient = new HttpClient();
var html = await httpClient.GetStringAsync(url);
var htmldocument = new htmlAgilityPack.HtmlDocument();
htmlDocument.LoadHtml(html);
textBox3.TExt = html;
httpClient.Dispose();
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
|
#2
|
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
|
Du musst per HTTPClient die entsprechenden POST/GET Pakete senden.
PHP Code:
using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:6740"); var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("", "login") }); var result = await client.PostAsync("/api/Membership/exists", content); string resultContent = await result.Content.ReadAsStringAsync(); Console.WriteLine(resultContent); }
(von Stackoverflow kopiert)
Ansonsten kannste das auch mit HTTPWebRequest machen. Da findest du auf jeden Fall was zu.
|
|
|
01/01/2020, 06:21
|
#3
|
elite*gold: 313
Join Date: Oct 2014
Posts: 1,367
Received Thanks: 284
|
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:
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: /
loginWenkseSessionId: 8ebc2224-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
|
#4
|
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
|
Ich geb dir mal diese Klasse hier. Damit ist es sehr leicht sowas zu programmieren. ist aber als HTTPWebRequest.
PHP Code:
static class Connection {
static CookieCollection Cookies = new CookieCollection();
public static string Post(string URL, string Post) {
try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36";//"Mozilla/5.0 (Windows; U; WIndows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)"; request.CookieContainer = new CookieContainer(); foreach (Cookie entry in Cookies) { request.CookieContainer.Add(entry); } request.AllowAutoRedirect = true; // Wenn wir request sagen, das wir KEINEN proxy haben, sucht er keinen und die Anfrage geht um einiges schneller request.Proxy = null;
// Post-Daten definieren und abschicken string PostData = Post; byte[] byteArray = Encoding.Default.GetBytes(PostData); request.ContentLength = byteArray.Length; Stream DataStream = request.GetRequestStream(); DataStream.Write(byteArray, 0, byteArray.Length); DataStream.Close();
// Rückgabe holen HttpWebResponse response = (HttpWebResponse)request.GetResponse(); DataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(DataStream); string ServerResponse = reader.ReadToEnd(); reader.Close(); DataStream.Close();
foreach (Cookie cook in response.Cookies) { Cookies.Add(cook); }
response.Close();
return ServerResponse; } catch (Exception) { //... }
return null;
}
public static string Get(string URL) {
try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.Method = "GET"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36";//"Mozilla/5.0 (Windows; U; WIndows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)"; request.CookieContainer = new CookieContainer(); foreach (Cookie entry in Cookies) { request.CookieContainer.Add(entry); } request.AllowAutoRedirect = true; request.Proxy = null; Stream DataStream = default(Stream); // Rückgabe holen HttpWebResponse response = (HttpWebResponse)request.GetResponse(); DataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(DataStream); string ServerResponse = reader.ReadToEnd();
foreach (Cookie cook in response.Cookies) { Cookies.Add(cook); }
reader.Close(); DataStream.Close(); response.Close();
return ServerResponse; } catch (Exception) { return null; }
}
public static string Get(string URL, string cookName, out Cookie outCook) { outCook = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.Method = "GET"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36";//"Mozilla/5.0 (Windows; U; WIndows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)"; request.CookieContainer = new CookieContainer(); foreach (Cookie entry in Cookies) { if (entry.Name == cookName && entry.Value != "deleted") { outCook = entry; } request.CookieContainer.Add(entry); } request.AllowAutoRedirect = false; request.Proxy = null; Stream DataStream = default(Stream); // Rückgabe holen HttpWebResponse response = (HttpWebResponse)request.GetResponse(); DataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(DataStream); string ServerResponse = reader.ReadToEnd();
foreach (Cookie cook in response.Cookies) { Cookies.Add(cook); }
reader.Close(); DataStream.Close(); response.Close();
return ServerResponse;
}
}
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
|
#5
|
elite*gold: 122
Join Date: May 2014
Posts: 2,721
Received Thanks: 532
|
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
|
#6
|
elite*gold: 200
Join Date: Jan 2020
Posts: 36
Received Thanks: 11
|
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
|
#7
|
elite*gold: 312
Join Date: May 2013
Posts: 449
Received Thanks: 45
|
Quote:
Originally Posted by Mad0ck
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:
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: /
loginWenkseSessionId: 8ebc2224-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-
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)
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
|
#8
|
elite*gold: 122
Join Date: May 2014
Posts: 2,721
Received Thanks: 532
|
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
|
#9
|
elite*gold: 313
Join Date: Oct 2014
Posts: 1,367
Received Thanks: 284
|
Quote:
Originally Posted by KingwondA
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
|
#10
|
elite*gold: 312
Join Date: May 2013
Posts: 449
Received Thanks: 45
|
Quote:
Originally Posted by Mad0ck
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^^
|
|
|
 |
Similar Threads
|
[B] Push Button [S] 10 e*gold/Button; 25 e*g/psd+Button
09/20/2013 - elite*gold Trading - 4 Replies
Moin,
Hier könnt ihr folgenden Push Button kaufen:
http://i.epvpimg.com/YlrYe.jpg
Pro Button wären das 10e*g, pro Button mit .psd dazu 25e*g.
Wenn ihr einen Button kaufen wollt, schreibt mir eine PN, damit ich den Namen ändern kann, alles hochladen kann und euch dann per Treasure schicken kann. ;)
Schrift kann auch geändert werden. Dazu einfach in der PN schreiben, welche Schrift ihr haben wollt^^
|
Auf Icon clicken ?
07/20/2012 - AutoIt - 1 Replies
frage wurde per pn beantwortet, kann gelclosed werden.
|
Ogame Automat mit Java/Apache HTTPClient
12/02/2010 - General Coding - 3 Replies
Moin!
Ich hab gestern versucht ne kleine Automatisierung für Ogame zu programmieren, bin aber direkt am Anfang gescheitert. Ich weis nicht wirklich wie ich mich einloggen soll, ich hab zwar per POST alle Felder gesendet, die mir auch FireBug beim Login anzeigt, aber ich bekomme genau nichts zurück.
Hier erstmal mein Code (Java):
package sibbo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
|
All times are GMT +1. The time now is 15:40.
|
|