{"id":460474,"date":"2025-05-22T09:00:06","date_gmt":"2025-05-22T09:00:06","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=460474"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=460474","title":{"rendered":"<span>\u041e\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443: \u043a\u0430\u043a \u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438 \u0441 HH \u0438 SuperJob \u043d\u0430 C#<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0430\u043d\u0430\u043b\u0438\u0437 \u0440\u044b\u043d\u043a\u0430 \u0442\u0440\u0443\u0434\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u043c \u043a\u0430\u043a \u0434\u043b\u044f \u0441\u043e\u0438\u0441\u043a\u0430\u0442\u0435\u043b\u0435\u0439, \u0438\u0449\u0443\u0449\u0438\u0445 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439, \u0438\u0437\u0443\u0447\u0430\u044e\u0449\u0438\u0445 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u0443. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0431\u044b\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u044b \u0434\u0432\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u2014 <em>HH.ru<\/em> \u0438 <em>SuperJob<\/em>.<\/p>\n<h4> HH.ru \u0438 Superjob<\/h4>\n<p> \u042d\u0442\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0441\u0442\u0430\u043b\u0438 \u043b\u0438\u0434\u0435\u0440\u0430\u043c\u0438 \u0432 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435: \u043e\u043d\u0438 \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 80% \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439 \u0432 \u0421\u041d\u0413, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442 \u043a\u043e\u043d\u0442\u0435\u043d\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0441 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f.<\/p>\n<h4>\u0412\u044b\u0431\u043e\u0440 C# \u0438 WPF<\/h4>\n<p>\u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u0442\u043e <em>C#<\/em> \u0438 <em>WPF<\/em> \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0442\u0430\u043d\u0434\u0435\u043c\u043e\u043c \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. <em>C#<\/em>, \u043a\u0430\u043a \u044f\u0437\u044b\u043a \u0441 \u0431\u043e\u0433\u0430\u0442\u043e\u0439 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <em>AngleSharp<\/em> \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0438\u043b\u0438 <em>HttpClient<\/em> \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432), \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0433\u043e \u0441\u0442\u0440\u043e\u0433\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u0440\u0438\u0441\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 <em>API<\/em> \u0438 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p><em>WPF<\/em>, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 <em>desktop<\/em>-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0432\u0435\u0431-\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0438\u043b\u0438 \u043a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445, <em>WPF<\/em> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0433\u043b\u0443\u0431\u043e\u043a\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u041e\u0421 <em>Windows<\/em>, \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439 \u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 \u0432\u0430\u0436\u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u043b\u0438\u043a\u0430 \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 Python \u0438\u043b\u0438 JavaScript? <\/h4>\n<p>\u0425\u043e\u0442\u044f \u044d\u0442\u0438 \u044f\u0437\u044b\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, <em>C#<\/em> \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 \u0434\u043e\u043b\u0433\u043e\u0441\u0440\u043e\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, <em>WPF<\/em> \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 <em>EXE<\/em>-\u0444\u0430\u0439\u043b, \u0447\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 runtime-\u0441\u0440\u0435\u0434.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c, \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043c\u043e\u0449\u044c <em>C#<\/em> \u0434\u043b\u044f \u0431\u044d\u043a\u0435\u043d\u0434\u0430\u00a0\u0438 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c <em>WPF<\/em> \u0434\u043b\u044f \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0446\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.<\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435: \u0438\u0437\u0443\u0447\u0430\u0435\u043c \u0441\u0430\u0439\u0442\u044b, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442<\/h3>\n<h4>\u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b HH.ru \u0438 SuperJob<\/h4>\n<p>\u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u0441\u0430\u0439\u0442\u044b. \u041e\u0431\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"170\" width=\"170\">\n<p align=\"center\">\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0430\u0439\u0442\u0430<\/p>\n<\/td>\n<td data-colwidth=\"261\" width=\"261\">\n<p align=\"center\">HH.RU<\/p>\n<\/td>\n<td>\n<p align=\"center\">SuperJob<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"170\" width=\"170\">\n<p align=\"center\">HTML\u2011\u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430 <\/p>\n<\/td>\n<td data-colwidth=\"261\" width=\"261\">\n<p align=\"center\">\u0412\u0430\u043a\u0430\u043d\u0441\u0438\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0430\u0445 \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c\u00a0<code>magritte-redesign<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0430\u043a\u0430\u043d\u0441\u0438\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0430\u0445 \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c<code>f-test-search-result-item<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"170\" width=\"170\">\n<p align=\"center\">\u041f\u043e\u0438\u0441\u043a \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439<\/p>\n<\/td>\n<td data-colwidth=\"261\" width=\"261\">\n<p align=\"left\">\u0414\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u0438\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0433\u043e\u0440\u043e\u0434\u0430\u043c, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043b\u043e\u0432,<u> \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0437\u043d\u0430\u0447\u043a\u043e\u043c +<\/u><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u0438\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0433\u043e\u0440\u043e\u0434\u0430\u043c, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043b\u043e\u0432,<u> \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u043d\u0430 %20<\/u><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0412\u044b\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/h4>\n<p>\u0414\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043d\u0430 C# \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<ul>\n<li>\n<p><em>AngleSharp<\/em> &#8212; \u043e\u0434\u043d\u0430 \u0438\u0437 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 <em>HTML<\/em> <\/p>\n<\/li>\n<li>\n<p><em>Newtonsoft.Json<\/em> &#8212; \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0447\u0435\u0440\u0435\u0437 <em>API<\/em><\/p>\n<\/li>\n<li>\n<p><em>Epplus<\/em> &#8212; \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c <em>Excel<\/em> \u0444\u0430\u0439\u043b\u044b<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/api.hh.ru\/areas\" rel=\"noopener noreferrer nofollow\">API \u043e\u0442 HH.ru<\/a>.<\/p>\n<h4>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h4>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434, co\u0445\u0440\u0430\u043d\u044f\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u0445. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b <em>MainWindow.xaml <\/em>\u0441 \u043b\u043e\u0433\u0438\u043a\u043e\u0439<em> MainWindow.xaml.cs<\/em>:<\/p>\n<details class=\"spoiler\">\n<summary>MainWindow.xaml<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>MainWindow.xaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;Window x:Class=\"SearchJobParser.MainWindow\"         xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\"         xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\"         xmlns:d=\"http:\/\/schemas.microsoft.com\/expression\/blend\/2008\"         xmlns:mc=\"http:\/\/schemas.openxmlformats.org\/markup-compatibility\/2006\"         xmlns:local=\"clr-namespace:SearchJobParser\"         mc:Ignorable=\"d\"         Title=\"\u041f\u0430\u0440\u0441\u0435\u0440 \u0441\u0430\u0439\u0442\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\" Icon=\"Resources\/search.ico\" MaxHeight=\"350\" MinHeight=\"350\" MaxWidth=\"500\" MinWidth=\"500\"&gt;     &lt;Grid&gt;         &lt;Grid.RowDefinitions&gt;             &lt;RowDefinition Height=\"0.05*\"\/&gt;             &lt;RowDefinition Height=\"*\"\/&gt;             &lt;RowDefinition Height=\"0.05*\"\/&gt;         &lt;\/Grid.RowDefinitions&gt;         &lt;Frame x:Name=\"mainFrame\" Grid.Row=\"1\"\/&gt;         &lt;Grid Grid.Row=\"0\" Style=\"{StaticResource rowBorder}\"\/&gt;         &lt;Grid Grid.Row=\"2\" Style=\"{StaticResource rowBorder}\"\/&gt;              &lt;\/Grid&gt; &lt;\/Window&gt;<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>MainWindow.xaml.cs<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using SearchJobParser.Class.Service; using SearchJobParser.Pages; using System.Windows;  namespace SearchJobParser {     \/\/\/ &lt;summary&gt;     \/\/\/ Interaction logic for MainWindow.xaml     \/\/\/ &lt;\/summary&gt;     public partial class MainWindow : Window     {         public MainWindow()         {             InitializeComponent();             mainFrame.Navigate(new mainPage());             mainFrame.NavigationUIVisibility = System.Windows.Navigation.NavigationUIVisibility.Hidden;             Manager.mainFrame = mainFrame;         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u0438\u043b\u0435\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b <em>App.xaml<\/em>:<\/p>\n<details class=\"spoiler\">\n<summary>App.xaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;Application x:Class=\"SearchJobParser.App\"              xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\"              xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\"              xmlns:local=\"clr-namespace:SearchJobParser\"              StartupUri=\"MainWindow.xaml\"&gt;     &lt;Application.Resources&gt;         &lt;Style TargetType=\"Border\"&gt;             &lt;Setter Property=\"CornerRadius\" Value=\"5\"\/&gt;         &lt;\/Style&gt;         &lt;Style TargetType=\"TextBox\"&gt;             &lt;Setter Property=\"Width\" Value=\"300\"\/&gt;             &lt;Setter Property=\"Height\" Value=\"27\"\/&gt;             &lt;Setter Property=\"Margin\" Value=\"0 10 0 0\"\/&gt;             &lt;Setter Property=\"FontSize\" Value=\"16\"\/&gt;         &lt;\/Style&gt;         &lt;Style TargetType=\"Button\"&gt;             &lt;Setter Property=\"Width\" Value=\"100\"\/&gt;             &lt;Setter Property=\"Height\" Value=\"30\"\/&gt;             &lt;Setter Property=\"Margin\" Value=\"5 15 0 0\"\/&gt;             &lt;Setter Property=\"ItemsControl.Background\" Value=\"PeachPuff\"\/&gt;         &lt;\/Style&gt;         &lt;Style TargetType=\"TextBlock\"&gt;             &lt;Setter Property=\"FontSize\" Value=\"16\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"rowBorder\"&gt;             &lt;Setter Property=\"ItemsControl.Background\" Value=\"Peru\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"preview\"&gt;             &lt;Setter Property=\"ItemsControl.Height\" Value=\"30\"\/&gt;             &lt;Setter Property=\"ItemsControl.Width\" Value=\"30\"\/&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"400 -25 0 0\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"JobTitle\"&gt;             &lt;Setter Property=\"ItemsControl.FontWeight\" Value=\"Bold\"\/&gt;             &lt;Setter Property=\"ItemsControl.FontSize\" Value=\"20\"\/&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"5 5 0 0\"\/&gt;             &lt;Setter Property=\"ItemsControl.MaxWidth\" Value=\"300\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"main\"&gt;             &lt;Setter Property=\"ItemsControl.Background\" Value=\"FloralWhite\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"status\"&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"0 15 0 0\"\/&gt;             &lt;Setter Property=\"ItemsControl.FontSize\" Value=\"16\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"cities\"&gt;             &lt;Setter Property=\"ItemsControl.Width\" Value=\"330\"\/&gt;             &lt;Setter Property=\"ItemsControl.Height\" Value=\"27\"\/&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"20 5 0 0\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"jobs\"&gt;             &lt;Setter Property=\"ItemsControl.Width\" Value=\"150\"\/&gt;             &lt;Setter Property=\"ItemsControl.Height\" Value=\"27\"\/&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"120 5 0 0\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"text\"&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"140 2.5 0 0\"\/&gt;             &lt;Setter Property=\"ItemsControl.FontSize\" Value=\"14\"\/&gt;         &lt;\/Style&gt;         &lt;Style TargetType=\"WrapPanel\"&gt;             &lt;Setter Property=\"HorizontalAlignment\" Value=\"Center\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"Img\"&gt;             &lt;Setter Property=\"ItemsControl.Width\" Value=\"20\"\/&gt;             &lt;Setter Property=\"ItemsControl.Height\" Value=\"20\"\/&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"0 0 5 0\"\/&gt;             &lt;Setter Property=\"ItemsControl.HorizontalAlignment\" Value=\"Left\"\/&gt;         &lt;\/Style&gt;     &lt;\/Application.Resources&gt; &lt;\/Application&gt;<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f  \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><em>Pages<\/em> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b<\/p>\n<\/li>\n<li>\n<p><em>Class<\/em> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p><em>Class\/Engine<\/em> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0430\u0440\u0441\u0435\u0440\u0430<\/p>\n<\/li>\n<li>\n<p><em>Class\/Model<\/em> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430<\/p>\n<\/li>\n<li>\n<p><em>Class\/Service<\/em> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430<\/p>\n<\/li>\n<li>\n<p><em>Resources<\/em> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0438\u043a\u043e\u043d\u043a\u0438 \u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ul>\n<h3>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430<\/h3>\n<h4>\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f Pages<\/h4>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0440\u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0440\u0430\u0431\u043e\u0442\u044b: \u043e\u0442 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439 \u0434\u043e \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430. \u042d\u0442\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u2014 \u00ab\u043b\u0438\u0446\u043e\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u043d\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u043a\u0430\u043a \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0438\u043d\u0433, \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0443 \u0438 UX \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442. \u041a\u043e\u0434 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b:<\/p>\n<ul>\n<li>\n<p><strong>\u0418\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044f\u0446\u0438\u044f<\/strong>\u00a0(\u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u0437\u0430\u0434\u0430\u0447\u0443),<\/p>\n<\/li>\n<li>\n<p><strong>Reactive UI<\/strong>\u00a0(\u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043c\u044b\u0448\u0438, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435),<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c<\/strong>\u00a0(\u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430).<\/p>\n<p> \u0412 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b:<\/p>\n<\/li>\n<li>\n<p><em>mainPage.xaml &#8212; <\/em>\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0441\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 (\u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044f, \u0433\u043e\u0440\u043e\u0434, \u0441\u0430\u0439\u0442)  <\/p>\n<\/li>\n<li>\n<p><em>resultPage.xaml &#8212; <\/em>\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<li>\n<p><em>exrtaInfoPage.xaml &#8212; <\/em>\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430<code><em>mainPage.xaml<\/em><\/code><em>\u00a0<\/em>\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u043d\u0430\u00a0<em>ComboBox<\/em>\u00a0\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0420\u043e\u0441\u0441\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 <em>API HH.ru.\u00a0<\/em>\u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d \u0440\u0435\u0433\u0438\u043e\u043d \u0441 \u0433\u043e\u0440\u043e\u0434\u0430\u043c\u0438, \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439\u00a0<em>ComboBox<\/em>\u00a0\u0434\u043b\u044f \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f.<\/p>\n<blockquote>\n<p>\u041f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 \u041c\u043e\u0441\u043a\u0432\u044b \u0438\u043b\u0438 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0430 \u0432 <em>API<\/em> \u0433\u043e\u0440\u043e\u0434\u0430 \u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u041b\u041e \u0438 \u041c\u041e.<\/p>\n<\/blockquote>\n<p>\u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 <code><em>resultPage.xaml<\/em><\/code><em> <\/em>\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432<em> ListBox. <\/em>\u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 Excel. <\/p>\n<p>\u0414\u0432\u043e\u0439\u043d\u043e\u0439 \u043a\u043b\u0438\u043a \u043f\u043e \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443\u00a0<code>extraInfoPage<\/code>. \u041a\u043d\u043e\u043f\u043a\u0430 \u00ab\u041e\u0442\u043a\u0440\u044b\u0442\u044c\u00bb \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u041b\u043e\u0433\u043e\u0442\u0438\u043f <em>HH.ru\/SuperJob<\/em> \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u00a0<em>JobSiteName<\/em>.<\/p>\n<details class=\"spoiler\">\n<summary>Pages<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>mainPage.xaml<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>mainPage.xaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;Page x:Class=\"SearchJobParser.Pages.mainPage\"       xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\"       xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\"       xmlns:mc=\"http:\/\/schemas.openxmlformats.org\/markup-compatibility\/2006\"        xmlns:d=\"http:\/\/schemas.microsoft.com\/expression\/blend\/2008\"        xmlns:local=\"clr-namespace:SearchJobParser.Pages\"       mc:Ignorable=\"d\"        d:DesignHeight=\"280\" d:DesignWidth=\"500\"       Title=\"mainPage\"&gt;     &lt;Grid&gt;         &lt;StackPanel Grid.Row=\"1\" Style=\"{StaticResource main}\"&gt;             &lt;TextBlock x:Name=\"tbStatus\" Style=\"{StaticResource status}\"\/&gt;             &lt;TextBox Name=\"tbxSearch\"\/&gt;             &lt;WrapPanel&gt;                 &lt;TextBlock Text=\"\u0412\u044b\u0431\u043e\u0440 \u0433\u043e\u0440\u043e\u0434\u0430\" Style=\"{StaticResource text}\"\/&gt;                 &lt;ComboBox Name=\"cmbParentCities\" Style=\"{StaticResource cities}\"\/&gt;                 &lt;TextBlock Text=\"\u0412\u044b\u0431\u043e\u0440 \u043f\u0440\u0438\u0433\u043e\u0440\u043e\u0434\u0430\" Style=\"{StaticResource text}\"Name=\"tbChildCities\"\/&gt;                 &lt;ComboBox Name=\"cmbChildCities\" Style=\"{StaticResource cities}\"\/&gt;                 &lt;TextBlock Text=\"\u0412\u044b\u0431\u043e\u0440 \u0441\u0430\u0439\u0442\u0430\" Style=\"{StaticResource text}\"\/&gt;                 &lt;ComboBox Name=\"cmbJobSite\" Style=\"{StaticResource jobs}\"\/&gt;             &lt;\/WrapPanel&gt;             &lt;Button x:Name=\"btnSearch\" Content=\"\u041f\u043e\u0438\u0441\u043a\"\/&gt;         &lt;\/StackPanel&gt;     &lt;\/Grid&gt; &lt;\/Page&gt;<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>mainPage.xaml.cs<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using SearchJobParser.Class.Engine; using SearchJobParser.Class.Model; using SearchJobParser.Class.Service; using System.Windows; using System.Windows.Controls;  namespace SearchJobParser.Pages {     \/\/\/ &lt;summary&gt;     \/\/\/ Interaction logic for mainPage.xaml     \/\/\/ &lt;\/summary&gt;     public partial class mainPage : Page     {         private ResourceCities instance = new ResourceCities();         private EngineParser parsing;         private string[] parentCities = null;         private string[] childCities = null;         private string city = null;         private string job = null;         private string link = null;          public mainPage()         {             InitializeComponent();             cmbJobSite.ItemsSource = new string[] { \"HH.RU\",  \"SuperJob\" };             cmbJobSite.SelectedIndex = 0;             cmbChildCities.Visibility = Visibility.Hidden;             tbChildCities.Visibility = Visibility.Hidden;             tbxSearch.Text = \"\u0412\u043f\u0438\u0448\u0438 \u043f\u0440\u043e\u0444\u0435\u0441\u0438\u044e\";             tbxSearch.MouseEnter += (sender, e) =&gt; tbxSearch.Text = tbxSearch.Text == \"\u0412\u043f\u0438\u0448\u0438 \u043f\u0440\u043e\u0444\u0435\u0441\u0438\u044e\" ? \"\" : tbxSearch.Text;             tbxSearch.MouseLeave += (sender, e) =&gt; tbxSearch.Text = tbxSearch.Text == \"\" ? \"\u0412\u043f\u0438\u0448\u0438 \u043f\u0440\u043e\u0444\u0435\u0441\u0438\u044e\" : tbxSearch.Text;             cmbParentCities.PreviewMouseDown += (sender, e) =&gt; GetParentCities();             cmbParentCities.SelectionChanged += (sender, e) =&gt; GetChildCities(cmbParentCities.SelectedValue.ToString());             btnSearch.Click += (sender, e) =&gt;             {                 if (tbxSearch.Text != \"\u0412\u043f\u0438\u0448\u0438 \u043f\u0440\u043e\u0444\u0435\u0441\u0438\u044e\" &amp;&amp; tbxSearch.Text != \"\" &amp;&amp; cmbParentCities.SelectedIndex &gt; -1 &amp;&amp; (cmbChildCities.Visibility == Visibility.Hidden || cmbChildCities.Visibility == Visibility.Visible &amp;&amp; cmbChildCities.SelectedIndex &gt; -1))                 {                     city = GetSelectedCity();                     job = GetJobTitle();                     if (cmbJobSite.SelectedIndex == (int)JobSiteName.HHRU)                     {                         parsing = new EngineHH();                         link = $\"https:\/\/hh.ru\/search\/vacancy?text={job}+{city}&amp;from=suggest_post&amp;salary=&amp;ored_clusters=true&amp;only_with_salary=true&amp;hhtmFrom=vacancy_search_list&amp;hhtmFromLabel=vacancy_search_line\";                     }                     else                     {                         parsing = new EngineSJ();                         link = $\"https:\/\/russia.superjob.ru\/vacancy\/search\/?keywords={job}%20{city}&amp;payment_defined=1&amp;click_from=facet\";                     }                     parsing.ParsingVacancies(link);                     parsing.ParsingNotification += (senderNotice, eNotice) =&gt;                     {                         if (eNotice == \"\u0412\u0441\u0435 \u0441\u043f\u0430\u0440\u0441\u0438\u043b\")                             Manager.mainFrame.Navigate(new resultPage(parsing.GetParsingData()));                         else                             tbStatus.Text = eNotice;                     };                 }                 else                     MessageBox.Show(\"\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043b\u0438\", \"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\", MessageBoxButton.OK, MessageBoxImage.Warning);             };         }         private void GetParentCities()         {             parentCities = instance.GetCities();             if (parentCities != null)                 cmbParentCities.ItemsSource = parentCities;             else                 MessageBox.Show(\"\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0441 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043c\u0435\u043d\u044e \u0432\u044b\u0431\u043e\u0440\u0430\", \"\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\", MessageBoxButton.OK, MessageBoxImage.Error);         }         private string GetJobTitle() =&gt; tbxSearch.Text.Replace(\"++\", \"%2B%2B\").Replace(\"#\", \"%23\").Replace(\"\/\", \"%2F\").Replace(\" \", \"+\");          private string GetSelectedCity()         {             if (cmbParentCities.SelectedValue.ToString() == \"\u041c\u043e\u0441\u043a\u0432\u0430\" || cmbParentCities.SelectedValue.ToString() == \"\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\")                 return cmbParentCities.SelectedValue.ToString();             else             {                 string[] temp = cmbChildCities.SelectedValue.ToString().Split('(');                 return temp[0].Trim();             }         }         private void GetChildCities(string childCity)         {             childCities = instance.GetChildCities(childCity);             if (childCities != null)             {                 cmbChildCities.Visibility = Visibility.Visible;                 tbChildCities.Visibility = Visibility.Visible;                 cmbChildCities.ItemsSource = childCities;             }             else             {                 cmbChildCities.Visibility = Visibility.Hidden;                 tbChildCities.Visibility = Visibility.Hidden;                 cmbChildCities.ItemsSource = null;             }         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>resultPage.xaml<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>resultPage.xaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;Page x:Class=\"SearchJobParser.Pages.resultPage\"       xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\"       xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\"       xmlns:mc=\"http:\/\/schemas.openxmlformats.org\/markup-compatibility\/2006\"        xmlns:d=\"http:\/\/schemas.microsoft.com\/expression\/blend\/2008\"        xmlns:local=\"clr-namespace:SearchJobParser.Pages\"       mc:Ignorable=\"d\"        d:DesignHeight=\"280\" d:DesignWidth=\"500\"       Title=\"resultPage\"&gt;     &lt;Grid&gt;         &lt;StackPanel Style=\"{StaticResource main}\"&gt;             &lt;ScrollViewer Name=\"scroll\" CanContentScroll=\"True\" Height=\"150\"&gt;                 &lt;ListBox x:Name=\"lbxJobs\"\/&gt;             &lt;\/ScrollViewer&gt;             &lt;WrapPanel&gt;                 &lt;Button Name=\"btnBack\"&gt;                     &lt;WrapPanel&gt;                         &lt;Image Source=\"\/Resources\/back.png\" Style=\"{StaticResource Img}\"\/&gt;                         &lt;TextBlock Text=\"\u041d\u0430\u0437\u0430\u0434\"\/&gt;                     &lt;\/WrapPanel&gt;                 &lt;\/Button&gt;                 &lt;Button Name=\"btnExport\"&gt;                     &lt;WrapPanel&gt;                         &lt;Image Source=\"\/Resources\/report.png\" Style=\"{StaticResource Img}\"\/&gt;                         &lt;TextBlock Text=\"\u042d\u043a\u0441\u043f\u043e\u0440\u0442\"\/&gt;                     &lt;\/WrapPanel&gt;                 &lt;\/Button&gt;             &lt;\/WrapPanel&gt;         &lt;\/StackPanel&gt;     &lt;\/Grid&gt; &lt;\/Page&gt;<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>resultPage.xaml.cs<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using SearchJobParser.Class.Model; using SearchJobParser.Class.Service; using System.Collections.Generic; using System.Windows; using System.Windows.Controls;  namespace SearchJobParser.Pages {     \/\/\/ &lt;summary&gt;     \/\/\/ Interaction logic for resultPage.xaml     \/\/\/ &lt;\/summary&gt;     public partial class resultPage : Page     {         private static List&lt;ParseData&gt; syncData;         private ExcelMaker excel = new ExcelMaker();         public resultPage(object data)         {             InitializeComponent();             btnBack.Click += (sender, e) =&gt; Manager.mainFrame.GoBack();             btnExport.Click += (sender, e) =&gt;             {                 if(syncData?.Count &gt; 0)                 {                     excel.SaveData(ref syncData);                     MessageBox.Show(\"\u0421\u043f\u0430\u0440\u0441\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 excel \u0444\u0430\u0439\u043b\", \"\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445\", MessageBoxButton.OK, MessageBoxImage.Information);                 }                  else                     MessageBox.Show(\"\u041d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445\", \"\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445\", MessageBoxButton.OK, MessageBoxImage.Warning);             };             if (data is List&lt;ParseData&gt;)             {                 syncData = data as List&lt;ParseData&gt;;                 foreach (ParseData item in (data as List&lt;ParseData&gt;))                     lbxJobs.Items.Add($\"{item.JobTitle}\\n{item.Salary}\\n{item.Format} {item.Worktime}\");             }              else                 lbxJobs.Items.Add(\"\u043f\u0443\u0441\u0442\u043e\");             lbxJobs.MouseDoubleClick += (sender, e) =&gt; Manager.mainFrame.Navigate(new extraInfoPage(syncData[lbxJobs.SelectedIndex]));          }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>exrtaInfoPage.xaml<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>exrtaInfoPage.xaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;Page x:Class=\"SearchJobParser.Pages.extraInfoPage\"       xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\"       xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\"       xmlns:mc=\"http:\/\/schemas.openxmlformats.org\/markup-compatibility\/2006\"        xmlns:d=\"http:\/\/schemas.microsoft.com\/expression\/blend\/2008\"        xmlns:local=\"clr-namespace:SearchJobParser.Pages\"       mc:Ignorable=\"d\"        d:DesignHeight=\"280\" d:DesignWidth=\"500\"       Title=\"extraInfoPage\"&gt;     &lt;Grid&gt;         &lt;StackPanel Style=\"{StaticResource main}\"&gt;             &lt;WrapPanel&gt;                 &lt;TextBlock x:Name=\"tbJobTitle\" Style=\"{StaticResource JobTitle}\"\/&gt;                 &lt;Image Name=\"imgJibSite\" Style=\"{StaticResource preview}\"\/&gt;             &lt;\/WrapPanel&gt;             &lt;ScrollViewer  Name=\"scroll\" CanContentScroll=\"True\" Height=\"150\" Margin=\"5\"&gt;                 &lt;ListBox x:Name=\"lbxDescription\"\/&gt;             &lt;\/ScrollViewer&gt;             &lt;WrapPanel&gt;                 &lt;Button Name=\"btnBack\"&gt;                     &lt;WrapPanel&gt;                         &lt;Image Source=\"\/Resources\/back.png\" Style=\"{StaticResource Img}\"\/&gt;                         &lt;TextBlock Text=\"\u041d\u0430\u0437\u0430\u0434\"\/&gt;                     &lt;\/WrapPanel&gt;                 &lt;\/Button&gt;                 &lt;Button Name=\"btnOpenVacancy\"&gt;                     &lt;WrapPanel&gt;                         &lt;Image Source=\"\/Resources\/cursor.png\" Style=\"{StaticResource Img}\"\/&gt;                         &lt;TextBlock Text=\"\u041e\u0442\u043a\u0440\u044b\u0442\u044c\"\/&gt;                     &lt;\/WrapPanel&gt;                 &lt;\/Button&gt;             &lt;\/WrapPanel&gt;         &lt;\/StackPanel&gt;     &lt;\/Grid&gt; &lt;\/Page&gt;<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>exrtaInfoPage.xaml.cs<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using SearchJobParser.Class.Model; using SearchJobParser.Class.Service; using System; using System.Diagnostics; using System.Windows.Controls; using System.Windows.Media.Imaging;  namespace SearchJobParser.Pages {     \/\/\/ &lt;summary&gt;     \/\/\/ Interaction logic for extraInfoPage.xaml     \/\/\/ &lt;\/summary&gt;     public partial class extraInfoPage : Page     {         public extraInfoPage(object data)         {             InitializeComponent();             btnBack.Click += (sender, e) =&gt; Manager.mainFrame.GoBack();             btnOpenVacancy.Click += (sender, e) =&gt;             {                 Process.Start(new ProcessStartInfo                 {                     FileName = (data as ParseData).Link,                     WindowStyle = ProcessWindowStyle.Hidden,                     UseShellExecute = true                 });             };             tbJobTitle.Text = (data as ParseData).JobTitle;             Uri uri = new Uri((data as ParseData).SiteName == JobSiteName.HHRU? \"\/Resources\/hh.png\" : \"\/Resources\/superjob.png\", UriKind.Relative);             imgJibSite.Source = new BitmapImage(uri);             lbxDescription.Items.Add($\"{(data as ParseData).Salary}\\n{(data as ParseData).Experience}\\n{(data as ParseData).Format}\\n{(data as ParseData).Description}\");         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<h4>\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f Class\/Model<\/h4>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <a href=\"https:\/\/api.hh.ru\/areas\" rel=\"noopener noreferrer nofollow\"><em>API HH.ru<\/em><\/a> \u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u043e\u043c \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0434\u0432\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438:<\/p>\n<ul>\n<li>\n<p><strong>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/strong>\u00a0(\u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438, \u0440\u0435\u0433\u0438\u043e\u043d\u044b, \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438)<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f<\/strong>\u00a0\u0434\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a. <\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u2014\u00a0<strong>\u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/strong>. \u041e\u043d\u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0441\u044b\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 <em>(HTML, JSON)<\/em> \u0432 \u0441\u0442\u0440\u043e\u0433\u043e \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b <em>C#<\/em>, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 <em>WPF<\/em>.  <\/p>\n<p><em>API HH.ru<\/em> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438:\u00a0<strong>\u0421\u0442\u0440\u0430\u043d\u0430 \u2192 \u0420\u0435\u0433\u0438\u043e\u043d\u044b \u2192 \u0413\u043e\u0440\u043e\u0434\u0430<\/strong>.  \u041f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043a <em>API HH.ru<\/em>, \u043e\u0442\u0432\u0435\u0442 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u044b\u00a0<code><em>Country<\/em><\/code>\u00a0\u0438\u00a0<code><em>Area<\/em><\/code>, \u043e\u0431\u0440\u0430\u0437\u0443\u044f \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0432 \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u0435 <em>WPF<\/em>. <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u00ab\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u00bb \u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043a\u043e\u0434\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f enum\u2019\u044b. \u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e<strong>:<\/strong><\/p>\n<ul>\n<li>\n<p><em>JobSiteName<\/em>\u00a0\u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0441 \u043a\u0430\u043a\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430 \u043f\u0440\u0438\u0448\u043b\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u044f \u2014 \u044d\u0442\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 <em>HH.ru<\/em> \u0438 <em>SuperJob<\/em> \u0440\u0430\u0437\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p><em>MessageType<\/em>\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043b\u043e\u0433\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043b\u0430\u0441\u0441\u00a0<code>ParseData<\/code>\u00a0\u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435.<\/p>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430?<\/h4>\n<ul>\n<li>\n<p><strong>\u0427\u0438\u0441\u0442\u043e\u0442\u0430 \u043a\u043e\u0434\u0430<\/strong>: \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0442 \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0438 <em>UI (WPF)<\/em> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c <em>SOLID<\/em>.<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u0435\u0433\u043a\u0430\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c<\/strong>: \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0430\u0439\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <em>LinkedIn<\/em>), \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c\u00a0<em>JobSiteName<\/em>\u00a0\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/strong>: \u0441\u0442\u0440\u043e\u0433\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 enum\u2019\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0440\u043e\u0434\u0435\u00a0<code>JobSiteName = \"SuperJob\"<\/code>\u00a0(\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c).<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>Class\/Model<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>Area<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">namespace SearchJobParser.Class.Model {     internal class Area     {         public string Name;         public Area[] Areas;         public Area(string name, Area[] areas)         {             Name = name;             Areas = areas;         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Country<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">namespace SearchJobParser.Class.Model {     internal class Country     {         public string Name;         public Area[] Area;         public Country(string name, Area[] areas)         {             Name = name;             Area = areas;         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>CountryType<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">namespace SearchJobParser.Class.Model {     public enum CountryType     {         Russia = 0,         Ukraine = 1,         kazakhstan = 2,         Belarus = 5     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>JobSiteName<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">namespace SearchJobParser.Class.Model {     internal enum JobSiteName     {         HHRU = 0,         SuperJob = 1     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>MessageType<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">namespace SearchJobParser.Class.Model {     enum MessageType     {         INFO = 0,         WARN = 1,         ERR = 2     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>ParseData<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">namespace SearchJobParser.Class.Model {     internal class ParseData     {         public string JobTitle { get; private set; }         public string Salary { get;private set; }         public string Experience { get; private set; }         public string Format { get; private set; }         public string  Worktime { get; private set; }         public string Link { get;private set; }         public JobSiteName SiteName { get; private set; }         public string Description { get; private set; }          public ParseData(string jobTitle, string salary, string experience, string format, string link, JobSiteName siteName = JobSiteName.HHRU, string worktime = null, string description = null)         {             JobTitle = jobTitle;             Salary = salary;             Experience = experience;             Format = format;             Worktime = worktime;             Link = link;             SiteName = siteName;             Description = description;         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<h4>\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f Class\/Service<\/h4>\n<p>\u042d\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438: <strong>\u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e<\/strong> \u0438 <strong>\u0440\u0430\u0431\u043e\u0442\u0443 \u0441 <em>API<\/em><\/strong>. \u041e\u043d\u0438 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (<code><em>ParseData, Area, Country<\/em><\/code>) \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c <em>WPF<\/em>. <\/p>\n<p>\u041a\u043b\u0430\u0441\u0441 <code>ExcelMaker<\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0430\u0440\u0441\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0442\u0447\u0451\u0442.<\/p>\n<p><strong>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0<code>report_20-05-2025.xlsx<\/code>).<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043f\u043e\u043b\u0435\u00a0<em>Format<\/em>\u00a0\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 &#171;\u041f\u0443\u0441\u0442\u043e&#187;).<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u0438 (\u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e Excel).<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043b\u0430\u0441\u0441 <code>Logger<\/code> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043b\u043e\u0433\u0438 \u0432 \u0444\u0430\u0439\u043b\u00a0<code>log.log<\/code>\u00a0\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0430.  <\/p>\n<p><strong>\u0424\u0438\u0447\u0438:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0420\u043e\u0442\u0430\u0446\u0438\u044f \u043b\u043e\u0433\u043e\u0432<\/strong>: \u043f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 1 \u041c\u0411 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0430\u0440\u0445\u0438\u0432\u043d\u044b\u0439 \u0444\u0430\u0439\u043b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0<code>log_05-10-2025.log<\/code>).<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/strong>:\u00a0<em>SemaphoreSlim<\/em>\u00a0\u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u043f\u0440\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u0438\u043f\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439<\/strong>:\u00a0<code>INFO<\/code>,\u00a0<code>WARN<\/code>,\u00a0<code>ERR<\/code>\u00a0\u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043b\u0430\u0441\u0441 <code>Manager<\/code> \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043a\u043d\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437\u00a0<em>Frame<\/em>.<\/p>\n<p><strong>\u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0443\u043f\u0440\u043e\u0449\u0430\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043b\u0430\u0441\u0441 <code>ResourceCities<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0441 <em>HH.ru<\/em> \u0438 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442 \u0438\u0445.<\/p>\n<p><strong>\u041b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b:<\/strong><\/p>\n<ol>\n<li>\n<p><strong>\u0417\u0430\u043f\u0440\u043e\u0441 \u043a <em>API<\/em><\/strong><\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/strong>\u00a0\u043e\u0442\u0432\u0435\u0442\u0430 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u044b\u00a0<code><em>Country<\/em><\/code>\u00a0\u0438\u00a0<code><em>Area<\/em><\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/strong>: \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435\u00a0<em>areas<\/em>\u00a0\u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430?<\/h4>\n<ul>\n<li>\n<p><strong>\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438<\/strong>: \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0440\u0435\u0448\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 (\u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2260 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u2260 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f).<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u0435\u0433\u043a\u043e\u0441\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/strong>:\u00a0<code><em>ExcelMaker<\/em><\/code>\u00a0\u0438\u043b\u0438\u00a0<code><em>Logger<\/em><\/code>\u00a0\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 <em>WPF<\/em>.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c<\/strong>: \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 <em>PDF<\/em>, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u044f \u043f\u0430\u0440\u0441\u0435\u0440.<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>Class\/Service<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>ResourceCities<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using Newtonsoft.Json; using SearchJobParser.Class.Model; using System.Collections.Generic; using System.IO; using System.Net;  namespace SearchJobParser.Class.Service {     internal class ResourceCities     {         private Logger logger = new Logger();         private static Area[] areas;         public ResourceCities() =&gt; areas = ParsedCities();         public string[] GetCities()         {             List&lt;string&gt; cities = areas?.Length &gt; 0 ? new List&lt;string&gt;(areas.Length) : null;             if (areas != null)             {                 foreach (Area city in areas)                     cities.Add(city.Name);             } else                 areas = ParsedCities();             return cities?.Count &gt; 0 ? cities.ToArray() : null;         }         public string[] GetChildCities(in string parentCities)         {             List&lt;string&gt; childCities = null;              foreach (Area area in areas)             {                 if (area.Name == parentCities)                 {                     childCities = area?.Areas.Length &gt; 0 ? new List&lt;string&gt;(areas.Length) : null;                     foreach (Area child in area.Areas)                         childCities.Add(child.Name);                 }                 else                     continue;             }             return childCities?.Count &gt; 0? childCities.ToArray() : null;         }         private Area[] ParsedCities()         {             string url = \"https:\/\/api.hh.ru\/areas\";             string result = \"\";             try             {                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);                 HttpWebResponse response = (HttpWebResponse)request.GetResponse();                 using (StreamReader reader = new StreamReader(response.GetResponseStream()))                     result = reader.ReadToEnd();                 Country[] countries = JsonConvert.DeserializeObject&lt;Country[]&gt;(result);                 return countries[(int)CountryType.Russia].Area;             }             catch (WebException ex)             {                 logger.WriteLog(ex.Message, MessageType.ERR);             }             return null;         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Manager<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using System.Windows.Controls;  namespace SearchJobParser.Class.Service {     internal class Manager     {         public static Frame mainFrame { get; set; }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Logger<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using SearchJobParser.Class.Model; using System; using System.IO; using System.Threading;  namespace SearchJobParser.Class.Service {     internal class Logger     {         private string fileName = \"log.log\";         private const int mbSize = 1000000;         private static readonly SemaphoreSlim lockFile = new SemaphoreSlim(1, 1);          public void WriteLog(string message, MessageType type = MessageType.INFO)         {             CheckSize();             lockFile.Wait();             using (StreamWriter writer = new StreamWriter(fileName, true))                  writer.WriteLineAsync($\"|{type}| {DateTime.Now} {message}\");             lockFile.Release();                      }         private void CheckSize()         {             FileInfo file = new FileInfo(fileName);             if (file.Exists)             {                 if (file.Length &gt; mbSize)                 {                     file.CopyTo($\"log_{DateTime.Today.ToString(\"MM-dd-yyyy\")}.log\", false);                     file.Delete();                 }             } else                 file.Create().Close();         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>ExcelMaker<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using OfficeOpenXml; using SearchJobParser.Class.Model; using System; using System.Collections.Generic; using System.IO;  namespace SearchJobParser.Class.Service {     internal class ExcelMaker     {         public void SaveData(ref List&lt;ParseData&gt; data)         {             ExcelPackage.License.SetNonCommercialOrganization(\"My Noncommercial organization\");             string path = $@\"report_{DateTime.Now.ToShortDateString()}.xlsx\";             FileInfo excelFile = new FileInfo(path);             using (ExcelPackage excel = new ExcelPackage(excelFile))             {                 excel.Workbook.Worksheets.Add(\"\u043e\u0442\u0447\u0435\u0442\");                 ExcelWorksheet worksheetClient = excel.Workbook.Worksheets[\"\u043e\u0442\u0447\u0435\u0442\"];                 string[] header = new string[] { \"\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c\", \"\u0421\u0430\u0439\u0442\", \"\u0417\u0430\u0440\u043f\u043b\u0430\u0442\u0430\", \"\u041e\u043f\u044b\u0442\", \"\u0424\u043e\u0440\u043c\u0430\u0442\", \"\u0421\u0441\u044b\u043b\u043a\u0430\" };                 for (int i = 1; i &lt; header.Length + 1; i++)                     worksheetClient.Cells[1, i].Value = header[i - 1];                 for (int i = 0; i &lt; data.Count; i++)                 {                     worksheetClient.Cells[i + 2, 1].Value = data[i].JobTitle;                     worksheetClient.Cells[i + 2, 2].Value = data[i].SiteName == JobSiteName.HHRU ? \"HH.RU\" : \"SuperJob\";                     worksheetClient.Cells[i + 2, 3].Value = data[i].Salary;                     worksheetClient.Cells[i + 2, 4].Value = data[i].Experience;                     worksheetClient.Cells[i + 2, 5].Value = data[i].Format?.Trim() == null? \"\u041f\u0443\u0441\u0442\u043e\" : data[i]?.Format;                     worksheetClient.Cells[i + 2, 6].Value = data[i].Link;                 }                 excel.SaveAs(excelFile);             }         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<h4>\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f Class\/Engine<\/h4>\n<p>\u042d\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0441\u0430\u0439\u0442\u043e\u0432. \u0418\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0442\u0440\u0435\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432:<\/p>\n<ul>\n<li>\n<p><strong>\u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f<\/strong>\u00a0(\u043e\u0431\u0449\u0438\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441)<\/p>\n<\/li>\n<li>\n<p><strong>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c<\/strong>\u00a0(\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0435\u0442\u044c\u044e \u0431\u0435\u0437 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a <em>UI<\/em>)<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/strong>\u00a0(\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432)  <\/p>\n<\/li>\n<\/ul>\n<p> \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 <code><em>EngineParser<\/em><\/code> &#8212; \u043a\u0430\u0440\u043a\u0430\u0441 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437\u00a0<em>Semaphore<\/em>\u00a0\u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0441\u0430\u0439\u0442\u0430.<\/p>\n<p><strong>\u0427\u0442\u043e \u044d\u0442\u043e \u0434\u0430\u0435\u0442:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u041e\u0431\u0449\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b<\/strong>: <em>HTTP<\/em>-\u043a\u043b\u0438\u0435\u043d\u0442, \u043f\u0430\u0440\u0441\u0435\u0440 <em>HTML<\/em>, \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0415\u0434\u0438\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/strong>: \u0432\u0441\u0435 \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u00a0<em>ParsingVacancies()<\/em>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c<\/strong>: \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u0442 <em>UI<\/em> \u043e \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0435 \u0447\u0435\u0440\u0435\u0437\u00a0<em>ParsingNotification<\/em>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043b\u0430\u0441\u0441 <code><em>EngineHH<\/em><\/code> &#8212; \u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0441\u0430\u0439\u0442\u0430 <em>HH.ru<\/em>.<\/p>\n<p>\u041a\u043b\u0430\u0441\u0441 <code><em>EngineSJ<\/em><\/code> &#8212; \u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0441\u0430\u0439\u0442\u0430 <em>SuperJob<\/em>. \u0414\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u0437\u0430\u0449\u0438\u0442\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f <em>User-Agent<\/em> \u0434\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.<\/p>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430?<\/h4>\n<ul>\n<li>\n<p><strong>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c: <\/strong>\u041c\u0435\u0442\u043e\u0434\u044b\u00a0<em>async\/await<\/em>\u00a0\u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u043e\u0442\u0437\u044b\u0432\u0447\u0438\u0432\u043e\u0441\u0442\u044c<em> UI WPF<\/em> \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u00ab\u0428\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434\u00bb: <\/strong>\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0437\u0430\u0434\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u0441\u0430\u0439\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: <\/strong>\u0412\u0441\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u0449\u0438\u0439\u00a0<code>Logger<\/code>  <\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>Class\/Engine<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>EngineParser<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using AngleSharp.Html.Parser; using SearchJobParser.Class.Model; using SearchJobParser.Class.Service; using System; using System.Collections.Generic; using System.Net.Http; using System.Threading;  namespace SearchJobParser.Class.Engine {     abstract class EngineParser     {         private Logger logger = new Logger();         private protected static Semaphore semaphore = new Semaphore(5, 10, \"sync\");         private protected HttpClient client = new HttpClient();         private protected HtmlParser parser = new HtmlParser();         private protected static List&lt;ParseData&gt; dataList;         public event EventHandler&lt;string&gt; ParsingNotification;         abstract public void ParsingVacancies(string link);         public List&lt;ParseData&gt; GetParsingData() =&gt; dataList;         public virtual void OnParsingSite(string result) =&gt; ParsingNotification?.Invoke(this, result);         private protected void WriteLogs(string message, MessageType type = MessageType.INFO) =&gt; logger.WriteLog(message, type);     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>EngineHH<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using AngleSharp.Dom; using AngleSharp.Html.Dom; using SearchJobParser.Class.Model; using System; using System.Collections.Generic; using System.Net.Http; using System.Text; using System.Threading.Tasks;  namespace SearchJobParser.Class.Engine {     internal class EngineHH : EngineParser     {         public async override void ParsingVacancies(string link)         {             string html = await client.GetStringAsync(link);             IHtmlDocument document = parser.ParseDocument(html);             IHtmlCollection&lt;IElement&gt; elements = document.Body.QuerySelectorAll(\".magritte-redesign\");             OnParsingSite($\"\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0430 HH.RU \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439: {elements.Length - 1}\");             dataList = new List&lt;ParseData&gt;(elements.Length - 1);             for (int i = 1; i &lt; elements.Length; i++)             {                 link = elements[i].QuerySelector(\"a\").GetAttribute(\"href\");                 await Task.Run(() =&gt; ParsingPages(link));             }             OnParsingSite($\"\u0412\u0441\u0435 \u0441\u043f\u0430\u0440\u0441\u0438\u043b\");         }         private async void ParsingPages(string link)         {             semaphore.WaitOne();             HttpClient http = new HttpClient();             string position = null;             string salary = null;             string experience = null;             string worktime = null;             string format = null;             StringBuilder description = new StringBuilder();             try             {                 string html = await http.GetStringAsync(link);                 IHtmlDocument document = parser.ParseDocument(html);                 IElement element = document.Body.QuerySelector(\".vacancy-title\");                 position = element.QuerySelector(\"h1\")?.TextContent;                 salary = element.QuerySelector(\"span\")?.TextContent;                 IHtmlCollection&lt;IElement&gt; elements = document.Body.QuerySelectorAll(\"p\");                 for (int i = 0; i &lt; elements.Length; i++)                 {                     if (elements[i].TextContent.Contains(\"\u041e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b:\"))                         experience = elements[i].TextContent;                     else if (elements[i].TextContent.Contains(\"\u0424\u043e\u0440\u043c\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b:\"))                         format = elements[i].TextContent;                     else if (elements[i].TextContent.Contains(\"\u0413\u0440\u0430\u0444\u0438\u043a:\"))                     {                         foreach (IElement elementSpan in elements[i].ParentElement.ChildNodes.QuerySelectorAll(\"span\"))                         {                             if (elementSpan.TextContent.Contains(\"\u0437\u0430\u043d\u044f\u0442\u043e\u0441\u0442\u044c\"))                                 worktime = elementSpan.TextContent;                             else continue;                         }                     }                     else                         description.AppendLine(elements[i].TextContent.Trim());                 }                 dataList.Add(new ParseData(jobTitle: position, salary: salary,experience: experience, format: format, link: link, worktime: worktime, description: description.ToString()));                 WriteLogs($\"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:\\n\u041f\u043e\u0437\u0438\u0446\u0438\u044f: {position}\\n\u0417\u0430\u0440\u043f\u043b\u0430\u0442\u0430: {salary}\\n{experience}\\n{worktime}\\nc\u0441\u044b\u043b\u043a\u0430: {link}\");                 OnParsingSite($\"\u041f\u0440\u043e\u043f\u0430\u0440\u0441\u0438\u043b {link}\");             }             catch (Exception e)             {                 WriteLogs(e.Message, MessageType.WARN);             }             finally             {                 semaphore.Release();             }         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>EngineSJ<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using AngleSharp.Dom; using AngleSharp.Html.Dom; using SearchJobParser.Class.Model; using System; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks;  namespace SearchJobParser.Class.Engine {     internal class EngineSJ : EngineParser     {         public async override void ParsingVacancies(string link)         {             client.DefaultRequestHeaders.UserAgent.ParseAdd(\"Mozilla\/5.0 (Windows NT 10.0; Win64; x64)\");             string html = await client.GetStringAsync(link);             IHtmlDocument document = parser.ParseDocument(html);             IHtmlCollection&lt;IElement&gt; elements = document.Body.QuerySelectorAll(\".f-test-search-result-item\");             OnParsingSite($\"\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0430 HH.RU \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439: {elements.Length}\");             dataList = new List&lt;ParseData&gt;(elements.Length);             for (int i = 1; i &lt; elements.Length; i++)             {                 if (elements[i].QuerySelector(\"a\")?.GetAttribute(\"href\") == null)                     continue;                 else                 {                     link = $\"https:\/\/russia.superjob.ru{elements[i].QuerySelector(\"a\")?.GetAttribute(\"href\")}\";                     await Task.Run(() =&gt; ParsingPages(link));                 }             }             OnParsingSite($\"\u0412\u0441\u0435 \u0441\u043f\u0430\u0440\u0441\u0438\u043b\");         }         private async void ParsingPages(string link)         {             semaphore.WaitOne();             HttpClient http = new HttpClient();             string position = null;             string salary = null;             string experience = null;             string format = null;             string description = null;             try             {                 http.DefaultRequestHeaders.UserAgent.ParseAdd(\"Mozilla\/5.0 (Windows NT 10.0; Win64; x64)\");                 string html = await http.GetStringAsync(link);                 IHtmlDocument document = parser.ParseDocument(html);                 IElement mainElement = document.Body.QuerySelector(\"h1\");                 position = mainElement.TextContent;                 salary = mainElement.ParentElement.QuerySelector(\"span\").TextContent;                 IElement experienceElement = document.Body.QuerySelector(\"#app &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div:nth-child(1) &gt; div &gt; div:nth-child(4) &gt; div &gt; div:nth-child(1) &gt; div &gt; div &gt; span:nth-child(1)\");                 experience = experienceElement.TextContent;                 IElement formatElement = document.Body.QuerySelector(\"#app &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div:nth-child(1) &gt; div &gt; div:nth-child(4) &gt; div &gt; div:nth-child(1) &gt; div &gt; div &gt; span:nth-child(3)\");                 format = formatElement?.TextContent;                 IElement descElement = document.Body.QuerySelector(\"#app &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div &gt; div:nth-child(1) &gt; div &gt; div:nth-child(4) &gt; div &gt; div:nth-child(2)\");                 description = descElement?.TextContent;                 dataList.Add(new ParseData(jobTitle: position, salary: salary, experience: experience, format: format, link: link, siteName: JobSiteName.SuperJob, description: description));                 WriteLogs($\"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:\\n\u041f\u043e\u0437\u0438\u0446\u0438\u044f: {position}\\n\u0417\u0430\u0440\u043f\u043b\u0430\u0442\u0430: {salary}\\n{experience}\\nc\u0441\u044b\u043b\u043a\u0430: {link}\");                 OnParsingSite($\"\u041f\u0440\u043e\u043f\u0430\u0440\u0441\u0438\u043b {link}\");             }             catch (Exception e)             {                 WriteLogs(e.Message, MessageType.WARN);             }             finally             {                 semaphore.Release();             }         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<h3>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/h3>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u044f\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c &#171;C# \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a&#187; \u0438 \u0440\u043e\u0434\u043d\u043e\u0439 \u0433\u043e\u0440\u043e\u0434 \u0430\u0432\u0442\u043e\u0440\u0430 &#8212; \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433. \u0421\u0430\u0439\u0442 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0432\u044b\u0431\u0440\u0430\u043d <em>HH.ru.<\/em><\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/49e\/9f3\/6c2\/49e9f36c25d0d15f7d0b3e2b4da30fe7.png\" alt=\"\u041f\u043e\u0438\u0441\u043a C# \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438\u0437 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0430\" title=\"\u041f\u043e\u0438\u0441\u043a C# \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438\u0437 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0430\" width=\"482\" height=\"335\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/49e\/9f3\/6c2\/49e9f36c25d0d15f7d0b3e2b4da30fe7.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/49e\/9f3\/6c2\/49e9f36c25d0d15f7d0b3e2b4da30fe7.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0438\u0441\u043a C# \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438\u0437 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0438\u0436\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u043e\u043c<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/158\/31e\/992\/15831e992d7642e8842907d194dbc98e.png\" alt=\"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439\" title=\"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439\" width=\"478\" height=\"334\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/158\/31e\/992\/15831e992d7642e8842907d194dbc98e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/158\/31e\/992\/15831e992d7642e8842907d194dbc98e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2cf\/512\/66f\/2cf51266fcddcdc2171e2f1ce088e153.png\" alt=\"\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438\" title=\"\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438\" width=\"478\" height=\"327\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/2cf\/512\/66f\/2cf51266fcddcdc2171e2f1ce088e153.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2cf\/512\/66f\/2cf51266fcddcdc2171e2f1ce088e153.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c &#171;\u0418\u043d\u0436\u0435\u043d\u0435\u0440&#187; \u0438\u0437 \u0433\u043e\u0440\u043e\u0434\u0430 \u0427\u0435\u0440\u043d\u044f\u0445\u043e\u0432\u0441\u043a \u0438\u0437 \u041a\u0430\u043b\u0438\u043d\u0438\u043d\u0433\u0440\u0430\u0434\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 HH.ru. <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/561\/086\/7e9\/5610867e9d4bfc52d27c2fe9c45f2921.png\" alt=\"\u041f\u043e\u0438\u0441\u043a \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430 \u0438\u0437 \u0427\u0435\u0440\u043d\u044f\u0445\u043e\u0432\u0441\u043a\" title=\"\u041f\u043e\u0438\u0441\u043a \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430 \u0438\u0437 \u0427\u0435\u0440\u043d\u044f\u0445\u043e\u0432\u0441\u043a\" width=\"478\" height=\"334\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/561\/086\/7e9\/5610867e9d4bfc52d27c2fe9c45f2921.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/561\/086\/7e9\/5610867e9d4bfc52d27c2fe9c45f2921.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0438\u0441\u043a \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430 \u0438\u0437 \u0427\u0435\u0440\u043d\u044f\u0445\u043e\u0432\u0441\u043a<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2f8\/79d\/fd6\/2f879dfd6a04061687eab71f3d0ceb5e.png\" alt=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0435\u043d\u043d\u044b\u0445 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439\" title=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0435\u043d\u043d\u044b\u0445 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439\" width=\"476\" height=\"335\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/2f8\/79d\/fd6\/2f879dfd6a04061687eab71f3d0ceb5e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2f8\/79d\/fd6\/2f879dfd6a04061687eab71f3d0ceb5e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0435\u043d\u043d\u044b\u0445 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2c0\/050\/0e7\/2c00500e7a9783422adbe8ac8966f6ea.png\" alt=\"\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438\" title=\"\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438\" width=\"478\" height=\"336\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/2c0\/050\/0e7\/2c00500e7a9783422adbe8ac8966f6ea.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2c0\/050\/0e7\/2c00500e7a9783422adbe8ac8966f6ea.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c &#171;\u0418\u043d\u0436\u0435\u043d\u0435\u0440&#187; \u0438\u0437 \u0433\u043e\u0440\u043e\u0434\u0430 \u0424\u0443\u0440\u043c\u0430\u043d\u043e\u0432 \u0438\u0437 \u0418\u0432\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 SuperJob \u0438 \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430 \u042d\u043a\u0441\u043f\u043e\u0440\u0442. <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/39a\/0f6\/58c\/39a0f658c0f981fb702ec6f41e0ea4d2.png\" alt=\"\u041f\u043e\u0438\u0441\u043a \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0438\u0437 \u0424\u0443\u0440\u043c\u0430\u043d\u043e\u0432\u0430\" title=\"\u041f\u043e\u0438\u0441\u043a \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0438\u0437 \u0424\u0443\u0440\u043c\u0430\u043d\u043e\u0432\u0430\" width=\"478\" height=\"333\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/39a\/0f6\/58c\/39a0f658c0f981fb702ec6f41e0ea4d2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/39a\/0f6\/58c\/39a0f658c0f981fb702ec6f41e0ea4d2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0438\u0441\u043a \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0438\u0437 \u0424\u0443\u0440\u043c\u0430\u043d\u043e\u0432\u0430<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d38\/890\/ea4\/d38890ea4b914adcf6dfe0089dd518da.png\" alt=\"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439 \u0438\u0437 \u0424\u0443\u0440\u043c\u0430\u043d\u043e\u0432\u0430\" title=\"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439 \u0438\u0437 \u0424\u0443\u0440\u043c\u0430\u043d\u043e\u0432\u0430\" width=\"485\" height=\"332\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d38\/890\/ea4\/d38890ea4b914adcf6dfe0089dd518da.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d38\/890\/ea4\/d38890ea4b914adcf6dfe0089dd518da.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439 \u0438\u0437 \u0424\u0443\u0440\u043c\u0430\u043d\u043e\u0432\u0430<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fa8\/858\/c49\/fa8858c4996ae24925420bb5d30f0797.png\" alt=\"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438\" title=\"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438\" width=\"475\" height=\"337\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/fa8\/858\/c49\/fa8858c4996ae24925420bb5d30f0797.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fa8\/858\/c49\/fa8858c4996ae24925420bb5d30f0797.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/219\/bbe\/749\/219bbe749d22dc1281ac9b2cf9e95ece.png\" alt=\"\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445\" title=\"\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445\" width=\"482\" height=\"334\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/219\/bbe\/749\/219bbe749d22dc1281ac9b2cf9e95ece.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/219\/bbe\/749\/219bbe749d22dc1281ac9b2cf9e95ece.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445<\/figcaption><\/div>\n<\/figure>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439 \u2014 \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0437\u043e\u0432, \u043d\u043e \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 IT-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ol>\n<li>\n<p><strong>\u0413\u0438\u0431\u043a\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/strong><br \/>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 (<code>ParseData<\/code>,\u00a0<code>Area<\/code>), \u0441\u0435\u0440\u0432\u0438\u0441\u044b (<code>ExcelMaker<\/code>,\u00a0<code>Logger<\/code>) \u0438 \u0434\u0432\u0438\u0436\u043a\u0438 (<code>EngineHH<\/code>,\u00a0<code>EngineSJ<\/code>), \u043a\u043e\u0434 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c \u0438 \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u043c. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430? \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u00a0<code>EngineParser<\/code>\u00a0\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0438\u043d\u0433.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u043e\u0449\u044c C# \u0438 WPF<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c<\/strong>\u00a0\u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u043b\u0430 \u043f\u043b\u0430\u0432\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0442\u0440\u043e\u0433\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f<\/strong>\u00a0\u0441\u0432\u0435\u043b\u0430 \u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0443 runtime-\u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>WPF<\/strong>\u00a0\u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c desktop-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u043c UI \u0431\u0435\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0435\u0431-\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c<\/strong><br \/>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438: \u0430\u043d\u0430\u043b\u0438\u0437 \u0437\u0430\u0440\u043f\u043b\u0430\u0442, \u043f\u043e\u0438\u0441\u043a \u0440\u0430\u0431\u043e\u0442\u044b, \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u0430\u044f \u0440\u0430\u0437\u0432\u0435\u0434\u043a\u0430. \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 Excel \u0438 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0434\u0435\u043b\u0430\u044e\u0442 \u0435\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u043a\u0430\u043a \u0434\u043b\u044f \u0441\u043e\u0438\u0441\u043a\u0430\u0442\u0435\u043b\u0435\u0439, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f HR-\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/911652\/\"> https:\/\/habr.com\/ru\/articles\/911652\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0430\u043d\u0430\u043b\u0438\u0437 \u0440\u044b\u043d\u043a\u0430 \u0442\u0440\u0443\u0434\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u043c \u043a\u0430\u043a \u0434\u043b\u044f \u0441\u043e\u0438\u0441\u043a\u0430\u0442\u0435\u043b\u0435\u0439, \u0438\u0449\u0443\u0449\u0438\u0445 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439, \u0438\u0437\u0443\u0447\u0430\u044e\u0449\u0438\u0445 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u0443. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0431\u044b\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u044b \u0434\u0432\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u2014 <em>HH.ru<\/em> \u0438 <em>SuperJob<\/em>.<\/p>\n<h4> HH.ru \u0438 Superjob<\/h4>\n<p> \u042d\u0442\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0441\u0442\u0430\u043b\u0438 \u043b\u0438\u0434\u0435\u0440\u0430\u043c\u0438 \u0432 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435: \u043e\u043d\u0438 \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 80% \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439 \u0432 \u0421\u041d\u0413, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442 \u043a\u043e\u043d\u0442\u0435\u043d\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0441 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f.<\/p>\n<h4>\u0412\u044b\u0431\u043e\u0440 C# \u0438 WPF<\/h4>\n<p>\u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u0442\u043e <em>C#<\/em> \u0438 <em>WPF<\/em> \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0442\u0430\u043d\u0434\u0435\u043c\u043e\u043c \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. <em>C#<\/em>, \u043a\u0430\u043a \u044f\u0437\u044b\u043a \u0441 \u0431\u043e\u0433\u0430\u0442\u043e\u0439 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <em>AngleSharp<\/em> \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0438\u043b\u0438 <em>HttpClient<\/em> \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432), \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0433\u043e \u0441\u0442\u0440\u043e\u0433\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u0440\u0438\u0441\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 <em>API<\/em> \u0438 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p><em>WPF<\/em>, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 <em>desktop<\/em>-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0432\u0435\u0431-\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0438\u043b\u0438 \u043a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445, <em>WPF<\/em> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0433\u043b\u0443\u0431\u043e\u043a\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u041e\u0421 <em>Windows<\/em>, \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439 \u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 \u0432\u0430\u0436\u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u043b\u0438\u043a\u0430 \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 Python \u0438\u043b\u0438 JavaScript? <\/h4>\n<p>\u0425\u043e\u0442\u044f \u044d\u0442\u0438 \u044f\u0437\u044b\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, <em>C#<\/em> \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 \u0434\u043e\u043b\u0433\u043e\u0441\u0440\u043e\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, <em>WPF<\/em> \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 <em>EXE<\/em>-\u0444\u0430\u0439\u043b, \u0447\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 runtime-\u0441\u0440\u0435\u0434.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c, \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043c\u043e\u0449\u044c <em>C#<\/em> \u0434\u043b\u044f \u0431\u044d\u043a\u0435\u043d\u0434\u0430\u00a0\u0438 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c <em>WPF<\/em> \u0434\u043b\u044f \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0446\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.<\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435: \u0438\u0437\u0443\u0447\u0430\u0435\u043c \u0441\u0430\u0439\u0442\u044b, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442<\/h3>\n<h4>\u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b HH.ru \u0438 SuperJob<\/h4>\n<p>\u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u0441\u0430\u0439\u0442\u044b. \u041e\u0431\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"170\" width=\"170\">\n<p align=\"center\">\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0430\u0439\u0442\u0430<\/p>\n<\/td>\n<td data-colwidth=\"261\" width=\"261\">\n<p align=\"center\">HH.RU<\/p>\n<\/td>\n<td>\n<p align=\"center\">SuperJob<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"170\" width=\"170\">\n<p align=\"center\">HTML\u2011\u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430 <\/p>\n<\/td>\n<td data-colwidth=\"261\" width=\"261\">\n<p align=\"center\">\u0412\u0430\u043a\u0430\u043d\u0441\u0438\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0430\u0445 \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c\u00a0<code>magritte-redesign<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0430\u043a\u0430\u043d\u0441\u0438\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0430\u0445 \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c<code>f-test-search-result-item<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"170\" width=\"170\">\n<p align=\"center\">\u041f\u043e\u0438\u0441\u043a \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439<\/p>\n<\/td>\n<td data-colwidth=\"261\" width=\"261\">\n<p align=\"left\">\u0414\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u0438\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0433\u043e\u0440\u043e\u0434\u0430\u043c, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043b\u043e\u0432,<u> \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0437\u043d\u0430\u0447\u043a\u043e\u043c +<\/u><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u0438\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0433\u043e\u0440\u043e\u0434\u0430\u043c, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043b\u043e\u0432,<u> \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u043d\u0430 %20<\/u><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0412\u044b\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/h4>\n<p>\u0414\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043d\u0430 C# \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<ul>\n<li>\n<p><em>AngleSharp<\/em> &#8212; \u043e\u0434\u043d\u0430 \u0438\u0437 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 <em>HTML<\/em> <\/p>\n<\/li>\n<li>\n<p><em>Newtonsoft.Json<\/em> &#8212; \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0447\u0435\u0440\u0435\u0437 <em>API<\/em><\/p>\n<\/li>\n<li>\n<p><em>Epplus<\/em> &#8212; \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c <em>Excel<\/em> \u0444\u0430\u0439\u043b\u044b<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/api.hh.ru\/areas\" rel=\"noopener noreferrer nofollow\">API \u043e\u0442 HH.ru<\/a>.<\/p>\n<h4>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h4>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434, co\u0445\u0440\u0430\u043d\u044f\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u0445. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b <em>MainWindow.xaml <\/em>\u0441 \u043b\u043e\u0433\u0438\u043a\u043e\u0439<em> MainWindow.xaml.cs<\/em>:<\/p>\n<details class=\"spoiler\">\n<summary>MainWindow.xaml<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>MainWindow.xaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;Window x:Class=\"SearchJobParser.MainWindow\"         xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\"         xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\"         xmlns:d=\"http:\/\/schemas.microsoft.com\/expression\/blend\/2008\"         xmlns:mc=\"http:\/\/schemas.openxmlformats.org\/markup-compatibility\/2006\"         xmlns:local=\"clr-namespace:SearchJobParser\"         mc:Ignorable=\"d\"         Title=\"\u041f\u0430\u0440\u0441\u0435\u0440 \u0441\u0430\u0439\u0442\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\" Icon=\"Resources\/search.ico\" MaxHeight=\"350\" MinHeight=\"350\" MaxWidth=\"500\" MinWidth=\"500\"&gt;     &lt;Grid&gt;         &lt;Grid.RowDefinitions&gt;             &lt;RowDefinition Height=\"0.05*\"\/&gt;             &lt;RowDefinition Height=\"*\"\/&gt;             &lt;RowDefinition Height=\"0.05*\"\/&gt;         &lt;\/Grid.RowDefinitions&gt;         &lt;Frame x:Name=\"mainFrame\" Grid.Row=\"1\"\/&gt;         &lt;Grid Grid.Row=\"0\" Style=\"{StaticResource rowBorder}\"\/&gt;         &lt;Grid Grid.Row=\"2\" Style=\"{StaticResource rowBorder}\"\/&gt;              &lt;\/Grid&gt; &lt;\/Window&gt;<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>MainWindow.xaml.cs<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using SearchJobParser.Class.Service; using SearchJobParser.Pages; using System.Windows;  namespace SearchJobParser {     \/\/\/ &lt;summary&gt;     \/\/\/ Interaction logic for MainWindow.xaml     \/\/\/ &lt;\/summary&gt;     public partial class MainWindow : Window     {         public MainWindow()         {             InitializeComponent();             mainFrame.Navigate(new mainPage());             mainFrame.NavigationUIVisibility = System.Windows.Navigation.NavigationUIVisibility.Hidden;             Manager.mainFrame = mainFrame;         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u0438\u043b\u0435\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b <em>App.xaml<\/em>:<\/p>\n<details class=\"spoiler\">\n<summary>App.xaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;Application x:Class=\"SearchJobParser.App\"              xmlns=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\"              xmlns:x=\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\"              xmlns:local=\"clr-namespace:SearchJobParser\"              StartupUri=\"MainWindow.xaml\"&gt;     &lt;Application.Resources&gt;         &lt;Style TargetType=\"Border\"&gt;             &lt;Setter Property=\"CornerRadius\" Value=\"5\"\/&gt;         &lt;\/Style&gt;         &lt;Style TargetType=\"TextBox\"&gt;             &lt;Setter Property=\"Width\" Value=\"300\"\/&gt;             &lt;Setter Property=\"Height\" Value=\"27\"\/&gt;             &lt;Setter Property=\"Margin\" Value=\"0 10 0 0\"\/&gt;             &lt;Setter Property=\"FontSize\" Value=\"16\"\/&gt;         &lt;\/Style&gt;         &lt;Style TargetType=\"Button\"&gt;             &lt;Setter Property=\"Width\" Value=\"100\"\/&gt;             &lt;Setter Property=\"Height\" Value=\"30\"\/&gt;             &lt;Setter Property=\"Margin\" Value=\"5 15 0 0\"\/&gt;             &lt;Setter Property=\"ItemsControl.Background\" Value=\"PeachPuff\"\/&gt;         &lt;\/Style&gt;         &lt;Style TargetType=\"TextBlock\"&gt;             &lt;Setter Property=\"FontSize\" Value=\"16\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"rowBorder\"&gt;             &lt;Setter Property=\"ItemsControl.Background\" Value=\"Peru\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"preview\"&gt;             &lt;Setter Property=\"ItemsControl.Height\" Value=\"30\"\/&gt;             &lt;Setter Property=\"ItemsControl.Width\" Value=\"30\"\/&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"400 -25 0 0\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"JobTitle\"&gt;             &lt;Setter Property=\"ItemsControl.FontWeight\" Value=\"Bold\"\/&gt;             &lt;Setter Property=\"ItemsControl.FontSize\" Value=\"20\"\/&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"5 5 0 0\"\/&gt;             &lt;Setter Property=\"ItemsControl.MaxWidth\" Value=\"300\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"main\"&gt;             &lt;Setter Property=\"ItemsControl.Background\" Value=\"FloralWhite\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"status\"&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"0 15 0 0\"\/&gt;             &lt;Setter Property=\"ItemsControl.FontSize\" Value=\"16\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"cities\"&gt;             &lt;Setter Property=\"ItemsControl.Width\" Value=\"330\"\/&gt;             &lt;Setter Property=\"ItemsControl.Height\" Value=\"27\"\/&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"20 5 0 0\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"jobs\"&gt;             &lt;Setter Property=\"ItemsControl.Width\" Value=\"150\"\/&gt;             &lt;Setter Property=\"ItemsControl.Height\" Value=\"27\"\/&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"120 5 0 0\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"text\"&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"140 2.5 0 0\"\/&gt;             &lt;Setter Property=\"ItemsControl.FontSize\" Value=\"14\"\/&gt;         &lt;\/Style&gt;         &lt;Style TargetType=\"WrapPanel\"&gt;             &lt;Setter Property=\"HorizontalAlignment\" Value=\"Center\"\/&gt;         &lt;\/Style&gt;         &lt;Style x:Key=\"Img\"&gt;             &lt;Setter Property=\"ItemsControl.Width\" Value=\"20\"\/&gt;             &lt;Setter Property=\"ItemsControl.Height\" Value=\"20\"\/&gt;             &lt;Setter Property=\"ItemsControl.Margin\" Value=\"0 0 5 0\"\/&gt;             &lt;Setter Property=\"ItemsControl.HorizontalAlignment\" Value=\"Left\"\/&gt;         &lt;\/Style&gt;     &lt;\/Application.Resources&gt; &lt;\/Application&gt;<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f  \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><em>Pages<\/em> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b<\/p>\n<\/li>\n<li>\n<p><em>Class<\/em> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p><em>Class\/Engine<\/em> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0430\u0440\u0441\u0435\u0440\u0430<\/p>\n<\/li>\n<li>\n<p><em>Class\/Model<\/em> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430<\/p>\n<\/li>\n<li>\n<p><em>Class\/Service<\/em> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430<\/p>\n<\/li>\n<li>\n<p><em>Resources<\/em> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0438\u043a\u043e\u043d\u043a\u0438 \u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ul>\n<h3>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430<\/h3>\n<h4>\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f Pages<\/h4>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0440\u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0440\u0430\u0431\u043e\u0442\u044b: \u043e\u0442 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439 \u0434\u043e \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430. \u042d\u0442\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u2014 \u00ab\u043b\u0438\u0446\u043e\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u043d\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u043a\u0430\u043a \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0438\u043d\u0433, \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0443 \u0438 UX \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442. \u041a\u043e\u0434 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b:<\/p>\n<ul>\n<li>\n<p><strong>\u0418\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044f\u0446\u0438\u044f<\/strong>\u00a0(\u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u0437\u0430\u0434\u0430\u0447\u0443),<\/p>\n<\/li>\n<li>\n<p><strong>Reactive UI<\/strong>\u00a0(\u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043c\u044b\u0448\u0438, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435),<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c<\/strong>\u00a0(\u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430).<\/p>\n<p> \u0412 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b:<\/p>\n<\/li>\n<li>\n<p><em>mainPage.xaml &#8212; <\/em>\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0441\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 (\u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044f, \u0433\u043e\u0440\u043e\u0434, \u0441\u0430\u0439\u0442)  <\/p>\n<\/li>\n<li>\n<p><em>resultPage.xaml &#8212; <\/em>\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<li>\n<p><em>exrtaInfoPage.xaml &#8212; <\/em>\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430<code><em>mainPage.xaml<\/em><\/code><em>\u00a0<\/em>\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u043d\u0430\u00a0<em>ComboBox<\/em>\u00a0\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0420\u043e\u0441\u0441\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 <em>API HH.ru.\u00a0<\/em>\u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d \u0440\u0435\u0433\u0438\u043e\u043d \u0441 \u0433\u043e\u0440\u043e\u0434\u0430\u043c\u0438, \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439\u00a0<em>ComboBox<\/em>\u00a0\u0434\u043b\u044f \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f.<\/p>\n<blockquote>\n<p>\u041f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 \u041c\u043e\u0441\u043a\u0432\u044b \u0438\u043b\u0438 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0430 \u0432 <em>API<\/em> \u0433\u043e\u0440\u043e\u0434\u0430 \u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u041b\u041e \u0438 \u041c\u041e.<\/p>\n<\/blockquote>\n<p>\u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 <code><em>resultPage.xaml<\/em><\/code><em> <\/em>\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432<em> ListBox. <\/em>\u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 Excel. <\/p>\n<p>\u0414\u0432\u043e\u0439\u043d\u043e\u0439 \u043a\u043b\u0438\u043a \u043f\u043e \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443\u00a0<code>extraInfoPage<\/code>. \u041a\u043d\u043e\u043f\u043a\u0430 \u00ab\u041e\u0442\u043a\u0440\u044b\u0442\u044c\u00bb \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u041b\u043e\u0433\u043e\u0442\u0438\u043f <em>HH.ru\/SuperJob<\/em> \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u00a0<em>JobSiteName<\/em>.<\/p>\n<details class=\"spoiler\">\n<summary>Pages<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>mainPage.xaml<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>mainPage.xaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;Page<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-460474","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/460474","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=460474"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/460474\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=460474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=460474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=460474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}