initialize method
Initializes the headless browser
Implementation
Future<void> initialize() async {
if (_isDisposed) {
throw ScrapingException.validation(
'Cannot initialize a disposed browser',
isRetryable: false,
);
}
if (_headlessWebView != null) {
return;
}
final webViewSettings = config.toInAppWebViewSettings();
_headlessWebView = HeadlessInAppWebView(
initialSettings: webViewSettings,
onWebViewCreated: (controller) {
_controller = controller;
_log('Headless browser initialized');
},
onLoadStart: (controller, url) {
_log('Started loading: $url');
},
onLoadStop: (controller, url) {
_log('Finished loading: $url');
_pageLoadCompleter?.complete(true);
},
onReceivedError: (controller, request, error) {
_log(
'Error loading ${request.url}: ${error.description} (${error.type})',
isError: true,
);
_pageLoadCompleter?.completeError(
ScrapingException.network(
'Failed to load page: ${error.description} (${error.type})',
isRetryable: true,
),
);
},
onReceivedHttpError: (controller, request, errorResponse) {
_log(
'HTTP error loading ${request.url}: ${errorResponse.statusCode} ${errorResponse.reasonPhrase}',
isError: true,
);
_pageLoadCompleter?.completeError(
ScrapingException.http(
'HTTP error: ${errorResponse.statusCode} ${errorResponse.reasonPhrase}',
statusCode: errorResponse.statusCode,
isRetryable:
(errorResponse.statusCode ?? 0) >= 500 ||
errorResponse.statusCode == 429,
),
);
},
onConsoleMessage: (controller, consoleMessage) {
if (config.loggingEnabled) {
_log('Console: ${consoleMessage.message}');
}
},
);
await _headlessWebView!.run();
// Set up proxy if available
if (_proxy != null) {
await setProxy(_proxy!);
}
// Clear cookies and cache if configured
if (config.clearCookies) {
await CookieManager.instance().deleteAllCookies();
}
if (config.clearCache) {
await InAppWebViewController.clearAllCache();
}
}