因此,当您从下拉列表中选择一个比赛周时(或单击下拉列表上方的“前”或“proximo”链接),页面中的 JavaScript 会调用服务器以获取所选比赛周的数据。它只是通过 GET 向服务器发送一个 URL。
数据以 JSON 对象的形式返回,该对象内部是 HTML 表格。这个 HTML 被加载到 DOM 中的正确位置,然后浏览器会立即显示该周的数据。
以编程方式获得此功能需要一些工作,但可以完成。您可以做的是确定每周的 URL。希望大多数查询字符串都是不变的,除了所讨论的那一周。因此,您将有一个样板 URL,您可以根据需要调整一周,并将其发送到服务器。您获取 JSON 并解析出表格 HTML。然后,您就很成功了:您只需将该 HTML 输入到 Agility Pack 中并像往常一样使用它。
我做了一些调查,并使用 Chrome 的开发者工具,在网络选项卡中,我发现当我选择一个游戏周时,发送到服务器的 URL 看起来像这样(这是第 14 周):
http://br.soccerway.com/a/block_competition_matches_summary?block_id=page_competition_1_block_competition_matches_summary_6&callback_params=%7B%22page%22%3A%229%22%2C%22round_id%22%3A%2217449%22%2C%22outgroup%22%3A %22%22%2C%22view%22%3A%221%22%7D&action=changePage¶ms=%7B%22page%22%3A13%7D
(请注意,您也可以使用其他工具,例如 FireFox 中的 Firebug 或 Fiddler 来获取 URL)。
通过尝试其他周并进行比较,看起来 (selected week - 1) 在 params 查询字符串的末尾附近找到:“...%3A13...”。因此,对于第 15 周,您将使用“...%3A14...”。幸运的是,不同周的 URL 之间似乎只有一个差异区域,它位于 callback_params 查询字符串中。不幸的是,我无法弄清楚它如何与选定的一周联系起来,但希望你能做到。
因此,当您将该 URL 输入浏览器时,您会返回 JSON 块。如果您搜索“<table”和“/table>”,您将看到所需的 HTML。在您的 C# 代码中,您可以使用一个简单的正则表达式将其从 JSON 字符串中解析出来:
string json = "..." // load the JSON string here
RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Singleline;
Regex regx = new Regex( "(?<theTable><table.*/table>)", options );
Match match = regx.Match( json );
if ( match.Success ) {
string tableHtml = match.Groups["theTable"].Value;
}
将 HTML 字符串输入到 Agility Pack 中,您应该可以上路了。