Как получить в script значение var
Есть скрипт с json, мне нужно его вытянуть, скрипт есть в html.
<script>
var irep = new IREP.IREP({
appUrlSecure : '/50/',
appUrl: '/50/',
apiUrl: 'https://retailedge.intel.com/api/',
apiUrlSecure: 'https://retailedge.intel.com/api/',
user: {"currentUID":"38108de32851484dbdf1a0d475b16789","cultureCode":"ru-RU","storeChainId":312895,"countryCode":"RU","features":{"trainingOnlyStores":false"},
isRTL: false,
isMotech: true,
fileName: 'edgegames/stadium'
}, irep);
irep.execute();
</script>
Нашел решение на AngleSharp, но не могу в string преобразовать.
var config = Configuration.Default.WithJs();
//Create a new context for evaluating webpages with the given config
var context = BrowsingContext.New(config);
var document = await context.OpenAsync(req => req.Content(get.Result.Content.ReadAsStringAsync().Result));
var engine = context.GetService<JsScriptingService>();
var jsValue = engine.EvaluateScript(document, "irep");
var strings = jsValue.ToString();
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Вот, получился такой пример на базе консольного приложения
using HtmlAgilityPack;
using Newtonsoft.Json;
class Program
{
private static HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
static async Task Main(string[] args)
{
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0");
try
{
HtmlDocument doc = await GetIntelPageAsync("https://retailedge.intel.com/50/emea/edgegames/trainings");
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//script");
Regex regex = new Regex(@"IREP\(({.*}), irep\)", RegexOptions.Singleline);
foreach (HtmlNode node in nodes)
{
Match match = regex.Match(node.InnerHtml, 0);
if (match.Groups.Count > 1)
{
string json = match.Groups[1].Value;
dynamic data = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(data.user.currentUID);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
private static async Task<HtmlDocument> GetIntelPageAsync(string url)
{
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url))
{
//request.Headers.Add("Cookie", "<вставить свои куки и раскомментировать>");
using (HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead))
{
response.EnsureSuccessStatusCode();
using (Stream stream = await response.Content.ReadAsStreamAsync())
{
HtmlDocument doc = new HtmlDocument();
doc.Load(stream);
return doc;
}
}
}
}
}
Нужно вставить свои куки, которые были получены при авторизации. Я просто взял эту длинную строчку из заголовка запроса браузера и вставил в код. Можно еще попытаться добыть эти куки реализовав процесс аутентификации, но это уже другая интересная история.
Вывод в консоль
3c5896397fb240d8be432fb7ba10baa5
Если без кук, вывод в консоль такой
00000000000000000000000000000000