ФорумПрограммированиеPython → Python WebDriver light

Python WebDriver light

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Окт. 9, 2015, 3:44 д.п., спустя 1 час 46 минут 52 секунды

    @phpdude, nice job

    @adw0rd, это вот щас nice job!

    https://gist.github.com/phpdude/47d4630067e8f46e054c

    var system = require("system");
    var url = system.args[1];
    require('./phantom-full-load')(phantom, url, function (page, logs) {
    logs.forEach(function (i) {
    console.log('> ' + i);
    });
    result = page.evaluate(function () {
    return $('body *').attr('class');
    });
    console.log(result);
    }, function (error) {
    console.log(error);
    });
    view raw example.js hosted with ❤ by GitHub
    // This example shows how to render pages that perform AJAX calls
    // upon page load.
    //
    // Instead of waiting a fixed amount of time before doing the render,
    // we are keeping track of every resource that is loaded.
    //
    // Once all resources are loaded, we wait a small amount of time
    // (resourceWait) in case these resources load other resources.
    //
    // The page is rendered after a maximum amount of time (maxRenderTime)
    // or if no new resources are loaded.
    // from https://gist.github.com/cjoudrey/1341747
    var jquery = './vendor/jquery.min.js';
    var maxRenderWait = 30000;
    var resourceTimeout = 5000;
    module.exports = function (phantom, url, onOk, onError) {
    var page = require('webpage').create(), forcedRenderTimeout;
    page.viewportSize = {width: 1280, height: 1024};
    page.settings.resourceTimeout = resourceTimeout;
    var consoleLogs = [];
    function onLoad() {
    clearTimeout(forcedRenderTimeout);
    onOk(page, consoleLogs);
    phantom.exit();
    }
    page.onConsoleMessage = function (msg) {
    consoleLogs.push(JSON.stringify(msg));
    };
    page.onCallback = function (data) {
    onLoad();
    };
    page.onInitialized = function () {
    page.injectJs(jquery) || (console.log("Unable to inject jQuery") && phantom.exit());
    page.evaluate(function () {
    $(function () {
    window.callPhantom();
    });
    });
    page.evaluate(function () {
    var isFunction = function (o) {
    return typeof o == 'function';
    };
    var bind,
    slice = [].slice,
    proto = Function.prototype,
    featureMap;
    featureMap = {
    'function-bind': 'bind'
    };
    function has(feature) {
    var prop = featureMap[feature];
    return isFunction(proto[prop]);
    }
    // check for missing features
    if (!has('function-bind')) {
    // adapted from Mozilla Developer Network example at
    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind
    bind = function bind(obj) {
    var args = slice.call(arguments, 1),
    self = this,
    nop = function () {
    },
    bound = function () {
    return self.apply(this instanceof nop ? this : (obj || {}), args.concat(slice.call(arguments)));
    };
    nop.prototype = this.prototype || {}; // Firefox cries sometimes if prototype is undefined
    bound.prototype = new nop();
    return bound;
    };
    proto.bind = bind;
    }
    });
    };
    phantom.onError = page.onError = function (err) {
    consoleLogs.push(err);
    };
    page.open(url, function (status) {
    if (status !== "success") {
    onError(new Error('Unable to load url'));
    } else {
    forcedRenderTimeout = setTimeout(onLoad, maxRenderWait);
    }
    });
    };

    Спустя 10 сек.

    блядь чо за мудак сломал гит ссылки

    Сапожник без сапог
  • ArtemVortax

    Сообщения: 48 Репутация: N Группа: Адекваты

    Spritz Окт. 9, 2015, 11:24 д.п., спустя 7 часов 40 минут 41 секунду

    Фантомом или зомби вариант делать авторегистраторы/постеры? или не стоит заморачиваться?

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Окт. 9, 2015, 12:40 п.п., спустя 1 час 15 минут 38 секунд

    @ArtemVortax, самое то

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Окт. 9, 2015, 1:41 п.п., спустя 1 час 1 минуту 11 секунд

    Фантомом или зомби вариант делать авторегистраторы/постеры? или не стоит заморачиваться?

    @ArtemVortax, ну это если сайт проверок уйму имеет на js например. Если он такого не имеет, то смысла нет, это получится более ресурсоемко чем просто http сессии любой библиотекой. А если хочется автоматические полностью то да, конечно будет достаточно фантомов всяких

    Сапожник без сапог
  • ArtemVortax

    Сообщения: 48 Репутация: N Группа: Адекваты

    Spritz Окт. 10, 2015, 3:58 п.п., спустя 1 день 2 часа 16 минут

    Фантомом или зомби вариант делать авторегистраторы/постеры? или не стоит заморачиваться?

    @ArtemVortax, ну это если сайт проверок уйму имеет на js например. Если он такого не имеет, то смысла нет, это получится более ресурсоемко чем просто http сессии любой библиотекой. А если хочется автоматические полностью то да, конечно будет достаточно фантомов всяких

    @phpdude, спасибо

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Дек. 17, 2015, 8:43 д.п., спустя 67 дней 16 часов 44 минуты

    хваленый PhantomJS не умеет SSL SNI блеядь!!

    Сапожник без сапог
  • Nek

    Сообщения: 109 Репутация: N Группа: Адекваты

    Spritz Дек. 17, 2015, 10:33 д.п., спустя 1 час 50 минут 4 секунды

    Я не в теме но чем плох Selenium?

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Дек. 17, 2015, 10:59 д.п., спустя 25 минут 52 секунды

    Я не в теме но чем плох Selenium?

    @Nek, хз, исторически сложилось что это стал PhantomJS, но блядь SNI расстраивает что пиздец. Хз что делать, хоть патч пиши, но там 100мбайт кода блядь и C++, а я его не знаю )

    Сапожник без сапог
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz Дек. 21, 2015, 6:42 п.п., спустя 4 дня 7 часов 43 минуты

    хвалёный фантом не умеет даже HTMLSpanElement, а вам тут SNI подавай.

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Дек. 21, 2015, 8:47 п.п., спустя 2 часа 4 минуты 34 секунды

    хвалёный фантом не умеет даже HTMLSpanElement, а вам тут SNI подавай.

    @vasa_c, ссылку на баг покажи о чем ты

    Сапожник без сапог
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz Дек. 22, 2015, 8:46 д.п., спустя 11 часов 59 минут 33 секунды

    @vasa_c, ссылку на баг покажи о чем ты

    Нет HTMLSpanElement.
    Наверное, ещё каких-то интерфейсов нет, наткнулся только на это.
    Тещу сейчас библиотечку:

        expect(nodes.length).toBe(2);
        expect(nodes[0] instanceof HTMLDivElement).toBeTruthy();
        expect(nodes[1] instanceof HTMLSpanElement).toBeTruthy();
    

    Во всех браузерах нормально, в фантоме: Can't find variable: HTMLSpanElement. Div при этом есть.

    В консоле:

    phantomjs> HTMLDivElement
    {
       "prototype": {}
    }
    phantomjs> HTMLSpanElement
    Can't find variable: HTMLSpanElement
    

    Здесь тоже драма: PhantomJS Mocha 'Can't find variable: HTMLSpanElement' [stackoverflow.com]

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Дек. 22, 2015, 9:07 д.п., спустя 20 минут 49 секунд

    забавно.

    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!