この JavaScript を取得したサイトは、HTML を解析することを望んでいないようです。javascript 関数で動的な html を作成しますwr
。以下は、この JavaScript を実行し、結果のコードを解析するコードです。ただし、これがトレースするための単純なコードであるとは言えません
public void Test()
{
//C# object which will be accessed by javascript
var csharpObj = new MyCSharpObject();
//Create Javascript object
Type scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC"));
dynamic obj = Activator.CreateInstance(scriptType, false);
obj.Language = "Javascript";
obj.AddObject("csharp", csharpObj);
//Load Html (your string in question)
string html = @"<script type=""text/javascript"">wr(""<span>maddog"");wr(""@"");wr(""website-url.com</span>"")</script>";
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
//Create "wr" function
string script = "function wr(s){csharp.wr(s);}";
//Get the text of script tag
script += doc.DocumentNode.SelectSingleNode("//script").InnerText;
//Execute script
obj.Eval(script);
//Load the string created by javascript execution
doc.LoadHtml(csharpObj.Output);
//tada.....
var eMailAddress = doc.DocumentNode.InnerText;
Console.WriteLine(eMailAddress);
}
[ComVisible(true)]
public class MyCSharpObject
{
public string Output = "";
public void wr(string s)
{
Output += s;
}
}
- - - - 編集 - - - -
「すべての wr(*) 文字列を取得する」の書き方がわかりません
このようなソリューションが必要なようですが、HTMLを解析するために正規表現に依存しません
public void Test2()
{
string html = @"<script type=""text/javascript"">wr(""<span>maddog"");wr(""@"");wr(""website-url.com</span>"")</script>";
var parsedHtml = String.Join("",Regex.Matches(html, @"wr\(\""(.+?)\""\)")
.Cast<Match>()
.Select(m => m.Groups[1].Value));
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(parsedHtml);
var eMailAddress = doc.DocumentNode.InnerText;
}