Re: Открыть web-страницу из кода C++
От: alex_public  
Дата: 08.08.17 06:41
Оценка: +5
Здравствуйте, plastictown, Вы писали:

P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!


Странная задачка.

С одной стороны она очевидно тривиально решается и как раз на C++, с помощью UI Automation (которое поддерживается всеми браузерам, т.к. через него работают функции, позволяющие слепым и т.п. людям ими пользоваться). Несколько простейших строчек (установка поля адрес и потом ожидание разблокировки какой-нибудь подходящей кнопки) и элементарно получаем эффективное решение на C++, работающее с любыми браузерами.

С другой стороны ключевые слова типа READYSTATE_COMPLETE вроде как намекают на подгрузку через COM веб-движка и реакцию на соответствующее событие. Это тоже элементарно записывается в пару строк, но вот только это полностью противоречит условию задачи "открытие различными браузерами", т.к. соответствующий COM интерфейс есть только у браузера от MS.

С третьей стороны поставленную задачку легко решит элементарный скрипт на JS из одной строчки. Так что не очень понятно зачем вообще тут требуется C++.
Re: Открыть web-страницу из кода C++
От: MTD https://github.com/mtrempoltsev
Дата: 09.08.17 18:17
Оценка: +2
Здравствуйте, plastictown, Вы писали:

P>Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE.


Типичное задание конторки в которой работать не надо. Забей.
Re: Открыть web-страницу из кода C++
От: Nikita123 Россия  
Дата: 07.08.17 13:29
Оценка: -1
Здравствуйте, plastictown, Вы писали:
P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!
Смотрите в MSDN.
Желаю успеха,
Никита.
Re: Открыть web-страницу из кода C++
От: Слава  
Дата: 07.08.17 14:04
Оценка: +1
Здравствуйте, plastictown, Вы писали:

P>Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!


А зачем это решать на C++?

Погуглите по слову selenium
Re: Открыть web-страницу из кода C++
От: TimurSPB Интернет  
Дата: 07.08.17 20:54
Оценка: +1
Здравствуйте, plastictown, Вы писали:

P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!

А интернет доступен при этом?
https://developers.google.com/speed/docs/insights/about?hl=ru — у гугла API есть для этого. Использовать его можно и из плюсов.
Make flame.politics Great Again!
Открыть web-страницу из кода C++
От: plastictown Норвегия  
Дата: 07.08.17 12:21
Оценка:
Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!
Re[2]: Открыть web-страницу из кода C++
От: plastictown Норвегия  
Дата: 07.08.17 20:46
Оценка:
Здравствуйте, Слава, Вы писали:

С>А зачем это решать на C++?


С>Погуглите по слову selenium


На C++ решать, потому как это условие первое и главное. Я селениум посмотрел, скачал WebDriver для .Net, теперь думаю, как это все прикрутить на C++. Вроде бы никто не говорил, что нельзя юзать .Net, но VS говорит: "selenium.webdriverbackedselenium.dll: Ошибка при загрузке библиотеки" и не компилится. Возможно ли вообще использовать эти библиотеки из C++?
Re[2]: Открыть web-страницу из кода C++
От: plastictown Норвегия  
Дата: 07.08.17 22:04
Оценка:
Здравствуйте, TimurSPB, Вы писали:

TSP>А интернет доступен при этом?

TSP>https://developers.google.com/speed/docs/insights/about?hl=ru — у гугла API есть для этого. Использовать его можно и из плюсов.

Спасибо, хороший вариант. но думаю, что от меня хотят страданий с использованием WebBrowser из .Net. Надо придумать как их него запускать нормальные браузеры
Re[3]: Открыть web-страницу из кода C++
От: TimurSPB Интернет  
Дата: 08.08.17 11:32
Оценка:
P>Спасибо, хороший вариант. но думаю, что от меня хотят страданий с использованием WebBrowser из .Net. Надо придумать как их него запускать нормальные браузеры
За ваши деньги любые капризы
Здесь главное с бюджетом не промахнуться.
Make flame.politics Great Again!
Re: Открыть web-страницу из кода C++
От: TechL  
Дата: 08.08.17 14:01
Оценка:
Здравствуйте, 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. Задача сформулирована некорректно. Хотя бы браузеры перечислили.
Re[3]: Открыть web-страницу из кода C++
От: TechL  
Дата: 08.08.17 14:03
Оценка:
Здравствуйте, plastictown, Вы писали:

P>Здравствуйте, Слава, Вы писали:


С>>А зачем это решать на C++?


С>>Погуглите по слову selenium


P>На C++ решать, потому как это условие первое и главное. Я селениум посмотрел, скачал WebDriver для .Net, теперь думаю, как это все прикрутить на C++. Вроде бы никто не говорил, что нельзя юзать .Net, но VS говорит: "selenium.webdriverbackedselenium.dll: Ошибка при загрузке библиотеки" и не компилится. Возможно ли вообще использовать эти библиотеки из C++?


Только в С++ CLR. И я не представляю, как webautomation решит такую размытую задачу.
Re[3]: Открыть web-страницу из кода C++
От: TechL  
Дата: 08.08.17 14:07
Оценка:
Здравствуйте, 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.
Re: Открыть web-страницу из кода C++
От: kov_serg Россия  
Дата: 08.08.17 18:01
Оценка:
Здравствуйте, plastictown, Вы писали:

P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!

Прикидываешься сервером или проксёй. Отдаёшь страницу и всё необходимое. Можешь в тело вставить javascript для определения полной загрузки будет делать ajax запрос по окончанию. Так можно любой браузер проверять, название в заголовке запроса. Только C++ тут не лучший вариант проще и быстрее на каком-нибуть скрипте реализовать.
Re: Открыть web-страницу из кода C++
От: Valex Россия  
Дата: 09.08.17 16:15
Оценка:
Здравствуйте, plastictown, Вы писали:

P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!


Я бы через raw-сокет сделал. Сниффил бы все пакеты, в заголовках http указан браузер, начало и конец сессии(передачи страницы) тоже отследить можно. Но таким способом только http можно отследить https не получится.
Re: Открыть web-страницу из кода C++
От: Ops Россия  
Дата: 10.08.17 06:27
Оценка:
Здравствуйте, plastictown, Вы писали:

P>Здравствуйте, господа форумчане! Мне работодатель прислал тестовую задачку и озадачил очень сильно, т.к. я вообще не имею представления о механизмах, необходимых для решения ея. Собственно, задание: "Оценить время открытия WEB страниц различными браузерами". Из кода на C++. плюс ключевые слова: DocumentCompleted и READYSTATE_COMPLETE. Подскажите, пожалуйста, в какую сторону смотреть. Спасибо!


А что такое "время открытия WEB страниц"? Загрузка основного документа? Загрузка всего остального? Готовность DOM?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[3]: Открыть web-страницу из кода C++
От: Evgeniy Skvortsov Россия  
Дата: 15.08.17 13:54
Оценка:
Здравствуйте, plastictown, Вы писали:

P>Спасибо, хороший вариант. но думаю, что от меня хотят страданий с использованием WebBrowser из .Net. Надо придумать как их него запускать нормальные браузеры


А зачем тогда с++? Понятно что есть с++ и CLR, но нафига?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.