模拟点击html?

时间:2016-09-02 11:09:13

标签: c# html-agility-pack

我使用HtmlAgilityPacksite获取一些足球赛事。

我抓住的事件位于All标签内。基本上我所做的就是获取所有事件所在的表格:

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 ']");

在下一次我获得所有可见事件时,所有具有类group-head expanded loaded的div:

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

然后迭代它。所有这些都很好,但我有一个问题。事实上,表格中还有其他事件,但遗憾的是,这不是loaded类,而只是:group-head clickable

所以我想网站的js代码中有一些东西可以执行某个动作或类似的东西来获取点击行的详细信息。

我想加载一个扩展了所有项目的html,但遗憾的是我不知道一种允许我通过c#对特定目标html元素发送点击操作的方法。我认为HtmlAgilityPack没有为此目标完成,只是为了抓取。

有人有解决方法吗?感谢。

2 个答案:

答案 0 :(得分:2)

  

我认为HtmlAgilityPack没有为此目标完成,只是为了抓取。

右。

  

有人有解决方法吗?

这在很大程度上取决于它的实施方式。如果它是JavaScript,那么祝你好运。您可能需要切换整个工具链并使用浏览器自动化。

如果它是HTML可点击链接,请获取链接,发出另一个请求并再次使用HtmlAgilityPack解析它。

答案 1 :(得分:-2)

我发现了这个:

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,看一看:)