C#获取JS值的方法
How to obtain JS values using C#
基本上,我需要 "window["_securedTouchToken"] = [data] " 中的数据,但由于网站是用 javascript 编码的,而我的代码是用 C# 编写的,所以我不知道是什么去做。我目前也在使用 RestSharp 和 NewtonsoftJson。
我的代码:
try
{
var clienttest = new RestClient("https://static.securedtouch.com/sdk/pong.js?body=eyJwaW5nVmVyc2lvbiI6IjEuMi4wcCIsImFwcElkIjoid2lzaCIsImFwcFNlc3Npb25JZCI6IjJhYTRhMTg5OWVhZmEzZjQxNTY1MTFmODc3Njk4ZTI0MDI0ODA5MjQzY2E5YTdlMTU3NDI2M2QxZmUzMTM5ZWQiLCJkZXZpY2VJZCI6IklkLWY5Y2UzOTRlLThkNjMtNGE5OS1hNDM3LTVlMjIzYjRmMmMxYSIsImRldmljZVR5cGUiOiJHZW55bW90aW9uLUFuZHJvaWQtR29vZ2xlIE5leHVzIDVYIiwiY2xpZW50VmVyc2lvbiI6IjMuNC4wYSIsImFwcFZlcnNpb24iOiI0LjM4LjAgKDEyNDgpIn0%3D");
clienttest.Proxy = new WebProxy(proxy.Proxy);
var requesttest = new RestRequest(Method.GET);
requesttest.AddHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko");
requesttest.AddHeader("Pragma", "no-cache");
requesttest.AddHeader("Accept", "*/*");
IRestResponse responsetest = clienttest.Execute(requesttest);
var contenttest = responsetest.Content;
Console.WriteLine(contenttest);
}
catch (WebException)
{
}
响应:
(function () {
window["_securedTouchToken"] = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoiYVkwVDRpLzN1MFUzcVZiMkllZVJDVEtuN0hrOGdjeHJlbEFheUdTRTB4dStQQ2VZK2Jqb09rT0lndDVaUUJvVmdJRnM0NmFnWk1FS3MrMVdsVjRwZW4xamNmVENnakt6VXZxazg5a1p1Uk8zS0JBcnRWd1U3Tmd2bzdvTk15ekVuYXBJT0haMkxzZlN5RHQ2OWJQVEdWekxiVHZrRVJnakM0azBkN0xnNFRZWUJoUzNRSTBmcGtwWjk5MkUxU3UwUnZsNVNES0lBSUhKMElYeVh6TEJzajlxQUJoZWo0NzdkZVNPMnZUWVhsd0lSVjYxTzZOUTUrQnd0aXVPQkc5bE5KL2hCSzlOUFVVRjFnUm8zMm85Z0E9PSIsImlhdCI6MTU4NTc2MTM1MCwiZXhwIjoxNTg1ODQ3NzUwfQ.tnrvmyniVy9gtG-n1PPGUx3bYU1gonYM2qID2l8x1ak';
document.dispatchEvent(new CustomEvent('SecuredTouchTokenReadyEvent'));
})();
JavaScript 代码未在 WebRequest 中执行。为此,您需要一个 Javascript 解释器,它内置于每个浏览器中。您可以使用 Jint 等库在 C# 中计算 JavaScript。但不推荐这样做,因为您需要将页面中的每个 JS 源文件传递到页面中。
我想你需要的是CEFSharp, which basically is a Browser that you can embed into your app. Good tutorial.。
如果你想使用 WebRequests 实现它,你需要自己查看 JS 并反向工程 JS 代码以在 C# 中实现它。
其实今天晚些时候我想出了办法。如果有人遇到与此类似的问题,这里有一个示例代码
String St = "super exemple of string key : text I want to keep - end of my string";
int pFrom = St.IndexOf("key : ") + "key : ".Length;
int pTo = St.LastIndexOf(" - ");
String result = St.Substring(pFrom, pTo - pFrom);
基本上,我需要 "window["_securedTouchToken"] = [data] " 中的数据,但由于网站是用 javascript 编码的,而我的代码是用 C# 编写的,所以我不知道是什么去做。我目前也在使用 RestSharp 和 NewtonsoftJson。
我的代码:
try
{
var clienttest = new RestClient("https://static.securedtouch.com/sdk/pong.js?body=eyJwaW5nVmVyc2lvbiI6IjEuMi4wcCIsImFwcElkIjoid2lzaCIsImFwcFNlc3Npb25JZCI6IjJhYTRhMTg5OWVhZmEzZjQxNTY1MTFmODc3Njk4ZTI0MDI0ODA5MjQzY2E5YTdlMTU3NDI2M2QxZmUzMTM5ZWQiLCJkZXZpY2VJZCI6IklkLWY5Y2UzOTRlLThkNjMtNGE5OS1hNDM3LTVlMjIzYjRmMmMxYSIsImRldmljZVR5cGUiOiJHZW55bW90aW9uLUFuZHJvaWQtR29vZ2xlIE5leHVzIDVYIiwiY2xpZW50VmVyc2lvbiI6IjMuNC4wYSIsImFwcFZlcnNpb24iOiI0LjM4LjAgKDEyNDgpIn0%3D");
clienttest.Proxy = new WebProxy(proxy.Proxy);
var requesttest = new RestRequest(Method.GET);
requesttest.AddHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko");
requesttest.AddHeader("Pragma", "no-cache");
requesttest.AddHeader("Accept", "*/*");
IRestResponse responsetest = clienttest.Execute(requesttest);
var contenttest = responsetest.Content;
Console.WriteLine(contenttest);
}
catch (WebException)
{
}
响应:
(function () {
window["_securedTouchToken"] = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoiYVkwVDRpLzN1MFUzcVZiMkllZVJDVEtuN0hrOGdjeHJlbEFheUdTRTB4dStQQ2VZK2Jqb09rT0lndDVaUUJvVmdJRnM0NmFnWk1FS3MrMVdsVjRwZW4xamNmVENnakt6VXZxazg5a1p1Uk8zS0JBcnRWd1U3Tmd2bzdvTk15ekVuYXBJT0haMkxzZlN5RHQ2OWJQVEdWekxiVHZrRVJnakM0azBkN0xnNFRZWUJoUzNRSTBmcGtwWjk5MkUxU3UwUnZsNVNES0lBSUhKMElYeVh6TEJzajlxQUJoZWo0NzdkZVNPMnZUWVhsd0lSVjYxTzZOUTUrQnd0aXVPQkc5bE5KL2hCSzlOUFVVRjFnUm8zMm85Z0E9PSIsImlhdCI6MTU4NTc2MTM1MCwiZXhwIjoxNTg1ODQ3NzUwfQ.tnrvmyniVy9gtG-n1PPGUx3bYU1gonYM2qID2l8x1ak';
document.dispatchEvent(new CustomEvent('SecuredTouchTokenReadyEvent'));
})();
JavaScript 代码未在 WebRequest 中执行。为此,您需要一个 Javascript 解释器,它内置于每个浏览器中。您可以使用 Jint 等库在 C# 中计算 JavaScript。但不推荐这样做,因为您需要将页面中的每个 JS 源文件传递到页面中。
我想你需要的是CEFSharp, which basically is a Browser that you can embed into your app. Good tutorial.。
如果你想使用 WebRequests 实现它,你需要自己查看 JS 并反向工程 JS 代码以在 C# 中实现它。
其实今天晚些时候我想出了办法。如果有人遇到与此类似的问题,这里有一个示例代码
String St = "super exemple of string key : text I want to keep - end of my string";
int pFrom = St.IndexOf("key : ") + "key : ".Length;
int pTo = St.LastIndexOf(" - ");
String result = St.Substring(pFrom, pTo - pFrom);