Как загрузить изображение с помощью Selenium (любой версии)?

Мне было интересно, как можно использовать selenium / webdriver для загрузки изображения для страницы. Предполагая, что для загрузки изображения требуется сеанс пользователя, поэтому использование чистого URL-адреса бесполезно. Мы приветствуем любой образец кода.

23
задан Ali Salehi 25 July 2011 в 09:10
поделиться

1 ответ

Для моего варианта использования были 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;
}
0
ответ дан 29 November 2019 в 02:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: