wabbajack/Wabbajack.Lib/WebAutomation/WebAutomation.cs

73 lines
1.7 KiB
C#
Raw Normal View History

2019-10-24 01:22:11 +00:00
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using CefSharp;
using CefSharp.OffScreen;
using Wabbajack.Lib.LibCefHelpers;
2019-10-24 01:22:11 +00:00
namespace Wabbajack.Lib.WebAutomation
{
public class Driver : IDisposable
{
private IWebBrowser _browser;
private CefSharpWrapper _driver;
2019-10-24 01:22:11 +00:00
public Driver()
2019-10-24 01:22:11 +00:00
{
_browser = new ChromiumWebBrowser();
_driver = new CefSharpWrapper(_browser);
2019-10-24 01:22:11 +00:00
}
public static async Task<Driver> Create()
{
var driver = new Driver();
await driver._driver.WaitForInitialized();
2019-10-24 01:22:11 +00:00
return driver;
}
2020-04-10 01:29:53 +00:00
public async Task<Uri?> NavigateTo(Uri uri)
2019-10-24 01:22:11 +00:00
{
await _driver.NavigateTo(uri);
return await GetLocation();
2019-10-24 01:22:11 +00:00
}
2020-04-10 01:29:53 +00:00
public async ValueTask<Uri?> GetLocation()
2019-10-24 01:22:11 +00:00
{
try
{
return new Uri(_browser.Address);
}
catch (UriFormatException)
{
return null;
}
2019-10-24 01:22:11 +00:00
}
2020-05-28 22:31:01 +00:00
public Action<Uri?> DownloadHandler {
set => _driver.DownloadHandler = value;
}
2019-10-24 01:22:11 +00:00
public Task<string> GetAttr(string selector, string attr)
{
return _driver.EvaluateJavaScript($"document.querySelector(\"{selector}\").{attr}");
2019-10-24 01:22:11 +00:00
}
2020-05-28 22:31:01 +00:00
public Task<string> EvalJavascript(string js)
{
return _driver.EvaluateJavaScript(js);
}
2019-10-24 01:22:11 +00:00
public void Dispose()
{
_browser.Dispose();
2019-10-24 01:22:11 +00:00
}
public static void ClearCache()
{
Helpers.ClearCookies();
}
2019-10-24 01:22:11 +00:00
}
}