javascript - 解压 JavaScript (p,a,c,k,e,d) 函数

标签 javascript c# uwp

我有一个 UWP 应用,我使用 HtmlAgilityPack 来解析一些网页并在应用中显示信息。现在我遇到了一个页面,我需要在其中执行一个函数来获取文档的下一个链接。
我在空白的 UWP JavaScript 应用中运行了特定代码,并且能够看到该链接。但我不知道如何在 C# 中运行该函数。由于它是一种不同的语言,我是否需要创建自己的函数集来从数据中获取信息,或者我是否必须链接任何 JavaScript 库(如果可能)来执行该操作?

这是我从页面获得的函数,为了能够进一步导航,我需要运行它并获取从中生成的字符串

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 部分超出了我的理解范围。
有谁知道它是否可以适应我的情况?

最佳答案

我找到了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 种类型的代码。

  1. IP 从“5.x.x.x:x”开始,最后 4 部分在代码中可用,但 5 部分必须由您输入。
  2. IP 的启动方式不同,但 IP 的所有部分都可以在代码中使用,因此这里无需担心。
  3. IP 的开头再次不同,但所有 5 个 IP 中只有 3 个部分可用。根据我的经验,我得到了“x.92.x.211:8777”,因为有 2 个地方未知,这是一个错误 Uri 以及整个代码中没有其他关于如何获取缺失信息的信息。

希望这可能是我正在使用的代码片段的一些问题。也许玩它可以让我们了解一些。

关于javascript - 解压 JavaScript (p,a,c,k,e,d) 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41765083/

相关文章:

javascript - <Link> 点击时卡住页面

javascript - d3 : drawing elements correctly but not adding new data to the dom

c# - 提示用户在 Xamarin Forms 中启用蓝牙

c# - Win10 UWP、Prism/Unity 和单元测试以及类库、静默失败

c# - 将焦点设置到 uwp 中的文本框

c# - UWP 通知 Toast 已激活、更新和过期

javascript - Bootstrap 字形图标编辑未显示

javascript - 为什么 HTML 不允许我以与 JSX 相同的方式添加事件处理程序?

c# - 可以将 Cassandra 配置为同时使用内部和公共(public) IP 地址吗?

c# - 如何在 C# 中创建 Fluent Interface 并对某些方法有一些限制?