spiiin: (totoro)
Нашёл замечательную библиотеку Selenium по управлению браузерами, как headless (Phantom-JS/HTMLUnit), так и "настоящими" (Firefox/Chrome/IE/Safari и ещё десяток third-party драйверов для браузеров на любой вкус) локально или удалённо.

Позволяет "нажимать" на элементы, ожидать результатов асинхронных запросов по условию, выполнять JavaScript в контексте DOM-страницы и вообще почти любые фишки, которые умеет браузер.

Когда-то юзал для выполнения простых JavaScript на странице Greasemonkey, а для парсинга сайтов mechanize (уже мертва, приходится дописывать нужные фичи самому), теперь с этим проектом можно пойти намного дальше и наавтоматизировать всякого на Python или C# (а также Ruby, Java или JavaScript).
Tags:
spiiin: (2D)
Так как оживить IronPython для работы с Jupyter у меня не получилось (pyzmq собрать под него целый квест с кучей патчей, получилось только пересобрать своими силами IronClad и через него запустить IPython, чтобы выводить данные в Visio, как здесь), то вместо него научился пользоваться Python.NET, который позволяет загружать .NET-сборки в обычный Python и вызывать методы из них, что, собственно, мне  и требовалось.

На всём этом собрал примерчик, как загрузить готовый конфиг для CadEditor'а и отрендерить графику уровней Чёрного Плаща прямо в браузере:
http://nbviewer.jupyter.org/github/spiiin/CadEditor/blob/master/JupyterCadEditor/CadEditor-example-dwd.ipynb
Mar. 26th, 2012 10:34 pm

C# + PIL

spiiin: (Default)
Взять IronPython 2.6, PIL и модуль Ironclad для импорта библиотек от обычного питона в iron-версию.
Пишут, что Ironclad не поддерживает PIL, но у меня нормально интерпретируется.

//При загрузке создать картинку скриптом:
  1. const string IronPythonPath = "C:\\Program Files (x86)\\IronPython 2.6\\Lib";
  2. const string PythonPath = "C:\\Python26\\Lib\\site-packages";
  3. const int width = 64;
  4. const int height = 64;
  5. private void Form1_Load(object sender, EventArgs e)
  6. {
  7. try
  8. {
  9. ScriptEngine engine = Python.CreateEngine();
  10. //add path to PIL and Ironclad libraries
  11. var modulesPath = engine.GetSearchPaths();
  12. modulesPath.Add(IronPythonPath);
  13. modulesPath.Add(PythonPath);
  14. engine.SetSearchPaths(modulesPath);
  15. //send variables to script
  16. var scope = engine.CreateScope();
  17. scope.SetVariable("width", width);
  18. scope.SetVariable("height", height);
  19. //exec
  20. var res = engine.ExecuteFile("test.py", scope);
  21. string result = res.GetVariable<String>("result");
  22. //convert image data from string to bytes and make bitmap
  23. byte[] data = Encoding.ASCII.GetBytes(result);
  24. unsafe
  25. {
  26. fixed (byte* ptr = data)
  27. {
  28. Bitmap b = new Bitmap(width, height, width*3, System.Drawing.Imaging.PixelFormat.Format24bppRgb, new IntPtr(ptr));
  29. pictureBox1.Image = b;
  30. }
  31. }
  32. }
  33. catch (Exception ex)
  34. {
  35. MessageBox.Show(ex.ToString());
  36. }
  37. }
//Рисование
  1. import ironclad
  2. from PIL import Image, ImageDraw
  3. img = Image.new("RGB", (width,height));
  4. d = ImageDraw.Draw(img)
  5. d.ellipse([(0,0),(width,height)], fill = (0,255,0))
  6. result = img.tostring();
Код далеко не оптимальный, но рабочий ^_^
spiiin: (Default)
http://dranger.com/ffmpeg/ - туториал по использованию библиотеки FFMpeg
Перевел первую часть на C# (враппер Tao.FFmpeg):
100 строк кода )
http://pastebin.com/zshigtN9
- Версия Tao Framework взята из svn, почему-то постоянно падает на открытии файла, примерно как тут
- В папку с бинарником необходимо забросить библиотеки avcodec, avformat, avutil и avdevice из папки win32deps, либо как-то обеспечить их видимость.
- Получается выдиральщик кадров из видео на коленке, аналогичный по результату команде "ffmpeg -i input.dv -r 25 -t 00:00:01 -f image2 images%d.png"
Tags:

Profile

spiiin: (Default)
spiiin

September 2017

S M T W T F S
     1 2
34 567 89
101112131415 16
17181920212223
24252627282930

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 24th, 2017 05:46 pm
Powered by Dreamwidth Studios