Я пытаюсь написать приложение на С#, используя CefSharp. Мое намерение состоит в том, чтобы получить все ссылки на данной странице, например,
https://wixlabs---dropbox-folder.appspot.com/index?instance=lp5CbqBbK6JUFzCW2hXENEgT4Jn0Q-U1-lIAgEbjeio.eyJpbnN0YW5jZUlkIjoiYjNiNzk5YjktNjE5MS00ZDM0LTg3ZGQtYjY2MzI1NWEwMDNhIiwiYXBwRGVmSWQiOiIxNDkyNDg2NC01NmQ1LWI5NGItMDYwZi1jZDU3YmQxNmNjMjYiLCJzaWduRGF0ZSI6IjIwMTgtMDEtMjJUMTg6Mzk6MjkuNjAwWiIsInVpZCI6bnVsbCwidmVuZG9yUHJvZHVjdElkIjpudWxsLCJkZW1vTW9kZSI6ZmFsc2V9&target=_top&width=728&compId=comp-j6bjhny1&viewMode=viewer-seo
Когда я загружаю страницу, открываю инструменты разработчика и выполняю
document.getElementsByTagName('a');
в инструментах разработчика я получаю 374 результата. Затем я выполняю следующий код из BrowserLoadingStateChanged:
private async Task ProcessLinksAsync()
{
var frame = browser.GetMainFrame();
var response = await frame.EvaluateScriptAsync("(function() { return document.getElementsByTagName('a'); })();", null);
ExpandoObject result = response.Result as ExpandoObject;
Console.WriteLine("Result:" + result);//What do I do here?
}
Я получаю объект Expando, который, кажется, ничего не содержит. Я говорю это, потому что я использовал точку останова и проверил объект. Я прошел через https://keyholesoftware.com/2019/02/11/create-your-own-web-bots-in-net-with-cefsharp/ , https://github.com/cefsharp/CefSharp/wiki/General-Usage#javascript-integration и вопросы по SO но не смог решить мою проблему. Я делаю что-то не так здесь? Мое фактическое намерение состоит в том, чтобы получить ссылки, а затем перейти к ним. Заранее спасибо.
РЕДАКТИРОВАТЬ: я использовал следующий скрипт в инструментах браузера и разработчика, оба возвращают 187 результатов, что является правильным.
(function() {
var links=document.getElementsByClassName('file-link');
var linksArray = new Array();
for (var i = 0; i < links.length; i++) {
linksArray[i] = String(links[i].href);
}
return linksArray;
})();
Но в моем приложении я получаю массив нулевой длины.
РЕДАКТИРОВАТЬ-2: я использовал следующий код для получения DOM: -
public void OnContextCreated(IWebBrowser browserControl, IBrowser browser, IFrame frame)
{
ContextCreated?.Invoke(this, frame);
const string script = "document.addEventListener('DOMContentLoaded', function(){ alert(document.links.length); });";
frame.ExecuteJavaScriptAsync(script);
}
Для каждого другого сайта, который я пробовал, код был успешным, за исключением URL-адреса, упомянутого выше. Может ли кто-нибудь сказать мне, что может быть не так, поскольку DOM загружается в инструменты разработки и полностью доступен. Итак, я думаю, что-то может отсутствовать в моем коде. Спасибо еще раз.