{"id":469274,"date":"2025-08-01T03:00:49","date_gmt":"2025-08-01T03:00:49","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=469274"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=469274","title":{"rendered":"<span>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0434\u043b\u044f \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 API: \u043c\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u043f\u044b\u0442<\/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 <a href=\"https:\/\/habr.com\/ru\/articles\/928164\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u043b \u0442\u043e\u043d\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u0432 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0430\u0440\u0431\u0438\u0442\u0440\u0430\u0436\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0441\u043d\u0443\u043b\u0441\u044f \u0442\u0435\u043c\u044b, \u043d\u0443 \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u043d\u0435\u0441\u043b\u0430\u0441\u044c. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0435\u0449\u0435 \u0434\u0432\u0435 \u0434\u0440\u0443\u0433\u0438\u0445, \u043d\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0441\u0440\u0430\u0437\u0443 \u043e\u0434\u043d\u0438\u043c \u043c\u0430\u0445\u043e\u043c \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u043b \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u043a\u043e\u043f\u0430\u044f\u0441\u044c \u0432 \u043d\u0435\u0434\u0440\u0430\u0445 \u0430\u0440\u0431\u0438\u0442\u0440\u0430\u0436\u0430 (\u0434\u043b\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0433\u0443\u0440\u0443 \u044d\u0442\u0438 \u043d\u0435\u0434\u0440\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438) \u044f \u0437\u0430\u043f\u0438\u043b\u0438\u043b \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0432 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0447\u0435\u0440\u0435\u0437 \u0410\u041f\u0418. \u0417\u0432\u0443\u0447\u0438\u0442 \u0443\u0433\u0440\u043e\u0436\u0430\u044e\u0449\u0435? \u041d\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0442\u043e\u0440\u043e\u043f\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0434\u0432\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u0430\u0440\u0431\u0438\u0442\u0440\u0430\u0436\u043d\u0438\u043a\u043e\u0432, \u043b\u0438\u0431\u043e \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0445 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u0430\u0440\u0431\u0438\u0442\u0440\u0430\u0436\u043d\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 \u0410\u041f\u0418 (like a boss).<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0442\u044c \u0441\u043e\u0442\u043d\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u043a\u0430\u043a \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0442\u0430\u043a \u0438 \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 (\u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u0438\u043b\u0438\u0442\u044c \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0430\u043f\u043a\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u043c\u0438).<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u043d\u0435 \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0430 \u0438\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0441\u0430\u043c \u0444\u0430\u043a\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u0430\u043b\u043e \u0447\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c, \u043d\u043e \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0444\u0430\u0440\u043c\u0438\u043d\u0433\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432. \u041d\u043e \u0444\u0430\u0440\u043c\u0438\u043d\u0433 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u0442\u0435\u043c\u0430, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442.<\/p>\n<p>\u041d\u0443 \u0430 \u0442\u0435\u043f\u0435\u0440\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<h3>\u0417\u0430\u0447\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0432 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435?<\/h3>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u043c\u0438 (\u0430 \u0442\u043e \u0438 \u0441\u043e\u0442\u043d\u044f\u043c\u0438) \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442-\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0441\u0438\u043b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2013 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435. \u0420\u0443\u0447\u043d\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u043a\u0441\u0438, \u0438\u043c\u043f\u043e\u0440\u0442 \u043a\u0443\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u2013 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u0438, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043b\u0435\u0433\u043a\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0435. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0442\u0435\u0431\u044f 10-15 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c (\u0445\u043e\u0442\u044f \u0435\u0441\u043b\u0438 \u043e\u043d \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 &#8212; \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438 \u043d\u0435\u0442, \u043f\u0440\u0430\u0432\u0434\u0430?) \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u043a\u0440\u0430\u0442\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435? \u041c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c, \u043d\u043e \u043a\u043e\u043c\u0443 \u0442\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043d\u0435) \u043f\u0440\u043e\u0449\u0435, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435, \u0434\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435-\u043a\u043e\u043d\u0446\u043e\u0432 \u0440\u0430\u0437\u0443\u043c\u043d\u0435\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u0451 \u0437\u0430 \u0432\u0430\u0441.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/23c\/b49\/d8f\/23cb49d8fb477a9bd655a18a85b9efc8.png\" width=\"1536\" height=\"1024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/23c\/b49\/d8f\/23cb49d8fb477a9bd655a18a85b9efc8.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/23c\/b49\/d8f\/23cb49d8fb477a9bd655a18a85b9efc8.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0440\u043e\u043c\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a. \u0411\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0430\u043a\u0442\u043e\u0440. \u0427\u0435\u043b\u043e\u0432\u0435\u043a \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435 \u0442\u0443 \u043c\u0435\u0442\u043a\u0443 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043f\u0440\u043e\u043a\u0441\u0438, \u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441 \u0432\u0430\u043c\u0438 \u0442\u0430\u043a \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442 \u0438 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u043c\u0430\u0445\u043e\u0432 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442.<\/p>\n<p><strong>\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043c\u0443\u043b\u044c\u0442\u0438\u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0438\u043d\u0433\u0430:<\/strong> \u042f \u043d\u0435 \u0443\u0441\u0442\u0430\u044e \u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0433\u0434\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0438\u043d\u0433\u0430, \u0447\u0442\u043e \u0410\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u044d\u0442\u043e \u043c\u0430\u0441\u0442 \u0445\u044d\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043d\u0438\u0448\u0438. \u041e\u043d\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u043f\u0440\u0438 \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432 \u0441\u0435\u0442\u044f\u0445 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445. \u041e\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0441 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u2013 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u0443 \u0432\u0430\u0441 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432. \u041c\u043e\u0436\u043d\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u0435\u0441\u0442\u0438 \u0441\u043e\u0442\u043d\u0438 \u0440\u0435\u043a\u043b\u0430\u043c\u043d\u044b\u0445 \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u043e\u0432 \u0438\u043b\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u0432 \u0441\u043e\u0446\u0441\u0435\u0442\u044f\u0445 \u0441 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u0418 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u043a\u0441\u0438. \u042d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0431\u0443\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 API \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 <a href=\"https:\/\/octobrowser.net\/\" rel=\"noopener noreferrer nofollow\">Octo Browser<\/a> \u0438 \u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u043a\u0441\u044f\u043c\u0438 <a href=\"https:\/\/2prx.com\/\" rel=\"noopener noreferrer nofollow\">2prx<\/a>. \u0423 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f (\u0442\u0430\u0440\u0438\u0444 Base \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0410\u041f\u0418), \u0430 \u0443 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0413\u0411 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043e\u0434 \u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u043a\u0441\u0438. \u0412 \u043e\u0431\u0449\u0435\u043c \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0433\u043e\u0434\u043d\u043e \u0434\u043b\u044f \u0441\u0435\u043c\u0435\u0439\u043d\u043e\u0433\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u0438 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u0422\u0430\u043d\u0434\u0435\u043c \u2013 <strong>\u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u043a\u0441\u0438 + \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442-\u0431\u0440\u0430\u0443\u0437\u0435\u0440<\/strong> \u2013 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043e\u043b\u043e\u0442\u044b\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0437\u0430\u0434\u0430\u0447. \u041f\u0440\u043e\u043a\u0441\u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 IP \u0438 \u043e\u0431\u0445\u043e\u0434\u044f\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0430 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 50 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 (Canvas, WebGL, \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u044f\u0441, \u044f\u0437\u044b\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0442\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0442.\u0434.), \u043d\u043e \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 &#8212; \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c (\u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u0433\u043b\u0430\u0437\u0430\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f). \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c <em>\u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f<\/em> \u0441\u0435\u0440\u0444\u0438\u043d\u0433\u0430 \u0438 \u0440\u0435\u0448\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0434\u0430\u0447..<\/p>\n<p><strong>\u0417\u0430\u0434\u0430\u0447\u0430:<\/strong> \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0438 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 API. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c: \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c 100 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u043a\u0430\u0436\u0434\u044b\u0439 \u0441 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u043a\u0441\u0438 \u2013 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u0433\u043e (\u044f \u0431\u044b \u0442\u043e\u0447\u043d\u043e \u043a\u043e\u0432\u044b\u0440\u044f\u043b\u0441\u044f \u043f\u043e\u043b \u0434\u043d\u044f). \u041d\u043e \u0435\u0441\u0442\u044c \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0435 API. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 Octo Browser \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f \u0438 \u0431\u0443\u0434\u0443 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430: API \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u0438\u043f\u0442 \u043c\u043e\u0433 \u0433\u0435\u043d\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0435\u043c\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447 API-\u043a\u043b\u044e\u0447 (\u0442\u043e\u043a\u0435\u043d). \u041d\u0435 \u043e\u0441\u043e\u0431\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 Octo (\u0445\u043e\u0442\u044f \u043a\u043e\u043c\u0443 \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0447\u0438\u0441\u0442\u0430\u044f \u0432\u043a\u0443\u0441\u043e\u0432\u0449\u0438\u043d\u0430) &#8212; \u043a\u043b\u044e\u0447 \u0410\u041f\u0418 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u041f\u043e \u043c\u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0435\u0433\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0431\u0440\u0430\u0442\u044c, \u0431\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f \u0441\u043e\u0444\u0442. \u0422\u043e\u043a\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 API-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dd6\/0b0\/c36\/dd60b0c36f8d280ec34dbb4a3015db37.png\" width=\"1536\" height=\"1024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/dd6\/0b0\/c36\/dd60b0c36f8d280ec34dbb4a3015db37.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dd6\/0b0\/c36\/dd60b0c36f8d280ec34dbb4a3015db37.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0440\u043e\u043c\u0435 API, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439:<\/p>\n<p><strong>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432<\/strong> \u2013 \u043f\u0440\u043e\u043a\u0441\u0438 \u044f \u0432\u0437\u044f\u043b \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0435 <strong>2prx<\/strong>. \u0425\u043e\u0440\u043e\u0448\u043e \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043d\u0430\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430, \u0441\u0442\u0430\u0432\u0438\u0448\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u043a\u0441\u0435\u0439 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0448\u044c \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u041f\u0440\u043e\u043a\u0441\u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0432 \u0444\u0430\u0439\u043b <code>proxies.csv<\/code> \u0432 \u0442\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 &#8212; \u0442\u0438\u043f (HTTP\/HTTPS \u0438\u043b\u0438 SOCKS5), \u0445\u043e\u0441\u0442, \u043f\u043e\u0440\u0442, \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c . \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u2013 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438. <strong>\u041f\u0440\u0438\u043c\u0435\u0440: <\/strong><code>HTTP,192.0.2.10,24000,mylogin,mypass<\/code>. \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 <strong>\u0442\u0438\u043f<\/strong> \u043f\u0440\u043e\u043a\u0441\u0438, \u0438\u043d\u0430\u0447\u0435 Octo Browser \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f, \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 400).<\/p>\n<p><strong>Cookie-\u0444\u0430\u0439\u043b\u044b (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e)<\/strong> \u2013 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0443\u043a\u0438 \u0432 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0432\u0445\u043e\u0434 \u0432 \u0430\u043a\u043a\u0430\u0443\u043d\u0442), \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0430\u0439\u043b <code>cookies.json<\/code>. \u0424\u043e\u0440\u043c\u0430\u0442: JSON-\u043e\u0431\u044a\u0435\u043a\u0442, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u0438 \u2013 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 0), \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2013 \u0441\u043f\u0438\u0441\u043a\u0438 \u043a\u0443\u043a\u0438 \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f. \u041a\u0430\u0436\u0434\u044b\u0439 cookie \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 (<code>name<\/code>, <code>value<\/code>, <code>domain<\/code>, <code>path<\/code>, <code>expirationDate <\/code>\u0438 \u0442.\u0434.). \u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<pre><code class=\"json\">{     \"0\": [ { \"&lt;cookie1&gt;\": \"...\" }, { \"&lt;cookie2&gt;\": \"...\" } ],     \"1\": [ { \/* cookies for profile #2 *\/ } ],     \"...\": ... }<\/code><\/pre>\n<p>\u00a0\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u0441 \u043a\u0443\u043a\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442 \u044d\u0442\u043e\u0442 \u0448\u0430\u0433.<\/p>\n<p><strong>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/strong> \u2013 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <strong>.env<\/strong> \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0412 \u043d\u0451\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c:<\/p>\n<ul>\n<li>\n<p><code>OCTO_API_TOKEN=&lt;\u0432\u0430\u0448 \u0442\u043e\u043a\u0435\u043d&gt;<\/code> \u2013 \u0442\u043e\u043a\u0435\u043d \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Octo API.<\/p>\n<\/li>\n<li>\n<p><code>PROXY_FILE=proxies.csv<\/code> \u2013 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0441 \u043f\u0440\u043e\u043a\u0441\u0438 (\u0435\u0441\u043b\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0433\u043e).<\/p>\n<\/li>\n<li>\n<p><code>COOKIE_FILE=cookies.json<\/code> \u2013 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0441 \u043a\u0443\u043a\u0438 (\u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0438 \u0438\u043c\u044f \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f).<\/p>\n<\/li>\n<li>\n<p><code>PROFILE_COUNT=0<\/code> \u2013 \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. 0 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435\u00bb. \u041c\u043e\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u043a\u0441\u0438 10, \u0430 <code>PROFILE_COUNT=20<\/code>, \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 20 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u043f\u0440\u043e\u043a\u0441\u0438 \u043d\u0430\u0447\u043d\u0443\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0434\u0435\u0441\u044f\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><strong>Python \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435<\/strong> \u2013 \u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"python\">pip install requests python-dotenv<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0432\u044b\u043b\u043e\u0436\u0438\u043b \u0432 \u0441\u0432\u043e\u0439 \u0413\u0438\u0442\u0445\u0430\u0431 &#8212; <a href=\"https:\/\/github.com\/kentavr009\/Octo-Profile-Creator\" rel=\"noopener noreferrer nofollow\">Octo Browser Profile Creator<\/a><\/p>\n<h3>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0432 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435<\/h3>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0430\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u043d\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442:<\/p>\n<pre><code class=\"python\">#!\/usr\/bin\/env python3 # -*- coding: utf-8 -*- \"\"\" Batch create Octo\u00a0Browser profiles.  \u2022 \u041f\u0440\u043e\u043a\u0441\u0438\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0438\u0437 proxies.csv \u2022 \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 cookies \u2014 \u0438\u0437 cookies.json \u2022 Octo \u0441\u0430\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 fingerprint \u043f\u043e \"\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0435\" \u2022 \u041a\u043e\u043b\u2011\u0432\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f PROFILE_COUNT (\u043f\u043e\u2011\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e = \u043a\u043e\u043b\u2011\u0432\u043e \u043f\u0440\u043e\u043a\u0441\u0438) \"\"\"  import csv import json import os import sys import time import itertools from pathlib import Path from typing import Any, Dict, List  import requests from dotenv import load_dotenv  # \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 CONFIG \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 API_BASE = \"https:\/\/app.octobrowser.net\/api\/v2\/automation\" REQ_TIMEOUT = 30  # \u0441\u0435\u043a\u0443\u043d\u0434 DEFAULT_FP = {\"os\": \"win\", \"screen\": \"1920x1080\"}  BASE_DIR = Path(__file__).parent.resolve() load_dotenv()  # \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c .env  TOKEN = os.getenv(\"OCTO_API_TOKEN\", \"\") if not TOKEN:     sys.exit(\"\ud83d\uded1 Specify OCTO_API_TOKEN in .env\")  HEADERS = {\"X-Octo-Api-Token\": TOKEN}  PROXY_CSV = BASE_DIR \/ os.getenv(\"PROXY_FILE\", \"proxies.csv\") COOKIE_JSON = BASE_DIR \/ os.getenv(\"COOKIE_FILE\", \"cookies.json\") PROFILE_COUNT = int(os.getenv(\"PROFILE_COUNT\", \"0\"))  # 0 \u2192 len(proxies)  # \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 UTILITIES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 def sniff(path: Path) -&gt; csv.Dialect:     sample = path.read_text(encoding=\"utf-8\")[:1024]     return csv.Sniffer().sniff(sample, delimiters=\",;\\t \")   def load_proxies(path: Path) -&gt; List[Dict[str, Any]]:     if not path.exists():         sys.exit(f\"\ud83d\uded1 Proxies file not found: {path}\")      dialect = sniff(path)     proxies: List[Dict[str, Any]] = []      with path.open(encoding=\"utf-8\", newline=\"\") as f:         reader = csv.DictReader(f, dialect=dialect)         for row in reader:             p = {k.strip(): v.strip() for k, v in row.items() if v and k}             try:                 # Octo API \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443; int \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u043a \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u043d\u0430 \u00ab\u0447\u0438\u0441\u043b\u043e\u00bb                 p[\"port\"] = str(p[\"port\"])             except Exception:                 sys.exit(f\"\ud83d\uded1 Invalid proxy row: {row}\")             proxies.append(p)      if not proxies:         sys.exit(\"\ud83d\uded1 No proxies loaded\")      return proxies   def load_cookies(path: Path) -&gt; Dict[str, List[Dict[str, Any]]]:     if not path.exists():         return {}      data = json.loads(path.read_text(encoding=\"utf-8\"))     if not isinstance(data, dict):         sys.exit(\"\ud83d\uded1 cookies.json must be a JSON object\")      return data   def api_post(endpoint: str, payload: Dict[str, Any]) -&gt; Dict[str, Any]:     url = f\"{API_BASE}\/{endpoint.lstrip('\/')}\"     resp = requests.post(url, json=payload, headers=HEADERS, timeout=REQ_TIMEOUT)     resp.raise_for_status()     check_limits(resp)  # \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0430\u0443\u0437\u0430 \u043f\u043e \u043a\u0432\u043e\u0442\u0430\u043c     return resp.json()[\"data\"]   def check_limits(response: requests.Response) -&gt; None:     \"\"\"     \u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 X\u2011RateLimit \u0438, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u0430\u0443\u0437\u0443.      \u2022 rpm \u00a0(X\u2011RateLimit\u2011Remaining)\u00a0\u2014 \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443     \u2022 rph \u00a0(X\u2011RateLimit\u2011Remaining\u2011Hour)\u00a0\u2014 \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0447\u0430\u0441     \u041f\u0440\u0438 rpm &lt;\u00a010 \u0436\u0434\u0451\u043c 60\u202f\u0441, \u043f\u0440\u0438 rph &lt;\u00a010 \u2014\u00a03600\u202f\u0441.     \"\"\"      rpm = int(response.headers.get(\"x-ratelimit-remaining\", 0))     rph = int(response.headers.get(\"x-ratelimit-remaining-hour\", 0))     print(f\"RPM remaining: {rpm} | RPH remaining: {rph}\")      if rpm &lt; 10:         print(\"\u26a0 \u041f\u043e\u0447\u0442\u0438 \u0443\u043f\u0451\u0440\u043b\u0438\u0441\u044c \u0432 \u043b\u0438\u043c\u0438\u0442 RPM, \u0441\u043f\u0438\u043c \u043c\u0438\u043d\u0443\u0442\u0443\u2026\")         time.sleep(60)     if rph &lt; 10:         print(\"\u26a0 \u041f\u043e\u0447\u0442\u0438 \u0443\u043f\u0451\u0440\u043b\u0438\u0441\u044c \u0432 \u043b\u0438\u043c\u0438\u0442 RPH, \u0441\u043f\u0438\u043c \u0447\u0430\u0441\u2026\")         time.sleep(3600)  # \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 MAIN \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 def main() -&gt; None:     proxies = load_proxies(PROXY_CSV)     cookies_map = load_cookies(COOKIE_JSON)      # \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u043c     total = PROFILE_COUNT if PROFILE_COUNT &gt; 0 else len(proxies)     proxy_cycle = itertools.cycle(proxies)      for idx in range(1, total + 1):         proxy = next(proxy_cycle)         title = f\"BatchProfile_{idx}\"         cookies = cookies_map.get(str(idx - 1))          payload: Dict[str, Any] = {             \"title\": title,             \"proxy\": proxy,             \"fingerprint\": DEFAULT_FP,         }         if cookies:             payload[\"cookies\"] = cookies          try:             data = api_post(\"profiles\", payload)             print(f\"\u2705 Profile #{idx} created \u2192 UUID {data['uuid']}\")         except requests.HTTPError as e:             print(f\"\u274c HTTP error for profile #{idx}: {e}\")             print(\"   Server response:\", e.response.text)  # \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 ENTRYPOINT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 if __name__ == \"__main__\":     main()<\/code><\/pre>\n<p><strong>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/strong> \u0421\u043a\u0440\u0438\u043f\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 .env \u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0442\u043e\u043a\u0435\u043d API \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432. \u0411\u0435\u0437 \u0442\u043e\u043a\u0435\u043d\u0430 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u2013 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>OCTO_API_TOKEN<\/code> \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439.<\/p>\n<p><strong>\u0427\u0442\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u043a\u0441\u0438.<\/strong> \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>load_proxies()<\/code> \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 proxies.csv \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u043a\u0441\u0438. \u0422\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>csv.Sniffer<\/code> \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f (\u0437\u0430\u043f\u044f\u0442\u0430\u044f, \u0442\u043e\u0447\u043a\u0430 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u044f \u2013 \u043d\u0435\u0432\u0430\u0436\u043d\u043e, \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0430\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442) \u0438 <code>csv.DictReader<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u043c\u0435\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439 <code>proxies<\/code>, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u043b\u044f \u043f\u0440\u043e\u043a\u0441\u0438 (host, port, etc.). \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043f\u043e\u0440\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a\u202fint, \u0432 \u044d\u0442\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u044f \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0435\u0433\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439\u202f(<code>str<\/code>)\u202f\u2014\u202fOcto\u202fAPI \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u044b\u0431\u043e\u0440 \u0442\u0438\u043f\u0430 \u0447\u0438\u0441\u0442\u0430\u044f \u0432\u043a\u0443\u0441\u043e\u0432\u0449\u0438\u043d\u0430. \u0415\u0441\u043b\u0438 \u0432 CSV \u043f\u043e\u0440\u0442 \u0443\u043a\u0430\u0437\u0430\u043d \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e (\u043d\u0435 \u0447\u0438\u0441\u043b\u043e\u043c), \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f: \ud83d\uded1 <code>Invalid proxy row<\/code>. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u043a\u0441\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d, \u0438\u043d\u0430\u0447\u0435 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c36\/eab\/89a\/c36eab89a48feeeb76e46b20a5f8a2f2.png\" width=\"1536\" height=\"1024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c36\/eab\/89a\/c36eab89a48feeeb76e46b20a5f8a2f2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c36\/eab\/89a\/c36eab89a48feeeb76e46b20a5f8a2f2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u0427\u0442\u0435\u043d\u0438\u0435 \u043a\u0443\u043a\u0438-\u0444\u0430\u0439\u043b\u0430.<\/strong> \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>load_cookies()<\/code> \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 cookies.json, \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0441\u0442\u044c. \u041e\u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 \u043b\u0435\u0436\u0438\u0442 JSON-\u043e\u0431\u044a\u0435\u043a\u0442 (\u0442\u0438\u043f\u0430 dict \u0432 Python). \u0415\u0441\u043b\u0438 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 JSON), \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u043e\u0431\u0449\u0438\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f: \ud83d\uded1 <code>cookies.json must be a JSON object<\/code>. \u041f\u0440\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u044c cookies_map, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u0438 \u2013 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0438 (\u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0435\u043a\u0441\u0442\u0430), \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2013 \u0441\u043f\u0438\u0441\u043a\u0438 cookie-\u0434\u0438\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439. \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, <code>cookies_map<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u043c \u2013 \u0441\u043a\u0440\u0438\u043f\u0442 \u044d\u0442\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p><strong>\u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0431\u043e\u0440 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439.<\/strong> \u041c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>total = PROFILE_COUNT<\/code>, \u0435\u0441\u043b\u0438 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0447\u0438\u0441\u043b\u043e, \u0438\u043d\u0430\u0447\u0435 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0434\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u043a\u0441\u0438. <code>PROFILE_COUNT<\/code> \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c 0, \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u043a\u0441\u0438. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u043a\u0441\u0438: \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>itertools.cycle(proxies)<\/code> \u2013 \u044d\u0442\u043e \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u043a\u0441\u0438 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 <strong>\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e<\/strong> \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u043f\u043e \u043a\u0440\u0443\u0433\u0443. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0438\u0441\u043a\u0438: \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0441 \u043e\u0434\u043d\u0438\u043c IP \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445, \u043d\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u0440\u043e\u043a\u0441\u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 <code>PROFILE_COUNT=10<\/code>, \u0430 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 50), \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u043f\u0440\u043e\u043a\u0441\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b.<\/p>\n<p>\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 API-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b <code>for idx in range(1, total+1)<\/code> \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0430\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e:<\/p>\n<ul>\n<li>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0438\u0437 <code>cycle<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u0440\u043e\u0444\u0438\u043b\u044f <code>title = BatchProfile_&lt;\u043d\u043e\u043c\u0435\u0440&gt;<\/code>. \u041f\u043e\u0442\u043e\u043c \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 <code>payload <\/code>\u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u044f:<\/p>\n<pre><code class=\"python\">payload = {     \"title\": title,     \"proxy\": proxy,     \"fingerprint\": DEFAULT_FP }<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c proxy \u2013 \u044d\u0442\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043f\u0440\u043e\u043a\u0441\u0438 \u0438\u0437 CSV (\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f, \u0445\u043e\u0441\u0442, \u043f\u043e\u0440\u0442, \u0442\u0438\u043f). \u0410 fingerprint \u2013 <strong>\u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442<\/strong>: \u043c\u044b \u043d\u0435 \u0437\u0430\u0434\u0430\u0451\u043c \u043f\u043e\u043b\u043d\u044b\u0439 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 <code>DEFAULT_FP = {\"os\": \"win\", \"screen\": \"1920x1080\"}<\/code>. \u0422\u043e \u0435\u0441\u0442\u044c, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 (Windows) \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u0430. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 ~50 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u0430 Octo Browser \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0432 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0439 fingerprint \u043f\u043e\u0434 \u043d\u0443\u0436\u043d\u0443\u044e \u041e\u0421. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u043e\u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u044f \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435. API \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c OS (win \u0438\u043b\u0438 mac) \u2013 \u044d\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 (User-Agent, \u0441\u043f\u0438\u0441\u043e\u043a \u0448\u0440\u0438\u0444\u0442\u043e\u0432, WebGL-\u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440, \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u044f\u0441 \u0438 \u0442.\u0434.) \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u2013 Octo \u043f\u043e\u0434\u0431\u0435\u0440\u0451\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u041e\u0421 \u0438 \u044d\u043a\u0440\u0430\u043d\u0443. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u0432\u0435\u0434\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u043b\u0435 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0432 cookies_map \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c (\u043a\u043b\u044e\u0447 \u0440\u0430\u0432\u0435\u043d idx-1, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 JSON \u043c\u044b \u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043b\u0438 \u0441 0, \u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0441 1), \u0442\u043e \u044d\u0442\u0438 \u043a\u0443\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 payload: <code>payload[\"cookies\"] = &lt;\u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0443\u043a\u0438&gt;<\/code>. Octo API \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0441\u0440\u0430\u0437\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c cookie-\u0444\u0430\u0439\u043b\u044b \u2013 \u044d\u0442\u0438\u043c \u043c\u044b \u0438 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043a\u0443\u043a\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0441\u0440\u0430\u0437\u0443 \u00ab\u043f\u043e\u043c\u043d\u0438\u043b\u00bb \u0441\u0435\u0441\u0441\u0438\u044e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/482\/091\/aa3\/482091aa35527237de72be2af167d203.png\" width=\"1536\" height=\"1024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/482\/091\/aa3\/482091aa35527237de72be2af167d203.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/482\/091\/aa3\/482091aa35527237de72be2af167d203.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>api_post(\"profiles\", payload)<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u0442 HTTP POST \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"https:\/\/app.octobrowser.net\/api\/v2\/automation\/profiles\" rel=\"noopener noreferrer nofollow\">https:\/\/app.octobrowser.net\/api\/v2\/automation\/profiles<\/a> \u0441 \u043d\u0430\u0448\u0438\u043c payload \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON. \u0422\u043e\u043a\u0435\u043d \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a <code>X-Octo-Api-Token<\/code>. \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0451\u0440\u043d\u0443\u0442\u0430 \u0432 try\/except \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 HTTP-\u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p><strong>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0442\u0432\u0435\u0442\u0430:<\/strong> \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0441\u043f\u0435\u0448\u0435\u043d (\u043a\u043e\u0434 200), Octo \u0432\u0435\u0440\u043d\u0451\u0442 \u0432 \u043f\u043e\u043b\u0435 &#171;data&#187; \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0435\u0433\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 uuid. \u0421\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c: \u2705<code> Profile #X created \u2192 UUID &lt;...&gt;<\/code>. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0445), <a href=\"http:\/\/requests.post\" rel=\"noopener noreferrer nofollow\">requests.post<\/a> \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041c\u044b \u0435\u0433\u043e \u043b\u043e\u0432\u0438\u043c \u0438 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435: \u274c <code>HTTP error for profile #X: &lt;\u0442\u0435\u043a\u0441\u0442&gt;<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u043e\u0442\u0432\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (e.response.text) \u0434\u043b\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438. \u041f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u0430\u0443\u0437\u0443 <code>time.sleep(PAUSE)<\/code>. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>PAUSE = 0.5<\/code> \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0432 API.<\/p>\n<p><strong>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/strong> \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c. \u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430:<\/p>\n<pre><code>\u2705 Profile #1 created \u2192 UUID 123e4567-e89b-12d3-a456-426614174000 \u2705 Profile #2 created \u2192 UUID 123e4567-e89b-12d3-a456-42661417400a ... \u2705 Profile #10 created \u2192 UUID 123e4567-e89b-12d3-a456-426614174009<\/code><\/pre>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 N \u0441\u0442\u0440\u043e\u043a (\u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439). \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c Octo Browser \u2013 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043a\u0435. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0443\u0436\u0435 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b: \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u044b \u043a \u0441\u0432\u043e\u0438\u043c \u043f\u0440\u043e\u043a\u0441\u0438, \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u0435\u0436\u0435\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u043f\u043e\u0434 \u043d\u0443\u0436\u043d\u0443\u044e \u041e\u0421, \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043a\u0443\u043a\u0438 (\u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0445 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438).\u00a0<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b2d\/da1\/9e7\/b2dda19e753d1a5edb0f9d02fde9e44e.png\" width=\"1536\" height=\"1024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b2d\/da1\/9e7\/b2dda19e753d1a5edb0f9d02fde9e44e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b2d\/da1\/9e7\/b2dda19e753d1a5edb0f9d02fde9e44e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430<\/h3>\n<p>\u0421 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c\u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442. \u0412\u043e\u0442 \u043e\u043d<\/p>\n<pre><code class=\"python\">#!\/usr\/bin\/env python3 # -*- coding: utf-8 -*- \"\"\" \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 Octo Browser \u043f\u043e \u0438\u0445 UUID, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Selenium \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 IP-\u0430\u0434\u0440\u0435\u0441 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f. \"\"\" import os import sys import argparse import requests from dotenv import load_dotenv from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC  # --- \u041a\u041e\u041d\u0424\u0418\u0413\u0423\u0420\u0410\u0426\u0418\u042f --- load_dotenv() PORT = os.getenv(\"OCTO_LOCAL_PORT\", \"58888\") API_TOKEN = os.getenv(\"OCTO_API_TOKEN\") BASE_URL = f\"http:\/\/127.0.0.1:{PORT}\" HEADERS = {\"X-Octo-Api-Token\": API_TOKEN, \"Content-Type\": \"application\/json\"} REQ_TIMEOUT = 15  # \u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0434\u043b\u044f API \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445  def start_profile(uid: str) -&gt; int:     \"\"\"\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0447\u0435\u0440\u0435\u0437 Local API \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 debug-\u043f\u043e\u0440\u0442.\"\"\"     url = f\"{BASE_URL}\/api\/profiles\/start\"     payload = {\"uuid\": uid, \"headless\": False, \"debug_port\": True}          print(f\"\u25b6\ufe0f  \u041f\u0440\u043e\u0444\u0438\u043b\u044c {uid}: \u0437\u0430\u043f\u0443\u0441\u043a...\")     resp = requests.post(url, json=payload, headers=HEADERS, timeout=REQ_TIMEOUT)          if resp.status_code == 400:         print(f\"\u26d4\ufe0f [400 Bad Request] \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043d\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d. \u041e\u0442\u0432\u0435\u0442 API: {resp.text}\")     resp.raise_for_status() # \u0412\u044b\u0437\u043e\u0432\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 HTTP-\u043e\u0448\u0438\u0431\u043e\u043a          debug_port = resp.json().get(\"debug_port\")     if not debug_port:         raise ValueError(\"API \u043d\u0435 \u0432\u0435\u0440\u043d\u0443\u043b debug_port\")              print(f\"\u2705 \u041f\u0440\u043e\u0444\u0438\u043b\u044c {uid}: \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 {debug_port}\")     return debug_port  def attach_to_profile(port: int) -&gt; webdriver.Chrome:     \"\"\"\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0444\u0438\u043b\u044e Chrome \u0447\u0435\u0440\u0435\u0437 Selenium.\"\"\"     opts = Options()     opts.add_experimental_option(\"debuggerAddress\", f\"127.0.0.1:{port}\")     # \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e chromedriver \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c PATH \u0438\u043b\u0438 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0443\u0442\u044c:     # driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=opts)     return webdriver.Chrome(options=opts)  def check_ip(driver: webdriver.Chrome) -&gt; str:     \"\"\"\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 IP-\u0430\u0434\u0440\u0435\u0441.\"\"\"     driver.get(\"https:\/\/httpbin.org\/ip\")     # \u041e\u0436\u0438\u0434\u0430\u0435\u043c \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 &lt;pre&gt; \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435     pre_element = WebDriverWait(driver, 10).until(         EC.visibility_of_element_located((By.TAG_NAME, \"pre\"))     )     # \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c IP-\u0430\u0434\u0440\u0435\u0441 \u0438\u0437 JSON-\u043e\u0442\u0432\u0435\u0442\u0430     ip_data = pre_element.text     return ip_data.strip()  def main(uids: list[str]):     \"\"\"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 UUID \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439.\"\"\"     for uid in uids:         driver = None         try:             debug_port = start_profile(uid)             driver = attach_to_profile(debug_port)                          ip_address = check_ip(driver)             print(f\"   IP-\u0430\u0434\u0440\u0435\u0441: {ip_address}\\n\")                      except requests.RequestException as e:             print(f\"\u26d4\ufe0f \u041e\u0448\u0438\u0431\u043a\u0430 API \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f {uid}: {e}\\n\")         except Exception as e:             print(f\"\u26d4\ufe0f \u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f {uid}: {e}\\n\")         finally:             if driver:                 driver.quit()  if __name__ == \"__main__\":     if not API_TOKEN:         sys.exit(\"\u26d4\ufe0f OCTO_API_TOKEN \u043d\u0435 \u0437\u0430\u0434\u0430\u043d \u0432 .env \u0444\u0430\u0439\u043b\u0435. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0435\u0433\u043e.\")              parser = argparse.ArgumentParser(         description=\"\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 Octo Browser \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0438\u0445 IP.\"     )     parser.add_argument(         'profile_uids',          nargs='+',          metavar='UUID',          help='\u041e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e UUID \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430'     )     args = parser.parse_args()          main(args.profile_uids)<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u043e, \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u0442 \u0438 \u0442\u043e\u043a\u0435\u043d API Octo Browser, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 UUID \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 HTTP\u2011\u0437\u0430\u043f\u0440\u043e\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044c, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u043d\u0435\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 Selenium Remote Debugging \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 IP \u043d\u0430 httpbin.org. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0444\u0430\u0440\u043c\u0438\u043d\u0433\u0435. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 ip \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430.\u00a0<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e \u0448\u0430\u0433\u0430\u043c, \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c\u0438 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438<\/p>\n<h4>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438<\/h4>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>dotenv.load_dotenv()<\/code> \u0441\u043a\u0440\u0438\u043f\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 <code>.env<\/code> \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0442\u0442\u0443\u0434\u0430 <code>OCTO_LOCAL_PORT<\/code> (\u043f\u043e\u0440\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0448\u0430\u0435\u0442 API Octo, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\u202f58888) \u0438 <code>OCTO_API_TOKEN<\/code>.<br \/>\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0439 <code>URL API BASE_URL = <\/code><a href=\"http:\/\/127.0.0.1:&lt;PORT&gt;\" rel=\"noopener noreferrer nofollow\"><code>http:\/\/127.0.0.1:&lt;PORT&gt;<\/code><\/a>, \u0430 \u0442\u0430\u043a\u0436\u0435 HTTP\u2011\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 HEADERS \u0441 \u043a\u043b\u044e\u0447\u043e\u043c <code>X-Octo-Api-Token<\/code>.<\/p>\n<h4>\u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438<\/h4>\n<p>\u0427\u0435\u0440\u0435\u0437 <code>argparse <\/code>\u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e UUID \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 (\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>profile_uids<\/code>).\u00a0 \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"python\">python check_ip.py uuid1 uuid2 uuid3<\/code><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0432\u044b \u0432 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0435 UUID\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>start_profile(uid: str) -&gt; int<\/code>   \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 POST\u2011\u0437\u0430\u043f\u0440\u043e\u0441 \u043a <code>http:\/\/127.0.0.1:&lt;PORT&gt;\/api\/profiles\/start<\/code> \u0441 JSON\u2011\u0442\u0435\u043b\u043e\u043c:<\/p>\n<pre><code class=\"python\">{ \"uuid\": \"&lt;UID&gt;\", \"headless\": false, \"debug_port\": true }<\/code><\/pre>\n<p>\u041e\u043f\u0446\u0438\u044f <code>debug_port: true<\/code> \u043f\u0440\u043e\u0441\u0438\u0442 API \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u043e\u0440\u0442 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438. <\/p>\n<p>\u041f\u0440\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 <code>400 (\u201cBad Request\u201d)<\/code> \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0442\u0435\u043a\u0441\u0442 \u043e\u0442\u0432\u0435\u0442\u0430 API, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043d\u0435 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442. <\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>raise_for_status()<\/code> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 HTTP\u2011\u043e\u0448\u0438\u0431\u043e\u043a. \u0418\u0437 JSON\u2011\u043e\u0442\u0432\u0435\u0442\u0430 \u0431\u0435\u0440\u0451\u0442 \u043f\u043e\u043b\u0435 <code>debug_port <\/code>\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u043a\u0430\u043a \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>attach_to_profile(port: int) -&gt; <\/code><a href=\"http:\/\/webdriver.Chrome\" rel=\"noopener noreferrer nofollow\"><code>webdriver.Chrome<\/code><\/a> \u0441\u043e\u0437\u0434\u0430\u0451\u0442 <code>ChromeOptions()<\/code> \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0446\u0438\u044e <code>debuggerAddress \u043d\u0430 127.0.0.1:&lt;port&gt;<\/code>. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 <code>chromedriver<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u043c\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0443 Octo \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u0440\u0442\u0443 \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 <code>driver<\/code>, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439.<\/p>\n<h4>\u0413\u0434\u0435 \u0432\u0437\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 chromedriver<\/h4>\n<p>\u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c &#8212; \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 <code>webdriver\u2011manager.<\/code><\/p>\n<pre><code class=\"python\">from webdriver_manager.chrome import ChromeDriverManager driver_path = ChromeDriverManager().install()  # \u0441\u043a\u0430\u0447\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e, \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u043f\u043e\u0434 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 Chrome svc = webdriver.chrome.service.Service(driver_path) driver = webdriver.Chrome(service=svc, options=opts)<\/code><\/pre>\n<p>\u041b\u0438\u0431\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0442\u0443\u0442 &#8212; <a href=\"https:\/\/googlechromelabs.github.io\/chrome-for-testing\/\" rel=\"noopener noreferrer nofollow\">https:\/\/googlechromelabs.github.io\/chrome-for-testing\/<\/a>, \u043d\u043e \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0435\u0433\u043e \u0432 Path.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>check_ip(driver) -&gt; str <\/code>\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <code>https:\/\/httpbin.org\/ip<\/code><a href=\"https:\/\/httpbin.org\/ip.%EF%BF%BC%D0%A1\" rel=\"noopener noreferrer nofollow\">.<\/a> \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>WebDriverWait <\/code>\u0436\u0434\u0451\u0442 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0433\u0430 <code>&lt;pre&gt;<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c httpbin \u043e\u0442\u0434\u0430\u0451\u0442 JSON \u0441 IP.<br \/>\u0427\u0438\u0442\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442 \u044d\u0442\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 (\u043f\u0440\u0438\u043c\u0435\u0440 <code>{ \"origin\": \"X.X.X.X\" }<\/code>) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443, \u043e\u0431\u0440\u0435\u0437\u0430\u0432 \u043b\u0438\u0448\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u0435\u043b\u044b.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>main(uids: list[str])<\/code>\u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 UUID. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e UUID: \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>start_profile<\/code>, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 <code>debug_port<\/code>. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0444\u0438\u043b\u044e \u0447\u0435\u0440\u0435\u0437 <code>attach_to_profile<\/code>. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 IP \u0447\u0435\u0440\u0435\u0437 <code>check_ip<\/code> \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u0412 \u0431\u043b\u043e\u043a\u0435 <code>finally <\/code>\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0431\u044b\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<p>\u0422\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 <code>if <strong>name<\/strong> == \"__main__\"  -<\/code>\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e API_TOKEN \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0434\u0430\u043d, \u0438\u043d\u0430\u0447\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c. \u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0430\u0440\u0441\u0435\u0440 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>main<\/code> \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 UUID.<\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u044d\u0442\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0415\u0435 \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0438\u0435 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 API \u0438\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 (\u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u0433 \u043d\u043e\u0432\u044b\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u0445 UUID \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438, \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0443\u0447\u0430, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0432 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u0441\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c).<\/p>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Selenium \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0430\u043d\u0442\u0438\u0444\u0440\u043e\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u0440\u043e\u0434\u0435 <code>undetected-chromedriver<\/code> \u0441 \u043f\u0430\u0442\u0447\u0430\u043c\u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u043c\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438.  <\/p>\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\/932418\/\"> https:\/\/habr.com\/ru\/articles\/932418\/<\/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 <a href=\"https:\/\/habr.com\/ru\/articles\/928164\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u043b \u0442\u043e\u043d\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u0432 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0430\u0440\u0431\u0438\u0442\u0440\u0430\u0436\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0441\u043d\u0443\u043b\u0441\u044f \u0442\u0435\u043c\u044b, \u043d\u0443 \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u043d\u0435\u0441\u043b\u0430\u0441\u044c. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0435\u0449\u0435 \u0434\u0432\u0435 \u0434\u0440\u0443\u0433\u0438\u0445, \u043d\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0441\u0440\u0430\u0437\u0443 \u043e\u0434\u043d\u0438\u043c \u043c\u0430\u0445\u043e\u043c \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u043b \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u043a\u043e\u043f\u0430\u044f\u0441\u044c \u0432 \u043d\u0435\u0434\u0440\u0430\u0445 \u0430\u0440\u0431\u0438\u0442\u0440\u0430\u0436\u0430 (\u0434\u043b\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0433\u0443\u0440\u0443 \u044d\u0442\u0438 \u043d\u0435\u0434\u0440\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438) \u044f \u0437\u0430\u043f\u0438\u043b\u0438\u043b \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0432 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0447\u0435\u0440\u0435\u0437 \u0410\u041f\u0418. \u0417\u0432\u0443\u0447\u0438\u0442 \u0443\u0433\u0440\u043e\u0436\u0430\u044e\u0449\u0435? \u041d\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0442\u043e\u0440\u043e\u043f\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0434\u0432\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u0430\u0440\u0431\u0438\u0442\u0440\u0430\u0436\u043d\u0438\u043a\u043e\u0432, \u043b\u0438\u0431\u043e \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0445 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u0430\u0440\u0431\u0438\u0442\u0440\u0430\u0436\u043d\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 \u0410\u041f\u0418 (like a boss).<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0442\u044c \u0441\u043e\u0442\u043d\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u043a\u0430\u043a \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0442\u0430\u043a \u0438 \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 (\u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u0438\u043b\u0438\u0442\u044c \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0430\u043f\u043a\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u043c\u0438).<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u043d\u0435 \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0430 \u0438\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0441\u0430\u043c \u0444\u0430\u043a\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u0430\u043b\u043e \u0447\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c, \u043d\u043e \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0444\u0430\u0440\u043c\u0438\u043d\u0433\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432. \u041d\u043e \u0444\u0430\u0440\u043c\u0438\u043d\u0433 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u0442\u0435\u043c\u0430, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442.<\/p>\n<p>\u041d\u0443 \u0430 \u0442\u0435\u043f\u0435\u0440\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<h3>\u0417\u0430\u0447\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0432 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435?<\/h3>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u043c\u0438 (\u0430 \u0442\u043e \u0438 \u0441\u043e\u0442\u043d\u044f\u043c\u0438) \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442-\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0441\u0438\u043b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2013 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435. \u0420\u0443\u0447\u043d\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u043a\u0441\u0438, \u0438\u043c\u043f\u043e\u0440\u0442 \u043a\u0443\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u2013 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u0438, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043b\u0435\u0433\u043a\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0435. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0442\u0435\u0431\u044f 10-15 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c (\u0445\u043e\u0442\u044f \u0435\u0441\u043b\u0438 \u043e\u043d \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 &#8212; \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438 \u043d\u0435\u0442, \u043f\u0440\u0430\u0432\u0434\u0430?) \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u043a\u0440\u0430\u0442\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435? \u041c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c, \u043d\u043e \u043a\u043e\u043c\u0443 \u0442\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043d\u0435) \u043f\u0440\u043e\u0449\u0435, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435, \u0434\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435-\u043a\u043e\u043d\u0446\u043e\u0432 \u0440\u0430\u0437\u0443\u043c\u043d\u0435\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u0451 \u0437\u0430 \u0432\u0430\u0441.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041a\u0440\u043e\u043c\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a. \u0411\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0430\u043a\u0442\u043e\u0440. \u0427\u0435\u043b\u043e\u0432\u0435\u043a \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435 \u0442\u0443 \u043c\u0435\u0442\u043a\u0443 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043f\u0440\u043e\u043a\u0441\u0438, \u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441 \u0432\u0430\u043c\u0438 \u0442\u0430\u043a \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442 \u0438 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u043c\u0430\u0445\u043e\u0432 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442.<\/p>\n<p><strong>\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043c\u0443\u043b\u044c\u0442\u0438\u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0438\u043d\u0433\u0430:<\/strong> \u042f \u043d\u0435 \u0443\u0441\u0442\u0430\u044e \u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0433\u0434\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0438\u043d\u0433\u0430, \u0447\u0442\u043e \u0410\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u044d\u0442\u043e \u043c\u0430\u0441\u0442 \u0445\u044d\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043d\u0438\u0448\u0438. \u041e\u043d\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u043f\u0440\u0438 \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432 \u0441\u0435\u0442\u044f\u0445 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445. \u041e\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0441 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u2013 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u0443 \u0432\u0430\u0441 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432. \u041c\u043e\u0436\u043d\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u0435\u0441\u0442\u0438 \u0441\u043e\u0442\u043d\u0438 \u0440\u0435\u043a\u043b\u0430\u043c\u043d\u044b\u0445 \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u043e\u0432 \u0438\u043b\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u0432 \u0441\u043e\u0446\u0441\u0435\u0442\u044f\u0445 \u0441 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u0418 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u043a\u0441\u0438. \u042d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0431\u0443\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 API \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 <a href=\"https:\/\/octobrowser.net\/\" rel=\"noopener noreferrer nofollow\">Octo Browser<\/a> \u0438 \u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u043a\u0441\u044f\u043c\u0438 <a href=\"https:\/\/2prx.com\/\" rel=\"noopener noreferrer nofollow\">2prx<\/a>. \u0423 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f (\u0442\u0430\u0440\u0438\u0444 Base \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0410\u041f\u0418), \u0430 \u0443 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0413\u0411 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043e\u0434 \u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u043a\u0441\u0438. \u0412 \u043e\u0431\u0449\u0435\u043c \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0433\u043e\u0434\u043d\u043e \u0434\u043b\u044f \u0441\u0435\u043c\u0435\u0439\u043d\u043e\u0433\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u0438 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u0422\u0430\u043d\u0434\u0435\u043c \u2013 <strong>\u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u043a\u0441\u0438 + \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442-\u0431\u0440\u0430\u0443\u0437\u0435\u0440<\/strong> \u2013 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043e\u043b\u043e\u0442\u044b\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0437\u0430\u0434\u0430\u0447. \u041f\u0440\u043e\u043a\u0441\u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 IP \u0438 \u043e\u0431\u0445\u043e\u0434\u044f\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0430 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 50 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 (Canvas, WebGL, \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u044f\u0441, \u044f\u0437\u044b\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0442\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0442.\u0434.), \u043d\u043e \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 &#8212; \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c (\u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u0433\u043b\u0430\u0437\u0430\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f). \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c <em>\u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f<\/em> \u0441\u0435\u0440\u0444\u0438\u043d\u0433\u0430 \u0438 \u0440\u0435\u0448\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0434\u0430\u0447..<\/p>\n<p><strong>\u0417\u0430\u0434\u0430\u0447\u0430:<\/strong> \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0438 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 API. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c: \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c 100 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u043a\u0430\u0436\u0434\u044b\u0439 \u0441 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u043a\u0441\u0438 \u2013 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u0433\u043e (\u044f \u0431\u044b \u0442\u043e\u0447\u043d\u043e \u043a\u043e\u0432\u044b\u0440\u044f\u043b\u0441\u044f \u043f\u043e\u043b \u0434\u043d\u044f). \u041d\u043e \u0435\u0441\u0442\u044c \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0435 API. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 Octo Browser \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f \u0438 \u0431\u0443\u0434\u0443 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430: API \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u0438\u043f\u0442 \u043c\u043e\u0433 \u0433\u0435\u043d\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0435\u043c\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447 API-\u043a\u043b\u044e\u0447 (\u0442\u043e\u043a\u0435\u043d). \u041d\u0435 \u043e\u0441\u043e\u0431\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 Octo (\u0445\u043e\u0442\u044f \u043a\u043e\u043c\u0443 \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0447\u0438\u0441\u0442\u0430\u044f \u0432\u043a\u0443\u0441\u043e\u0432\u0449\u0438\u043d\u0430) &#8212; \u043a\u043b\u044e\u0447 \u0410\u041f\u0418 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u041f\u043e \u043c\u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0435\u0433\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0431\u0440\u0430\u0442\u044c, \u0431\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f \u0441\u043e\u0444\u0442. \u0422\u043e\u043a\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 API-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041a\u0440\u043e\u043c\u0435 API, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439:<\/p>\n<p><strong>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432<\/strong> \u2013 \u043f\u0440\u043e\u043a\u0441\u0438 \u044f \u0432\u0437\u044f\u043b \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0435 <strong>2prx<\/strong>. \u0425\u043e\u0440\u043e\u0448\u043e \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043d\u0430\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430, \u0441\u0442\u0430\u0432\u0438\u0448\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u043a\u0441\u0435\u0439 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0448\u044c \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u041f\u0440\u043e\u043a\u0441\u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0432 \u0444\u0430\u0439\u043b <code>proxies.csv<\/code> \u0432 \u0442\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 &#8212; \u0442\u0438\u043f (HTTP\/HTTPS \u0438\u043b\u0438 SOCKS5), \u0445\u043e\u0441\u0442, \u043f\u043e\u0440\u0442, \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c . \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u2013 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438. <strong>\u041f\u0440\u0438\u043c\u0435\u0440: <\/strong><code>HTTP,192.0.2.10,24000,mylogin,mypass<\/code>. \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 <strong>\u0442\u0438\u043f<\/strong> \u043f\u0440\u043e\u043a\u0441\u0438, \u0438\u043d\u0430\u0447\u0435 Octo Browser \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f, \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 400).<\/p>\n<p><strong>Cookie-\u0444\u0430\u0439\u043b\u044b (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e)<\/strong> \u2013 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0443\u043a\u0438 \u0432 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0432\u0445\u043e\u0434 \u0432 \u0430\u043a\u043a\u0430\u0443\u043d\u0442), \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0430\u0439\u043b <code>cookies.json<\/code>. \u0424\u043e\u0440\u043c\u0430\u0442: JSON-\u043e\u0431\u044a\u0435\u043a\u0442, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u0438 \u2013 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 0), \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2013 \u0441\u043f\u0438\u0441\u043a\u0438 \u043a\u0443\u043a\u0438 \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f. \u041a\u0430\u0436\u0434\u044b\u0439 cookie \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 (<code>name<\/code>, <code>value<\/code>, <code>domain<\/code>, <code>path<\/code>, <code>expirationDate <\/code>\u0438 \u0442.\u0434.). \u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<pre><code class=\"json\">{     \"0\": [ { \"&lt;cookie1&gt;\": \"...\" }, { \"&lt;cookie2&gt;\": \"...\" } ],     \"1\": [ { \/* cookies for profile #2 *\/ } ],     \"...\": ... }<\/code><\/pre>\n<p>\u00a0\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u0441 \u043a\u0443\u043a\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442 \u044d\u0442\u043e\u0442 \u0448\u0430\u0433.<\/p>\n<p><strong>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/strong> \u2013 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <strong>.env<\/strong> \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0412 \u043d\u0451\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c:<\/p>\n<ul>\n<li>\n<p><code>OCTO_API_TOKEN=&lt;\u0432\u0430\u0448 \u0442\u043e\u043a\u0435\u043d&gt;<\/code> \u2013 \u0442\u043e\u043a\u0435\u043d \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Octo API.<\/p>\n<\/li>\n<li>\n<p><code>PROXY_FILE=proxies.csv<\/code> \u2013 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0441 \u043f\u0440\u043e\u043a\u0441\u0438 (\u0435\u0441\u043b\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0433\u043e).<\/p>\n<\/li>\n<li>\n<p><code>COOKIE_FILE=cookies.json<\/code> \u2013 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0441 \u043a\u0443\u043a\u0438 (\u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0438 \u0438\u043c\u044f \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f).<\/p>\n<\/li>\n<li>\n<p><code>PROFILE_COUNT=0<\/code> \u2013 \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. 0 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435\u00bb. \u041c\u043e\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u043a\u0441\u0438 10, \u0430 <code>PROFILE_COUNT=20<\/code>, \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 20 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, \u043f\u0440\u043e\u043a\u0441\u0438 \u043d\u0430\u0447\u043d\u0443\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0434\u0435\u0441\u044f\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><strong>Python \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435<\/strong> \u2013 \u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"python\">pip install requests python-dotenv<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0432\u044b\u043b\u043e\u0436\u0438\u043b \u0432 \u0441\u0432\u043e\u0439 \u0413\u0438\u0442\u0445\u0430\u0431 &#8212; <a href=\"https:\/\/github.com\/kentavr009\/Octo-Profile-Creator\" rel=\"noopener noreferrer nofollow\">Octo Browser Profile Creator<\/a><\/p>\n<h3>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0432 \u0430\u043d\u0442\u0438\u0434\u0435\u0442\u0435\u043a\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435<\/h3>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0430\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u043d\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442:<\/p>\n<pre><code class=\"python\">#!\/usr\/bin\/env python3 # -*- coding: utf-8 -*- \"\"\" Batch create Octo\u00a0Browser profiles.  \u2022 \u041f\u0440\u043e\u043a\u0441\u0438\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0438\u0437 proxies.csv \u2022 \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 cookies \u2014 \u0438\u0437 cookies.json \u2022 Octo \u0441\u0430\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 fingerprint \u043f\u043e \"\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0435\" \u2022 \u041a\u043e\u043b\u2011\u0432\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f PROFILE_COUNT (\u043f\u043e\u2011\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e = \u043a\u043e\u043b\u2011\u0432\u043e \u043f\u0440\u043e\u043a\u0441\u0438) \"\"\"  import csv import json import os import sys import time import itertools from pathlib import Path from typing import Any, Dict, List  import requests from dotenv import load_dotenv  # \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 CONFIG \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 API_BASE = \"https:\/\/app.octobrowser.net\/api\/v2\/automation\" REQ_TIMEOUT = 30  # \u0441\u0435\u043a\u0443\u043d\u0434 DEFAULT_FP = {\"os\": \"win\", \"screen\": \"1920x1080\"}  BASE_DIR = Path(__file__).parent.resolve() load_dotenv()  # \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c .env  TOKEN = os.getenv(\"OCTO_API_TOKEN\", \"\") if not TOKEN:     sys.exit(\"\ud83d\uded1 Specify OCTO_API_TOKEN in .env\")  HEADERS = {\"X-Octo-Api-Token\": TOKEN}  PROXY_CSV = BASE_DIR \/ os.getenv(\"PROXY_FILE\", \"proxies.csv\") COOKIE_JSON = BASE_DIR \/ os.getenv(\"COOKIE_FILE\", \"cookies.json\") PROFILE_COUNT = int(os.getenv(\"PROFILE_COUNT\", \"0\"))  # 0 \u2192 len(proxies)  # \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 UTILITIES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 def sniff(path: Path) -&gt; csv.Dialect:     sample = path.read_text(encoding=\"utf-8\")[:1024]     return csv.Sniffer().sniff(sample, delimiters=\",;\\t \")   def load_proxies(path: Path) -&gt; List[Dict[str, Any]]:     if not path.exists():         sys.exit(f\"\ud83d\uded1 Proxies file not found: {path}\")      dialect = sniff(path)     proxies: List[Dict[str, Any]] = []      with path.open(encoding=\"utf-8\", newline=\"\") as f:         reader = csv.DictReader(f, dialect=dialect)         for row in reader:             p = {k.strip(): v.strip() for k, v in row.items() if v and k}             try:                 # Octo API \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443; int \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u043a \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u043d\u0430 \u00ab\u0447\u0438\u0441\u043b\u043e\u00bb                 p[\"port\"] = str(p[\"port\"])             except Exception:                 sys.exit(f\"\ud83d\uded1 Invalid proxy row: {row}\")             proxies.append(p)      if not proxies:         sys.exit(\"\ud83d\uded1 No proxies loaded\")      return proxies   def load_cookies(path: Path) -&gt; Dict[str, List[Dict[str, Any]]]:     if not path.exists():         return {}      data = json.loads(path.read_text(encoding=\"utf-8\"))     if not isinstance(data, dict):         sys.exit(\"\ud83d\uded1 cookies.json must be a JSON object\")      return data   def api_post(endpoint: str, payload: Dict[str, Any]) -&gt; Dict[str, Any]:     url = f\"{API_BASE}\/{endpoint.lstrip('\/')}\"     resp = requests.post(url, json=payload, headers=HEADERS, timeout=REQ_TIMEOUT)     resp.raise_for_status()     check_limits(resp)  # \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0430\u0443\u0437\u0430 \u043f\u043e \u043a\u0432\u043e\u0442\u0430\u043c     return resp.json()[\"data\"]   def check_limits(response: requests.Response) -&gt; None:     \"\"\"     \u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 X\u2011RateLimit \u0438, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u0430\u0443\u0437\u0443.      \u2022 rpm \u00a0(X\u2011RateLimit\u2011Remaining)\u00a0\u2014 \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443     \u2022 rph \u00a0(X\u2011RateLimit\u2011Remaining\u2011Hour)\u00a0\u2014 \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0447\u0430\u0441     \u041f\u0440\u0438 rpm &lt;\u00a010 \u0436\u0434\u0451\u043c 60\u202f\u0441, \u043f\u0440\u0438 rph &lt;\u00a010 \u2014\u00a03600\u202f\u0441.     \"\"\"      rpm = int(response.headers.get(\"x-ratelimit-remaining\", 0))     rph = int(response.headers.get(\"x-ratelimit-remaining-hour\", 0))     print(f\"RPM remaining: {rpm} | RPH remaining: {rph}\")      if rpm &lt; 10:         print(\"\u26a0 \u041f\u043e\u0447\u0442\u0438 \u0443\u043f\u0451\u0440\u043b\u0438\u0441\u044c \u0432 \u043b\u0438\u043c\u0438\u0442 RPM, \u0441\u043f\u0438\u043c \u043c\u0438\u043d\u0443\u0442\u0443\u2026\")         time.sleep(60)     if rph &lt; 10:        <\/code><\/pre>\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-469274","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/469274","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=469274"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/469274\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=469274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=469274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=469274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}