Мне было интересно, как можно использовать selenium / webdriver для загрузки изображения для страницы. Предполагая, что для загрузки изображения требуется сеанс пользователя, поэтому использование чистого URL-адреса бесполезно. Мы приветствуем любой образец кода.
Для моего варианта использования были cookie и другие проблемы, которые сделали другие подходы здесь неподходящими.
я закончил тем, что использовал XMLHttpRequest для заполнения FileReader (от , Как преобразовать изображение в строку base64 с помощью javascript, и затем назвав тот Селен использования ExecuteAsyncScript
(как показано в Селен и асинхронные вызовы JavaScript ). Это позволило мне добираться данные URL , которые были прямыми для парсинга.
Вот мой код C# для получения URL Данных:
public string ImageUrlToDataUrl(IWebDriver driver, string imageUrl)
{
var js = new StringBuilder();
js.AppendLine("var done = arguments[0];"); // The callback from ExecuteAsyncScript
js.AppendLine(@"
function toDataURL(url, callback) {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
var reader = new FileReader();
reader.onloadend = function() {
callback(reader.result);
}
reader.readAsDataURL(xhr.response);
};
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.send();
}"); // XMLHttpRequest -> FileReader -> DataURL conversion
js.AppendLine("toDataURL('" + imageUrl + "', done);"); // Invoke the function
var executor = (IJavaScriptExecutor) driver;
var dataUrl = executor.ExecuteAsyncScript(js.ToString()) as string;
return dataUrl;
}