Здесь есть несколько статей по CefSharp, но как правило примеры кода скудные, и не раскрываю как использовать библиотеку . То что здесь нашёл выкидывает исключения, в общем прошу помочь - привести пример . Как без загрузки фрейма получить html текст с исполненным javascript. Скрипты должны выполнятся все, как в браузере , а не отдельно указанный в Task .
Привожу пример с отображением в форме для CefSharp.WinForms , мне нужна аналогия кода для CefSharp.OffScreen 57 . DotNet 4.5.2
public partial class FormMain : Form
{
private ChromiumWebBrowser browser;
private CefSettings settings;
public FormMain()
{
InitializeComponent();
InitializeWebBrowser();
}
private void InitializeWebBrowser()
{
settings = new CefSettings();
settings.CefCommandLineArgs.Add("proxy-server", "37.75.9.131:8080");
settings.UserAgent = "Mozila 5.0";
Cef.Initialize(settings);
browser = new ChromiumWebBrowser(string.Empty) { Dock = DockStyle.Fill };
Controls.Add(browser);
}
private void btnLoad_Click(object sender, EventArgs e)
{
browser.Load("https://google.com");
}
private async void btnSource_Click(object sender, EventArgs e)
{
var doc = browser.GetMainFrame();
string text = await doc.GetTextAsync();
}
}
Таким образом я задал Proxy и UserAgent получил исходный код с обработанным JS спарсил текст страницы без разметки.
Html можно получить сл. образом : заменить string text = await doc.GetTextAsync(); на string html = await doc.GetSourceAsync();
Ответ
Пришёл к такому решению для CefSharp.OffScreen
private void btnGetText_Click(object sender, EventArgs e)
{
LoadFullText("https://google.com");
}
private async void LoadFullText(string url)
{
CefSettings settings = new CefSettings();
settings.CefCommandLineArgs.Add("proxy-server", "37.75.9.131:8080");
settings.UserAgent = "Mozila 5.0";
Cef.Initialize(settings);
using (var chromium = new ChromiumWebBrowser(string.Empty))
{
Thread.Sleep(1000);
await LoadPageAsync(chromium, url);
string text = await chromium.GetTextAsync();
}
}
public static Task LoadPageAsync(IWebBrowser browser, string address = null)
{
var tcs = new TaskCompletionSource
Для проверки работы просто вставил Thread.Sleep(1000); здесь нужно доработать.
Комментариев нет:
Отправить комментарий