2016-09-02 17 views
1

Ich benutze HtmlAgilityPack für einige Fußball-Events von dieser site.Simulieren Klick auf HTML?

Das Ereignis, das ich ergreife, sind in der Registerkarte All. So im Wesentlichen, was ich tat, ist die Tabelle, wo alle Veranstaltungen wie diese finden:

string url = "http://it.soccerway.com/"; 
string data = new WebClient().DownloadString(url); 
var doc = new HtmlDocument(); 
doc.LoadHtml(data); 
var table = doc.DocumentNode.SelectSingleNode("//table[@class='matches date_matches grouped ']"); 

in den nächsten Mal, wenn ich den ganzen sichtbaren Ereignis bekommen, so dass alle die div, die die Klasse haben group-head expanded loaded:

var tableTrHeader = table.SelectNodes("//tr[@class='group-head expanded loaded ']"); 

und nächste es iterieren. Das alles funktioniert gut, aber ich habe ein Problem. Tatsächlich gibt es andere Ereignisse in der Tabelle, aber leider hat dies nicht die Klasse loaded sondern einfach: group-head clickable.

Also ich denke, es gibt etwas in der Js-Code der Website, die eine Aktion oder so etwas wie die Details der angeklickte Zeile zu erhalten.

Ich dachte, ein HTML zu laden, die das ganze Element erweitert haben, aber leider kenne ich keinen Ansatz, der es mir erlaubt, eine Klickaktion auf ein bestimmtes Ziel-HTML-Element durch C# zu senden. Ich nehme an, dass HtmlAgilityPack nicht für dieses Ziel, sondern nur für das Scraping erfolgt.

Jemand hat einen Workaround dafür? Vielen Dank.

+0

können Sie Click-Ereignis und andere Aktionen mit WebBrowser in Windows-Formular –

+0

ausführen Möchten Sie dies in Windows Form-Anwendung tun? –

+0

@LalitRajput ist keine Windows Form App, aber ich verwende WPF. – AgainMe

Antwort

2

Ich nehme an, dass HtmlAgilityPack für dieses Ziel nicht getan, sondern nur zum Schaben.

Richtig.

Jemand hat einen Workaround dafür?

Es hängt stark davon ab, wie es implementiert ist. Wenn es JavaScript ist, dann viel Glück. Wahrscheinlich müssen Sie die gesamte Werkzeugkette wechseln und stattdessen die Browser-Automatisierung verwenden.

Wenn es sich um einen anklickbaren HTML-Link handelt, holen Sie den Link, machen Sie eine weitere Anfrage und parsen Sie ihn erneut mit HtmlAgilityPack.

+0

Looking die Website-Struktur ist alles basiert Auf Json, wenn ich auf die Zeile klicke, wird eine HTTP-Anfrage gemacht und neue Details geladen. Alles basiert auf js. Unglücklicherweise. – AgainMe

-2

fand ich dies:

using System; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

public class Form1 : Form 
{ 
    [DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] 
    public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo); 

    private const int MOUSEEVENTF_LEFTDOWN = 0x02; 
    private const int MOUSEEVENTF_LEFTUP = 0x04; 
    private const int MOUSEEVENTF_RIGHTDOWN = 0x08; 
    private const int MOUSEEVENTF_RIGHTUP = 0x10; 

public Form1() 
{ 
} 

public void DoMouseClick() 
{ 
    //Call the imported function with the cursor's current position 
    int X = Cursor.Position.X; 
    int Y = Cursor.Position.Y; 
    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0); 
} 

//...other code needed for the application 
} 

Here, werfen Sie einen Blick :)

+0

Nein, dies simulieren einen Klick auf das Fenster, ich bin auf der Suche nach etwas, das den Klick simulieren, wenn die http-Anfrage gesendet wird, so kann ich das HTML mit allen Klassen 'expanded loaded' – AgainMe

Verwandte Themen