刮伤某些部位的令人敬畏的网
本文关键字:些部 | 更新日期: 2023-09-27 18:28:16
我之前问过这个问题,但我想重新表述这个问题。我正试图为我的项目制作一台刮刀。我想让它显示链接的某个部分。链接中唯一更改的部分是数字。这个数字是我想要的。链接如下:
<a href="/link/player.jsp?user=966354" target="_parent" "="">
如前所述,我试图只废弃链接的966354部分。我试过几种方法来做这件事,但都想不通。当我添加时
<a href="/link/player.jsp?user="
对于下面的代码,它破坏了
List<string> player = new List<string>();
string html = webControl2.ExecuteJavascriptWithResult("document.getElementsByTagName('a')[0].innerHTML");
MatchCollection m1 = Regex.Matches(html, "<a href=''s*(.+?)''s*</a>", RegexOptions.Singleline);
foreach (Match m in m1)
{
string players = m.Groups[1].Value;
player.Add(players);
}
listBox.DataSource = player;
所以我删除了它,它显示没有错误,直到我去运行程序,然后我得到了这个错误:
"在Awesomium.Windows.Forms.dll中发生类型为System.InvalidOperationException的未处理异常"
所以我尝试了这个和它的一些工作:
string html = webControl2.ExecuteJavascriptWithResult("document.getElementsByTagName('html')[0].innerHTML");
这段代码很零碎,但不是我想要的方式,有人能伸出援手吗。
我会使用HtmlAgilityPack(通过NuGet安装)和XPath查询来解析HTML。
类似这样的东西:
string html = webControl2.ExecuteJavascriptWithResult("document.getElementsByTagName('html')[0].innerHTML");
var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(html);
var playerIds = new List<string>();
var playerNodes = htmlDoc.DocumentNode.SelectNodes("//a[contains(@href, '/link/profile-view.jsp?user=')]");
if (playerNodes != null)
{
foreach (var playerNode in playerNodes)
{
string href = playerNode.Attributes["href"].Value;
var parts = href.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length > 1)
{
playerIds.Add(parts[1]);
}
}
id.DataSource = playerIds;
}
此外,您可能会发现这两个简单的帮助程序类非常有用:https://gist.github.com/AlexP11223/8286153
第一种是WebView/WebControl的扩展方法,第二种是一些静态方法,通过XPath+获取JSObject的坐标来生成用于检索元素(JSObject)的JS代码
使用下面这样的示例html文件,我无法复制异常。
<html>
<a href="/link/player.jsp?user=966354" target="_parent" "="">test</a>
</html>
然而,javascript
document.getElementsByTagName('a')[0].innerHTML
将在我的示例中返回"test"。你可能想要的是
document.getElementsByTagName('a')[0].href
这将返回href部分。
"innerHTML"属性将返回开始标记和结束标记之间的所有内容(如<html></html>)。这可能是您在获取"html"元素时获得更好成功的原因——您最终解析了整个<a> <a> 链接。
仅供参考,作为测试,您可以使用浏览器来测试javascript输出。