模拟点击html?
Simulate click on html?
我正在使用 HtmlAgilityPack
从这个 site 中获取一些足球赛事。
我正在抓取的事件在 All
选项卡中。所以基本上我所做的是获得 table 所有事件所在的位置,如下所示:
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 ']");
下次我得到所有可见事件,所以所有 div 有 class group-head expanded loaded
:
var tableTrHeader = table.SelectNodes("//tr[@class='group-head expanded loaded ']");
然后迭代它。所有这一切都很好,但我有一个问题。事实上 table 中还有其他事件,但不幸的是,这里没有 class loaded
,只有:group-head clickable
.
所以我想网站的 js 代码中有一些东西可以执行某个操作或类似的东西来获取点击行的详细信息。
我想加载一个 html,所有项目都展开了,但不幸的是,我不知道有什么方法可以让我在特定目标 html 元素上发送点击操作C#。我想 HtmlAgilityPack
没有针对这个目标完成,而只是为了抓取。
有人对此有解决方法吗?谢谢。
我发现了这个:
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,看看:)
I suppose that HtmlAgilityPack is not done for this target but only for scraping.
没错。
Someone have a workaround for this?
这在很大程度上取决于它是如何实现的。如果是 JavaScript,那么祝你好运。您可能需要切换整个工具链并改用浏览器自动化。
如果它是 HTML 可点击 link,获取 link,发出另一个请求并再次使用 HtmlAgilityPack 解析它。
我正在使用 HtmlAgilityPack
从这个 site 中获取一些足球赛事。
我正在抓取的事件在 All
选项卡中。所以基本上我所做的是获得 table 所有事件所在的位置,如下所示:
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 ']");
下次我得到所有可见事件,所以所有 div 有 class group-head expanded loaded
:
var tableTrHeader = table.SelectNodes("//tr[@class='group-head expanded loaded ']");
然后迭代它。所有这一切都很好,但我有一个问题。事实上 table 中还有其他事件,但不幸的是,这里没有 class loaded
,只有:group-head clickable
.
所以我想网站的 js 代码中有一些东西可以执行某个操作或类似的东西来获取点击行的详细信息。
我想加载一个 html,所有项目都展开了,但不幸的是,我不知道有什么方法可以让我在特定目标 html 元素上发送点击操作C#。我想 HtmlAgilityPack
没有针对这个目标完成,而只是为了抓取。
有人对此有解决方法吗?谢谢。
我发现了这个:
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,看看:)
I suppose that HtmlAgilityPack is not done for this target but only for scraping.
没错。
Someone have a workaround for this?
这在很大程度上取决于它是如何实现的。如果是 JavaScript,那么祝你好运。您可能需要切换整个工具链并改用浏览器自动化。
如果它是 HTML 可点击 link,获取 link,发出另一个请求并再次使用 HtmlAgilityPack 解析它。