Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!
Здравствуйте, plastictown, Вы писали: P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!
Смотрите в MSDN.
Здравствуйте, plastictown, Вы писали:
P>Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!
Здравствуйте, Слава, Вы писали:
С>А зачем это решать на C++?
С>Погуглите по слову selenium
На C++ решать, потому как это условие первое и главное. Я селениум посмотрел, скачал WebDriver для .Net, теперь думаю, как это все прикрутить на C++. Вроде бы никто не говорил, что нельзя юзать .Net, но VS говорит: "selenium.webdriverbackedselenium.dll: Ошибка при загрузке библиотеки" и не компилится. Возможно ли вообще использовать эти библиотеки из C++?
Здравствуйте, plastictown, Вы писали:
P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!
А интернет доступен при этом? https://developers.google.com/speed/docs/insights/about?hl=ru — у гугла API есть для этого. Использовать его можно и из плюсов.
Спасибо, хороший вариант. но думаю, что от меня хотят страданий с использованием WebBrowser из .Net. Надо придумать как их него запускать нормальные браузеры
Здравствуйте, plastictown, Вы писали:
P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!
Странная задачка.
С одной стороны она очевидно тривиально решается и как раз на C++, с помощью UI Automation (которое поддерживается всеми браузерам, т.к. через него работают функции, позволяющие слепым и т.п. людям ими пользоваться). Несколько простейших строчек (установка поля адрес и потом ожидание разблокировки какой-нибудь подходящей кнопки) и элементарно получаем эффективное решение на C++, работающее с любыми браузерами.
С другой стороны ключевые слова типа READYSTATE_COMPLETE вроде как намекают на подгрузку через COM веб-движка и реакцию на соответствующее событие. Это тоже элементарно записывается в пару строк, но вот только это полностью противоречит условию задачи "открытие различными браузерами", т.к. соответствующий COM интерфейс есть только у браузера от MS.
С третьей стороны поставленную задачку легко решит элементарный скрипт на JS из одной строчки. Так что не очень понятно зачем вообще тут требуется C++.
P>Спасибо, хороший вариант. но думаю, что от меня хотят страданий с использованием WebBrowser из .Net. Надо придумать как их него запускать нормальные браузеры
За ваши деньги любые капризы
Здесь главное с бюджетом не промахнуться.
Здравствуйте, plastictown, Вы писали:
P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!
С IE все понятно. Гугли "BHO example C++" для примера. Подписываешься на DocumentCompleted событие из BHO, запускаешь таймер, и пока в цикле READYSTATE не будет Done — таймер не выключаешь.
С FF и Chrome, будет посложнее. Как вариант, я бы сделал простой плагин для них на JS, который бы писал в cookie время загрузки сайта. С++ прога мониторила бы обновление куки, и выдавала бы результат.
Альтернатива кукам — простой веб-запрос на свою страницу, с записью в базу. А уже из базы GET-ом вытягивать на С++.
Это все нетривиально, и требует извращений. Но раз задача тестовая, видимо хотят проверить твою сообразительность, а не идеальное продакш решение.
Самый извращенный вариант, который под силу только мыщгху Это сделать dll injection в процесс бразуера, промониторить WinAPI функции, которые вызываются при окончании загрузки страницы. Сделать подмену своими. Антивирь будет пищать — но решение самое крутое для тестового.
Еще можно покопать в сторону перехвата WM_ сообщений другого процесса.
А вообще, как написали выше, составитель задачи напорол с различными браузерами и ключевыми словами. Поэтому я бы в пояснительной записке отметил это. Либо уточнил у них задачу по почте. Слишком нетривиально для тестового. Есть например консольный браузер lynx, есть десятки других браузеров на основе движков gecko, chromium. Есть свеженький Edge, а есть умершный Netspace. Задача сформулирована некорректно. Хотя бы браузеры перечислили.
Здравствуйте, plastictown, Вы писали:
P>Здравствуйте, Слава, Вы писали:
С>>А зачем это решать на C++?
С>>Погуглите по слову selenium
P>На C++ решать, потому как это условие первое и главное. Я селениум посмотрел, скачал WebDriver для .Net, теперь думаю, как это все прикрутить на C++. Вроде бы никто не говорил, что нельзя юзать .Net, но VS говорит: "selenium.webdriverbackedselenium.dll: Ошибка при загрузке библиотеки" и не компилится. Возможно ли вообще использовать эти библиотеки из C++?
Только в С++ CLR. И я не представляю, как webautomation решит такую размытую задачу.
Здравствуйте, plastictown, Вы писали:
P>Здравствуйте, TimurSPB, Вы писали:
TSP>>А интернет доступен при этом? TSP>>https://developers.google.com/speed/docs/insights/about?hl=ru — у гугла API есть для этого. Использовать его можно и из плюсов.
P>Спасибо, хороший вариант. но думаю, что от меня хотят страданий с использованием WebBrowser из .Net. Надо придумать как их него запускать нормальные браузеры
WebBrowser — это обернутый IE7, который многие современные сайт не грузит. Из С++, можно подключится только к IE, используя BHO.
Если различными браузерами, то в BHO можно только User-Agent поменять разве что. На время загрузки это не влияет, но сервер будет думать,что к нему зашли например из Chrome.
Здравствуйте, plastictown, Вы писали:
P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!
Прикидываешься сервером или проксёй. Отдаёшь страницу и всё необходимое. Можешь в тело вставить javascript для определения полной загрузки будет делать ajax запрос по окончанию. Так можно любой браузер проверять, название в заголовке запроса. Только C++ тут не лучший вариант проще и быстрее на каком-нибуть скрипте реализовать.
Здравствуйте, plastictown, Вы писали:
P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!
Я бы через raw-сокет сделал. Сниффил бы все пакеты, в заголовках http указан браузер, начало и конец сессии(передачи страницы) тоже отследить можно. Но таким способом только http можно отследить https не получится.
Здравствуйте, plastictown, Вы писали:
P>Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE.
Типичное задание конторки в которой работать не надо. Забей.
Здравствуйте, plastictown, Вы писали:
P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!
А что такое "время открытия WEB страниц"? Загрузка основного документа? Загрузка всего остального? Готовность DOM?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, plastictown, Вы писали:
P>Спасибо, хороший вариант. но думаю, что от меня хотят страданий с использованием WebBrowser из .Net. Надо придумать как их него запускать нормальные браузеры
А зачем тогда с++? Понятно что есть с++ и CLR, но нафига?