我有一个UWP应用,我使用HtmlAgilityPack
来解析一些网页并在应用中显示信息。现在我遇到了一个页面,我需要执行一个函数来获取文档的下一个链接
我在一个空白的UWP JavaScript
应用中运行了特定代码,并且能够看到该链接。但我不知道如何在C#
中运行该功能。由于它是一种不同的语言,我是否需要创建自己的一组函数来从数据中获取信息,或者我是否必须链接任何JavaScript库(如果可能的话)来执行操作?
这是我从页面获取的function
,为了能够进一步导航,我需要运行它并从中生成string
。
eval(function (p, a, c, k, e, d)
{
while (c--)
if (k[c])
p = p.replace(new RegExp('\\b' + c.toString(a) + '\\b', 'g'), k[c]);
return p
} ('3("3a").39({38:"6://5.1c.1b.1a:19/37/v.36",35:"6://5.1c.1b.1a:19/i/34/33/15.32",31:"",30:"2z",2y:"2x",2w:2v,2u:"8",2t:"2s",2r:[],2q:{2p:\'#2o\',2n:22,2m:"2l",2k:0}});b f;b k=0;b 7=0;3().2j(2(x){a(7>0)k+=x.18-7;7=x.18;a(0!=0&&k>=0){7=-1;3().2i();3().2h(2g);$(\'#2f\').j();$(\'h.g\').j()}});3().2e(2(x){7=-1});3().2d(2(x){17(x)});3().2c(2(){$(\'h.g\').j()});2 17(x){$(\'h.g\').2b();a(f)2a;f=1;$.29(\'6://12.9/16-28/27.16?26=25&24=15&23=21-20-1z-1y-1x\',2(14){$(\'#1w\').1v(14)})};3().1u(\'1t\',2(){b 13=3().1s();13.1r(\'1q\',2(){11.10(\'z-y\')[0].w[1].1p="6://12.9";11.10(\'z-y\')[0].w[1].1o="<u>1n - 1m 1l 1k & 1j</u>"});a($.c(\'4\')=="d"){t.s("6://r.q.p/o/8.n","m 9 1i",e,"l")}1h{t.s("6://r.q.p/o/d.n","m 9 1g",e,"l")}});2 e(){$.c(\'4\')==\'8\'?4=\'d\':4=\'8\';$.c(\'4\',4);1f.1e.1d()};', 36, 119, '||function|jwplayer|primaryCookie||http|p09821659|html5|to|if|var|cookie|flash|switchMode|vvplay|video_ad|div||show|tt9821659|button2|Switch|png|images|tv|flashx|static|addButton|this|center||childNodes||featured|jw|getElementsByClassName|document|streamin|container|data|sgqbf1k6kqfh|cgi|doPlay|position|8777|106|81|79|reload|location|window|Flash|else|HTML5|Storage|Sharing|Video|Free|Streamin|innerHTML|href|contextmenu|addEventListener|getContainer|ready|on|html|fviews|3a8183ea9a69ef9630b94e14f10dd735|1484917924|186|182|9821659||hash|file_code|view|op|index_dl|bin|get|return|hide|onComplete|onPlay|onSeek|play_limit_box|false|setFullscreen|stop|onTime|backgroundOpacity|Arial|fontFamily|fontSize|FFFFFF|color|captions|tracks|start|startparam|primary|326|height|580|width|2567|duration|skin|jpg|01964|01|image|mp4|tcipboyrkduzcg3h5gtcldvuyiloqwnoa5padad4cgy4d5wmp77locnp4ypa|file|setup|vplayer'.split('|')))
那么有可能在C#中实现它吗?如果是,那我该怎么做? 感谢。
[修改]
我在寻找方法时找到了this。它非常相似,但仍需要一些调整才能完成。我理解它的某些部分,但Regex
部分是不合适的
有没有人知道它是否可以适应我的情况?
答案 0 :(得分:1)
我发现了this(上面也提到过)关于如何做的好文章。有人在C#中使用Regex
来解决他们自己的问题。我很高兴地说它对我有所帮助,所以我将把它放在这里以防将来有人需要它。
string inputHtml = @"the function you get from scraping the page";
string[] data = Regex.Match(inputHtml, "'([a-zA-Z0-9_|]{30,})'").Groups[1].Value.Split('|');
上面的代码片段将为您提供一系列不同的字符串,您可以查看它们以获取您需要获取的任何信息。
我也在2个网站上取得了一些进展,我将分享我使用过的代码,以便将来可以帮助其他人。
我正在使用我的应用中的以下代码段来获取“estream.to”和“streamin.to”的视频链接。
if (videoLink.Host == "estream.to")
{
IEnumerable<HtmlNode> links = doc.DocumentNode.Descendants("script").Where(l => l.Attributes.Contains("type") && (l.InnerText.Contains("mp4") || l.InnerText.Contains("m3u8")) && l.InnerText.Contains("(p,a,c,k,e,d)"));
foreach (var link in links)
{
value = link.InnerText;
if (value.Contains("mp4"))
{
value = link.InnerText;
break;
}
}
string[] data = Regex.Match(value, "'([a-zA-Z0-9_|]{30,})'").Groups[1].Value.Split('|');
if (data.Count() > 20)
{
value = string.Format("https://{0}.{1}.{2}/hls/{3}/index-v1-a1.m3u8", data[10], data[4], data[3], data[17]);
}
}
else if (videoLink.Host == "streamin.to")
{
IEnumerable<HtmlNode> links = doc.DocumentNode.Descendants("script").Where(l => l.Attributes.Contains("type") && (l.InnerText.Contains("mp4") || l.InnerText.Contains("m3u8")) && l.InnerText.Contains("(p,a,c,k,e,d)"));
foreach (var link in links)
{
value = link.InnerText;
if (value.Contains("mp4"))
{
value = link.InnerText;
break;
}
}
string[] data = Regex.Match(value, "'([a-zA-Z0-9_|]{30,})'").Groups[1].Value.Split('|');
if (data.Count() > 20)
{
List<int> ip = new List<int>();
for (int x = 41; x <= 50; x++)
{
//check ip
int val = 0;
int.TryParse(data[x], out val);
if (val != 0)
{
ip.Add(val);
}
}
if (ip.Count > 0)
{
int[] ipValue = ip.ToArray();
string secondParam = "";
for (int x = 0; x < data.Count(); x++)
{
// string length is more than 50
if (data[x].Length > 50)
{
secondParam = data[x];
}
}
// Edit: I have come across a problem with this so I am updating the answer.
if (ipValue.Count() == 4)
{
value = string.Format("http://5.{0}.{1}.{2}:{3}/{4}/v.mp4", ipValue[3], ipValue[2], ipValue[1], ipValue[0], secondParam);
}
else if (ipValue.Count() == 5)
{
value = string.Format("http://{0}.{1}.{2}.{3}:{4}/{5}/v.mp4", ipValue[4], ipValue[3], ipValue[2], ipValue[1], ipValue[0], secondParam);
}
else
{
// this is where the problem occurs
}
}
}
希望它可以帮助任何人:)。感谢让这一切成为可能的人。
<强>更新强>
我发现“streamin.to”在不同的地方使用不同的算法。到目前为止,我认为有3种类型的代码。
希望这可能是我正在使用的代码片段的一些问题。也许玩它可能会对它有所启发。