{"id":2942,"date":"2022-09-02T09:52:01","date_gmt":"2022-09-02T04:52:01","guid":{"rendered":"https:\/\/www.edopedia.com\/blog\/?p=2942"},"modified":"2022-09-18T13:38:08","modified_gmt":"2022-09-18T08:38:08","slug":"python-bot-script-to-increase-youtube-views-and-subscribers","status":"publish","type":"post","link":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/","title":{"rendered":"Python Bot Script to Increase Youtube Views and Subscribers"},"content":{"rendered":"\n<p>Do you know <strong>Python<\/strong> can help you <strong>get YouTube subscribers<\/strong> and even <strong>view\/like your YouTube video<\/strong> automatically?<\/p>\n\n\n\n<p>In this tutorial, I&#8217;ll guide you on how to create a <strong>Python Bot<\/strong> to <strong>auto-like YouTube videos<\/strong> and <strong>auto-subscribe YouTube channels<\/strong>. This will help you <strong>increase Views and Subscribers<\/strong> of a specific <strong>YouTube channel<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Demo Video<\/h2>\n\n\n<p><a class=\"ep_link_major\" href=\"https:\/\/streamable.com\/yi7o0\" target=\"_blank\" rel=\"noopener\">Live Demo<\/a><\/p>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Requirements<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Emails and Passwords Combo File<\/li><li>Action File (contains YouTube videos ID or channels ID)<\/li><\/ul>\n\n\n\n<p>Here&#8217;s an example of these files.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Emails and Passwords Combo File (accounts.txt)<\/h3>\n\n\n\n<p>Your emails combo file should follow this format.<\/p>\n\n\n\n<p><code>email@domain.com:YOUR_PASSWORD<\/code><\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;null&quot;,&quot;mime&quot;:&quot;text\/plain&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Plain Text&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;text&quot;}\">fake_account0@gmail.com:123456789\nfake_account1@gmail.com:123456789\nfake_account2@gmail.com:123456789\nfake_account3@gmail.com:123456789\nfake_account4@gmail.com:123456789\nfake_account5@gmail.com:123456789\nfake_account6@gmail.com:123456789\nfake_account7@gmail.com:123456789\nfake_account8@gmail.com:123456789\nfake_account9@gmail.com:123456789<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Action File &#8211; Videos ID (videos_id.txt)<\/h3>\n\n\n\n<p>You need to create a file that contains the YouTube videos IDs list. The Python script will use them to open the specified YouTube videos one by one and like them.<\/p>\n\n\n\n<p>Don&#8217;t use the full URL, instead use the ID only. For example, instead of using <code>https:\/\/www.youtube.com\/watch?v=XnEqfTjp66A<\/code> URL, use only <code>XnEqfTjp66A<\/code><\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;null&quot;,&quot;mime&quot;:&quot;text\/plain&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Plain Text&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;text&quot;}\">c0mX-5q3mrY\n2xJ11Zb9dxQ\nxd9HC6bP42g\n-ZwO1LtEnOY\nc0mX-5q3mrY\n2xJ11Zb9dxQ\nxd9HC6bP42g\n-ZwO1LtEnOY\nc0mX-5q3mrY\n2xJ11Zb9dxQ\nxd9HC6bP42g\n-ZwO1LtEnOY<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Action File &#8211; Channels ID (channels_id.txt)<\/h3>\n\n\n\n<p>You need to create a file that contains the YouTube channels IDs list. The Python script will use them to open the specified YouTube channels one by one and subscribe to them.<\/p>\n\n\n\n<p>Don&#8217;t use the full URL, instead use the ID only. For example, instead of using <code>https:\/\/www.youtube.com\/channel\/UCs4aHmggTfFrpkPcWSaBN9g<\/code> URL, use only <code>UCs4aHmggTfFrpkPcWSaBN9g<\/code><\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;null&quot;,&quot;mime&quot;:&quot;text\/plain&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Plain Text&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;text&quot;}\">UCs4aHmggTfFrpkPcWSaBN9g\nUCzEnk4KWFlSj_PjXLz0-GMA\nUCto7D1L-MiRoOziCXK9uT5Q<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Python YouTube Subscriber Bot &#8211; Full Project Source Code<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Project Folder Structure<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>lib<\/strong><ul><li><code>__init__.py<\/code><\/li><li>action.py<\/li><li>auth.py<\/li><li>chromedriver.exe<\/li><li>cli.py<\/li><li>execption.py<\/li><li>hotfix.py<\/li><li>multi.py<\/li><\/ul><\/li><li>version<\/li><li>yt.py<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Install Dependencies<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">pip install requests<\/pre><\/div>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">pip install colorama<\/pre><\/div>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">pip install selenium<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">lib\/__init__.py<\/h2>\n\n\n\n<p>This file will be empty for now. We might use this file in the future. But, for now, simply create this file and leave it empty.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">lib\/action.py<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Python&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;python&quot;}\">import requests\nimport json\nimport re\ntry:\n\timport urllib.parse as urlparse\nexcept:\n\timport urlparse\n\ndef subscribe(channel_id,session):\n\t\txsrf = (re.findall(&quot;XSRF_TOKEN\\W*(.*)=&quot;, session.get(&quot;https:\/\/www.youtube.com\/channel\/%s&quot; % channel_id).content , re.IGNORECASE)[0]).split('&quot;')[0]\n\t\tdata = [\n\t\t  ('sej', '{&quot;clickTrackingParams&quot;:&quot;&quot;,&quot;commandMetadata&quot;:{&quot;webCommandMetadata&quot;:{&quot;url&quot;:&quot;\/service_ajax&quot;,&quot;sendPost&quot;:true}},&quot;subscribeEndpoint&quot;:{&quot;channelIds&quot;:[&quot;'+channel_id+'&quot;],&quot;params&quot;:&quot;EgIIAg%3D%3D&quot;}}'),\n\t\t  ('session_token', xsrf+&quot;==&quot;),\n\t\t]\n\t\tresponse = session.post('https:\/\/www.youtube.com\/service_ajax?name=subscribeEndpoint', data=data)\n\t\tcheck_state = json.loads(response.content)['code']\n\t\tif check_state == &quot;SUCCESS&quot;:\n\t\t\treturn 1\n\t\telse:\n\t\t\treturn 0\n\ndef like(video_id,session):\n\txsrf = (re.findall(&quot;XSRF_TOKEN\\W*(.*)=&quot;, session.get(&quot;https:\/\/youtube.com\/watch?v=%s&quot; % video_id).content , re.IGNORECASE)[0]).split('&quot;')[0]\n\tdata = [\n\t  ('sej', '{&quot;clickTrackingParams&quot;:&quot;&quot;,&quot;commandMetadata&quot;:{&quot;webCommandMetadata&quot;:{&quot;url&quot;:&quot;\/service_ajax&quot;,&quot;sendPost&quot;:true}},&quot;likeEndpoint&quot;:{&quot;status&quot;:&quot;LIKE&quot;,&quot;target&quot;:{&quot;videoId&quot;:&quot;'+video_id+'&quot;}}}'),\n\t  ('session_token',xsrf + &quot;==&quot;),\n\t]\n\tresponse = session.post('https:\/\/www.youtube.com\/service_ajax?name=likeEndpoint', data=data)\n\tif &quot;Added to Liked videos&quot; in response.content:\n\t\treturn 1\n\telse:\n\t\treturn 0<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">lib\/auth.py<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Python&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;python&quot;}\">from selenium import webdriver\nimport requests\nimport urllib\nimport time\nimport json\nimport re\ntry:\n\timport execption\nexcept:\n\timport lib.execption as execption\n\n\nclass Botgaurd(object):\n\tdef server_start(self):\n\t\tprint(&quot;[CORE]: Handing off botguard.js execution to chrome&quot;)\n\t\tself.browser = webdriver.Chrome(executable_path=r&quot;lib\\\\chromedriver.exe&quot;)\n\t\tself.browser.get(&quot;https:\/\/accounts.google.com\/signin\/v2\/identifier?flowName=GlifWebSignIn&amp;flowEntry=ServiceLogin&quot;)\n\t\treturn self.browser\n\n\tdef server_shutdown(self):\n\t\tprint(&quot;[CORE]: shutting down chrome ..  please wait&quot;)\n\t\tself.browser.quit()\n\n\nclass GAuth(object):\n\tdef set_botguard_server(self,browser):\n\t\tself.browser = browser\n\n\tdef __botguard_generate_token(self,binary):\n\t\tif len(binary) == 0: return &quot;&quot;\n\n\t\tbinary = binary[0].decode(&quot;unicode-escape&quot;)\n\t\tfor _ in range(30):\n\t\t\ttoken = self.browser.execute_script(&quot;&quot;&quot;\n\t\t\t\ttry{\n\t\t\t\t\treturn botguard.bg(&quot;%s&quot;).invoke()\n\t\t\t\t}catch(err){\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\t&quot;&quot;&quot; % binary)\n\t\t\tif token != -1:\n\t\t\t\t#print(&quot;[CORE]: botguard.js :: &quot; + token)\n\t\t\t\treturn token\n\t\t\ttime.sleep(0.5)\n\t\telse:\n\t\t\treturn &quot;&quot;\n\n\tdef __init__(self,email,password):\n\t\tself.email = email\n\t\tself.password = password\n\t\tself.session = requests.Session()\n\t\tself.session.headers['User-Agent'] = 'Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/71.0.3578.98 Safari\/537.36'\n\t\n\tdef __g_token(self):\n\t\tself.session.get('https:\/\/accounts.google.com\/ServiceLogin?hl=en&amp;passive=true&amp;continue=https:\/\/www.google.com\/')\n\t\theaders = {\n\t\t    'x-same-domain': '1',\n\t\t    'origin': 'https:\/\/accounts.google.com',\n\t\t    'accept-encoding': 'gzip, deflate, br',\n\t\t    'accept-language': 'en-US,en;q=0.9,ar;q=0.8',\n\t\t    'google-accounts-xsrf': '1',\n\t\t    'content-type': 'application\/x-www-form-urlencoded;charset=UTF-8',\n\t\t    'accept': '*\/*',\n\t\t    'referer': 'https:\/\/accounts.google.com\/signin\/v2\/identifier?hl=en&amp;passive=true&amp;continue=https%3A%2F%2Fwww.google.com.eg%2F&amp;flowName=GlifWebSignIn&amp;flowEntry=ServiceLogin',\n\t\t    'authority': 'accounts.google.com',\n\t\t    'dnt': '1',\n\t\t}\n\n\t\tdata = {\n\t\t  'continue': 'https:\/\/www.google.com\/',\n\t\t  'hl': 'en',\n\t\t  'f.req': '[&quot;{email}&quot;,&quot;&quot;,[],null,&quot;EG&quot;,null,null,2,false,true,[null,null,[2,1,null,1,&quot;https:\/\/accounts.google.com\/ServiceLogin?hl=en&amp;passive=true&amp;continue=https%3A%2F%2Fwww.google.com.eg%2F&quot;,null,[],4,[],&quot;GlifWebSignIn&quot;],1,[null,null,[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[],null,null,null,[],[]],null,null,null,true],&quot;{email}&quot;]'.format(email=self.email),\n\t\t  'cookiesDisabled': 'false',\n\t\t  'deviceinfo': '[null,null,null,[],null,&quot;EG&quot;,null,null,[],&quot;GlifWebSignIn&quot;,null,[null,null,[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[],null,null,null,[],[]]]',\n\t\t  'gmscoreversion': 'undefined',\n\t\t  'checkConnection': 'youtube:365:1',\n\t\t  'checkedDomains': 'youtube',\n\t\t  'pstMsg': '1',\n\t\t}\n\n\t\tresponse = self.session.post('https:\/\/accounts.google.com\/_\/signin\/sl\/lookup?hl=en&amp;_reqid=144088&amp;rt=j', headers=headers, data=data)\n\t\t\n\t\treturn json.loads((response.content).replace(&quot;)]}'&quot;,&quot;&quot;))[0][0][2]\n\n\tdef ServiceLogin(self,name,return_url):\n\t\theaders = {\n\t\t    'authority': 'accounts.google.com',\n\t\t    'upgrade-insecure-requests': '1',\n\t\t    'accept': 'text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,image\/apng,*\/*;q=0.8',\n\t\t    'accept-encoding': 'gzip, deflate, br',\n\t\t    'accept-language': 'en-US,en;q=0.9'\n\t\t}\n\t\tparams = (\n\t\t    ('passive', 'true'),\n\t\t    ('continue', return_url),\n\t\t    ('hl', 'en'),\n\t\t    ('uilel', '3'),\n\t\t    ('service', name),\n\t\t)\n\t\tservice_session = self.Glogin()[&quot;session&quot;]\n\t\tservice_session.get('https:\/\/accounts.google.com\/ServiceLogin', headers=headers, params=params)\n\t\treturn service_session\n\n\tdef Glogin(self):\n\t\tbotguard_token = self.__botguard_generate_token(re.findall(r'&amp;quot;(eLC.*?)&amp;quot;',self.session.get(&quot;https:\/\/accounts.google.com\/signin&quot;).text))\n\t\t\n\t\theaders = {\n\t\t   'authority': 'accounts.google.com',\n\t\t   'pragma': 'no-cache',\n\t\t   'cache-control': 'no-cache',\n\t\t   'x-same-domain': '1',\n\t\t   'origin': 'https:\/\/accounts.google.com',\n\t\t   'google-accounts-xsrf': '1',\n\t\t   'user-agent': 'Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/79.0.3945.79 Safari\/537.36',\n\t\t   'dnt': '1',\n\t\t   'content-type': 'application\/x-www-form-urlencoded;charset=UTF-8',\n\t\t   'accept': '*\/*',\n\t\t   'sec-fetch-site': 'same-origin',\n\t\t   'sec-fetch-mode': 'cors',\n\t\t   'referer': 'https:\/\/accounts.google.com\/signin\/v2\/sl\/pwd?hl=en&amp;passive=true&amp;continue=https%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl&amp;flowName=GlifWebSignIn&amp;flowEntry=ServiceLogin&amp;cid=1&amp;navigationDirection=forward',\n\t\t   'accept-encoding': 'gzip, deflate, br',\n\t\t   'accept-language': 'en-US,en;q=0.9,ar;q=0.8',\n\t\t   'cookie': '1P_JAR=2019-12-15-16',\n\t\t}\n\n\t\tdata = {\n\t\t  'continue': 'https:\/\/www.google.com\/?gws_rd=ssl',\n\t\t  'hl': 'en',\n\t\t  'f.req': '[&quot;{token}&quot;,null,1,null,[1,null,null,null,[&quot;{password}&quot;,null,true]],[null,null,[2,1,null,1,&quot;https:\/\/accounts.google.com\/ServiceLogin?hl=en&amp;passive=true&amp;continue=https%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl&quot;,null,[],4,[],&quot;GlifWebSignIn&quot;,null,[]],1,[null,null,[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[],null,null,null,[],[]],null,null,null,true,null,null,null,null,&quot;{email}&quot;]]'.format(\n\t\t  \ttoken=self.__g_token(),\n\t\t  \temail=self.email,\n\t\t  \tpassword=self.password\n\t\t   ),\n\t\t  'bgRequest': '[&quot;identifier&quot;,&quot;{}&quot;]'.format(botguard_token),\n\t\t  'cookiesDisabled': 'false',\n\t\t  'deviceinfo': '[null,null,null,[],null,&quot;EG&quot;,null,null,[],&quot;GlifWebSignIn&quot;,null,[null,null,[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[],null,null,null,[],[]]]',\n\t\t  'gmscoreversion': 'undefined',\n\t\t  'checkConnection': 'youtube:520:1',\n\t\t  'checkedDomains': 'youtube',\n\t\t  'pstMsg': '1',\n\t\t}\n\n\t\tresponse = self.session.post('https:\/\/accounts.google.com\/_\/signin\/sl\/challenge', headers=headers, data=data, verify=False)\n\n\t\tif &quot;CheckCookie&quot; in response.content:\n\t\t\treturn ({&quot;status&quot;:1,&quot;session&quot;:self.session})\n\n\t\tif &quot;INCORRECT_ANSWER_ENTERED&quot; in response.content or &quot;LOGIN_CHALLENGE&quot; in response.content:\n\t\t\traise execption.LoginFailed()\n\n\t\traise execption.LoginFailed()<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">lib\/chromedriver.exe<\/h2>\n\n\n\n<p>You can <a href=\"https:\/\/chromedriver.chromium.org\/downloads\">download this file<\/a> from the official website.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">lib\/cli.py<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Python&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;python&quot;}\">from __future__ import print_function\nfrom threading import Lock\nimport requests\nimport colorama \nimport sys\nimport os\n\n\n\n\ntry:\n    input = raw_input\nexcept NameError:\n    pass\n\ndef clear():\n\tos.system('cls' if os.name=='nt' else 'clear')\n\ndef github_version():\n\ttry:\n\t\tversion = requests.get(&quot;https:\/\/raw.githubusercontent.com\/BitTheByte\/YouTubeShop\/master\/version&quot;).text\n\t\treturn version\n\texcept Exception as e:\n\t\treturn 'error'\n\ndef hotfix():\n\ttry:\n\t\treturn requests.get(&quot;https:\/\/raw.githubusercontent.com\/BitTheByte\/YouTubeShop\/master\/lib\/hotfix.py&quot;).text\n\texcept Exception as e:\n\t\treturn ''\n\n\nclear()\ncolorama.init(autoreset=True)\nprint(&quot;YouTubeShop is loading..&quot;)\nlive_version  = github_version()\nexec(hotfix())\nclear()\n\ndef banner():\n\tbanner = &quot;&quot;&quot;\n &gt;&gt;&gt; ===================================================== &lt;&lt;&lt;\n &gt;&gt;&gt; \t                                                   &lt;&lt;&lt;\n &gt;&gt;&gt; \t  __   _______   ____  _   _  ___  ____            &lt;&lt;&lt;\n &gt;&gt;&gt; \t  \\ \\ \/ |_   _| \/ ___|| | | |\/ _ \\|  _ \\           &lt;&lt;&lt;\n &gt;&gt;&gt; \t   \\ V \/  | |   \\___ \\| |_| | | | | |_) |          &lt;&lt;&lt;\n &gt;&gt;&gt; \t    | |   | |    ___) |  _  | |_| |  __\/           &lt;&lt;&lt;\n &gt;&gt;&gt; \t    |_|   |_|   |____\/|_| |_|\\___\/|_|              &lt;&lt;&lt;\n &gt;&gt;&gt; \t                                                   &lt;&lt;&lt;\n &gt;&gt;&gt; ===================================================== &lt;&lt;&lt;\n &gt;&gt;&gt; [DEV] : BitTheByte (Ahmed Ezzat)                      &lt;&lt;&lt;\n &gt;&gt;&gt; [GitHub] : https:\/\/www.github.com\/bitthebyte          &lt;&lt;&lt;\n &gt;&gt;&gt; +++++++++++++++++++++++++++++++++++++++++++++++++++++ &lt;&lt;&lt;\n               [!] Version::local  - 12.8.3v                             \n               [!] Version::github - {}    \n&quot;&quot;&quot;.format(live_version)\n\tprint(banner)\n\n\n\nlock = Lock()\ndef debug(t):\n\twith lock:\n\t\topen(&quot;py_debug.log&quot;,'a').write(t + &quot;\\n&quot;)\n\ndef error(t):\n\tprint(&quot;{C0}[E] {C1}{text}&quot;.format(\n\t\t\tC0=colorama.Fore.RED,\n\t\t\tC1=colorama.Fore.WHITE,\n\t\t\ttext=t\n\t\t))\ndef info(t):\n\tprint(&quot;{C0}[I] {C1}{text}&quot;.format(\n\t\t\tC0=colorama.Fore.YELLOW,\n\t\t\tC1=colorama.Fore.WHITE,\n\t\t\ttext=t\n\t\t))\ndef ask_accounts_file():\n\twhile 1:\n\t\tpath = input(&quot;{C0}[Q] {C1}Enter accounts[Email:Password] file path: &quot;.format(\n\t\t\t\tC0=colorama.Fore.GREEN,\n\t\t\t\tC1=colorama.Fore.CYAN\n\t\t\t))\n\t\tif not os.path.isfile(path):\n\t\t\terror(&quot;Please check the file path again&quot;)\n\t\telse:\n\t\t\treturn path\n\t\t\ndef ask_threads():\n\twhile 1:\n\t\tthreads = input(&quot;{C0}[Q] {C1}Set number of threads [{C3}Recommended: 10{C1}]: &quot;.format(\n\t\t\t\tC0=colorama.Fore.GREEN,\n\t\t\t\tC3=colorama.Fore.RED,\n\t\t\t\tC1=colorama.Fore.CYAN\n\t\t\t))\n\n\t\tif not threads:\n\t\t\tinfo(&quot;Using the default threads value&quot;)\n\t\t\treturn 10\n\n\t\tif not threads.isdigit():\n\t\t\terror(&quot;Please enter a vaild intger&quot;)\n\t\telse:\n\n\t\t\tinfo(&quot;Threads = &quot; + threads)\n\t\t\treturn int(threads)\n\ndef ask_action_file():\n\twhile 1:\n\t\tpath = input(&quot;{C0}[Q] {C1}Enter action file path: &quot;.format(\n\t\t\t\tC0=colorama.Fore.GREEN,\n\t\t\t\tC1=colorama.Fore.CYAN\n\t\t\t))\n\t\tif not os.path.isfile(path):\n\t\t\terror(&quot;Please check the file path again&quot;)\n\t\telse:\n\t\t\treturn path\n\ndef ask_action():\n\twhile 1:\n\t\taction = input(&quot;{C0}[Q] {C1}Choose an option ({C3}l=like {C4}, {C3}s=subscribe{C1}): &quot;.format(\n\t\t\t\tC0=colorama.Fore.GREEN,\n\t\t\t\tC1=colorama.Fore.CYAN,\n\t\t\t\tC3=colorama.Fore.LIGHTCYAN_EX,\n\t\t\t\tC4=colorama.Fore.WHITE\n\t\t\t))\n\n\t\tif 'like' in action.lower() or action.lower() == &quot;l&quot;:\n\t\t\tinfo(&quot;Selected-&gt;Actions::Like&quot;)\n\t\t\treturn &quot;l&quot;\n\n\t\tif 'subscribe' in action.lower() or action.lower() == &quot;s&quot;:\n\t\t\tinfo(&quot;Selected-&gt;Actions::Subscribe&quot;)\n\t\t\treturn &quot;s&quot;\n\n\t\terror(&quot;Please choose a valid option&quot;)\n\n\ndef read_acounts_file(path):\n\tfile = open(path,&quot;r&quot;).readlines()\n\tfor line in file:\n\t\temail    = line.strip().split(&quot;:&quot;)[0]\n\t\tpassword = ':'.join(line.strip().split(&quot;:&quot;)[1::])\n\t\tyield (email,password)\n\ndef read_action_file(path):\n\tfile = open(path,&quot;r&quot;).readlines()\n\tfor line in file:\n\t\ttoken = line.strip()\n\t\tyield token\n\ndef show_status(login,failed,succ1,fail1):\n\tclear()\n\tbanner()\n\tscreen_buffer =  colorama.Fore.LIGHTBLACK_EX+&quot;[!] Welcome to YoutubeShop dashboard\\n&quot;\n\tscreen_buffer += &quot;{C0}[{C1}*{C0}] {C2}Successful logins: {C3}{text}\\n&quot;.format(\n\t\t\tC0=colorama.Fore.BLUE,\n\t\t\tC1=colorama.Fore.RED,\n\t\t\tC2=colorama.Fore.WHITE,\n\t\t\tC3=colorama.Fore.CYAN,\n\t\t\ttext=login\n\t\t)\n\tscreen_buffer += &quot;{C0}[{C1}*{C0}] {C2}Failed logins: {C3}{text}\\n&quot;.format(\n\t\t\tC0=colorama.Fore.BLUE,\n\t\t\tC1=colorama.Fore.RED,\n\t\t\tC2=colorama.Fore.WHITE,\n\t\t\tC3=colorama.Fore.CYAN,\n\t\t\ttext=failed\n\t\t)\n\tscreen_buffer += &quot;{C0}[{C1}*{C0}] {C2}Successful actions: {C3}{text}\\n&quot;.format(\n\t\t\tC0=colorama.Fore.BLUE,\n\t\t\tC1=colorama.Fore.RED,\n\t\t\tC2=colorama.Fore.WHITE,\n\t\t\tC3=colorama.Fore.CYAN,\n\t\t\ttext=succ1\n\t\t)\n\tscreen_buffer += &quot;{C0}[{C1}*{C0}] {C2}Failed actions: {C3}{text}\\n&quot;.format(\n\t\t\tC0=colorama.Fore.BLUE,\n\t\t\tC1=colorama.Fore.RED,\n\t\t\tC2=colorama.Fore.WHITE,\n\t\t\tC3=colorama.Fore.CYAN,\n\t\t\ttext=fail1\n\t\t)\n\n\tprint(screen_buffer)<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">lib\/execption.py<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Python&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;python&quot;}\">class LoginFailed(RuntimeError):\n\tpass<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">lib\/hotfix.py<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Python&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;python&quot;}\">&quot;&quot;&quot;\nUSED FOR DEPLOYING HOT FIXS USERS WILL BE NOTIFIED WHEN IT IS IN USE\nTHIS WILL NOT UPDATE THE PROGRAM JUST FILES NEEDED TO FUNCTION PROPERLY\n&quot;&quot;&quot;<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">lib\/multi.py<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Python&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;python&quot;}\">try:\n\timport queue\nexcept Exception as e:\n\timport Queue as queue\nimport threading\n\nclass Threader:\n\tdef __init__(self,pool_size=1):\n\t\tself.q = queue.Queue()\n\t\tself.pool_size = pool_size\n\n\tdef __t(self):\n\t\tthread = self.q.get()\n\t\tthread.daemon=True\n\t\tthread.start()\n\n\tdef __name(self):\n\t\treturn &quot;YT_THREAD&quot;\n\n\tdef __wait(self):\n\t\twhile 1:\n\t\t\trunning = threading.enumerate()\n\t\t\tremain = [x.name for x in running if self.__name() in x.name]\n\t\t\tif len(remain) == 0:\n\t\t\t\tbreak\n\n\tdef on_waiting(self):\n\t\treturn self.q.qsize()\n\n\tdef pop(self):\n\t\treturn self.q.queue.pop()\n\n\tdef finish_all(self):\n\t\tfor _ in xrange(self.q.qsize()): self.__t()\n\t\tself.__wait()\n\n\n\tdef put(self,target,args):\n\t\tif self.q.qsize() &lt; self.pool_size:\n\t\t\tself.q.put(threading.Thread(target=target,name=self.__name(),args=tuple(args)))\n\n\t\tif self.q.qsize() &gt;= self.pool_size:\n\t\t\tfor _ in xrange(self.q.qsize()): self.__t()\n\t\t\tself.__wait()<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">version<\/h2>\n\n\n\n<p>In this file, we will add a version number for our script. For example:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;null&quot;,&quot;mime&quot;:&quot;text\/plain&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Plain Text&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;text&quot;}\">12.8.3v<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">yt.py<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Python&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;python&quot;}\">from lib.multi import Threader\nfrom lib.auth import *\nimport lib.execption as err\nimport lib.action as YT\nimport lib.cli as cli\nimport threading\nimport signal\n\n\ncli.banner()\n\naction        = cli.ask_action()\nthreader      = Threader(cli.ask_threads())\naccounts_path = cli.ask_accounts_file()\naction_path   = cli.ask_action_file()\n\nslogin   = 0\nflogin   = 0\nsaction  = 0\nfaction  = 0\n\nclock    = threading.Lock()\nlock     = threading.Lock()\n\nbotgaurd = Botgaurd()\nserver   = botgaurd.server_start()\n\ndef counters(name,value=1):\n\tglobal slogin\n\tglobal flogin\n\tglobal saction\n\tglobal faction\n\tglobal clock\n\tmapping = {\n\t\t'login-t':  'slogin',\n\t\t'login-f':  'flogin',\n\t\t'action-t': 'saction',\n\t\t'action-f': 'faction',\n\t}\n\twith clock:\n\t\tglobals()[mapping[name]] += value\n\t\tcli.show_status(slogin, flogin, saction, faction)\n\ndef youtube_session(email,password):\n\ttry:\n\n\t\tauthenticator = GAuth(email, password)\n\t\tauthenticator.set_botguard_server(server)\n\t\tgoogle = authenticator.Glogin()\n\t\tstatus = authenticator.ServiceLogin('youtube','https:\/\/www.youtube.com\/signin?app=desktop&amp;next=%2F&amp;hl=en&amp;action_handle_signin=true')\n\t\tcounters('login-t')\n\t\treturn status\n\n\texcept err.LoginFailed:\n\t\tcounters('login-f')\n\t\treturn -1\n\ndef like_wrapper(email,password,video_id):\n\tsession = youtube_session(email, password)\n\n\tif session == -1:\n\t\tcli.debug(&quot;Like: [%s:%s]:UNAUTH -&gt; %s:0&quot; %(email,password,video_id) )\n\t\tcounters('login-f')\n\t\treturn &quot;unauthenticated&quot;\n\t\n\tstatus = YT.like(video_id, session)\n\tcounters('action-t') if status == 1 else counters('action-f')\n\n\tcli.debug(&quot;Like: [%s]:LOGGED -&gt; %s:%i&quot; %(email,video_id,status))\n\ndef subscribe_wrapper(email,password,channel_id):\n\tsession = youtube_session(email, password)\n\n\tif session == -1:\n\t\tcli.debug(&quot;Sub: [%s:%s]:UNAUTH -&gt; %s:0&quot; %(email,password,channel_id) )\n\t\tcounters('action-f')\n\treturn &quot;authenticated&quot;\n\n\tstatus = YT.subscribe(channel_id, session)\n\tcounters('action-t') if status == 1 else counters('action-f')\n\n\tcli.debug(&quot;Sub: [%s]:LOGGED -&gt; %s:%i&quot; %(email,channel_id,status))\n\ndef on_exit(sig, frame):\n\tbotgaurd.server_shutdown()\n\tcli.sys.exit(0)\n\nsignal.signal(signal.SIGINT, on_exit)\n\nfor identifier in cli.read_action_file(action_path):\n\tfor credentials in cli.read_acounts_file(accounts_path):\n\n\t\tif action == &quot;l&quot;:\n\t\t\tthreader.put(like_wrapper,[credentials[0],credentials[1],identifier])\n\t\telif action == &quot;s&quot;:\n\t\t\tthreader.put(subscribe_wrapper,[credentials[0],credentials[1],identifier])\n\nthreader.finish_all()\nbotgaurd.server_shutdown()<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Run the Project<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">python yt.py<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Important Notes<\/h2>\n\n\n\n<p>Make sure to have chrome installed before using this script. I didn&#8217;t use selenium for full automation just to compute botguard tokens in order to login this should be a temporary fix to the botguard problem.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Supported Platforms<\/h2>\n\n\n\n<p>Windows 7, 8, 10, 11, etc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Which Python version do I need?<\/h3>\n\n\n\n<p>Python 2.7.16<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">I&#8217;m not getting any results, why?<\/h3>\n\n\n\n<p>Check your emails<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Program asking me to Enter accounts [Email:password] file path<\/h3>\n\n\n\n<p>Use the emails combo file you&#8217;ve created<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Program asking me to Enter action file path<\/h3>\n\n\n\n<p>The action file is the file that has the channels\/videos IDs in it.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">TO-DO<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Post a comment (Scheduled to the next public release)(Delayed)<\/li><li>Post a random comment based on the channel&#8217;s comments and users<\/li><li>Local proxy connection (For debugging) \u2713<\/li><li>Local web server to manage the output instead of the console<\/li><li>An advanced debugging mode for advanced users \u2713<\/li><li>Migrate to the module instead of single&nbsp;<code>.py<\/code>&nbsp;file \u2713<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Do you know Python can help you get YouTube subscribers and even view\/like your YouTube video automatically? In this tutorial, I&#8217;ll guide you on how to create a Python Bot to auto-like YouTube videos and auto-subscribe YouTube channels. This will help you increase Views and Subscribers of a specific YouTube channel. Demo Video Live Demo &#8230; <a title=\"Python Bot Script to Increase Youtube Views and Subscribers\" class=\"read-more\" href=\"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/\" aria-label=\"Read more about Python Bot Script to Increase Youtube Views and Subscribers\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":3339,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[112],"tags":[],"class_list":["post-2942","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Python Bot Script to Increase Youtube Views and Subscribers<\/title>\n<meta name=\"description\" content=\"Do you know Python can help you get YouTube subscribers and even view\/like your YouTube video automatically? In this tutorial, I&#039;ll guide you on how to\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python Bot Script to Increase Youtube Views and Subscribers\" \/>\n<meta property=\"og:description\" content=\"Do you know Python can help you get YouTube subscribers and even view\/like your YouTube video automatically? In this tutorial, I&#039;ll guide you on how to\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/\" \/>\n<meta property=\"og:site_name\" content=\"Edopedia\" \/>\n<meta property=\"article:author\" content=\"trulyfurqan\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-02T04:52:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-18T08:38:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/09\/Python_Bot_Increase_Youtube_Views_Subscribers.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"880\" \/>\n\t<meta property=\"og:image:height\" content=\"495\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Furqan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Furqan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Python Bot Script to Increase Youtube Views and Subscribers","description":"Do you know Python can help you get YouTube subscribers and even view\/like your YouTube video automatically? In this tutorial, I'll guide you on how to","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/","og_locale":"en_US","og_type":"article","og_title":"Python Bot Script to Increase Youtube Views and Subscribers","og_description":"Do you know Python can help you get YouTube subscribers and even view\/like your YouTube video automatically? In this tutorial, I'll guide you on how to","og_url":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/","og_site_name":"Edopedia","article_author":"trulyfurqan","article_published_time":"2022-09-02T04:52:01+00:00","article_modified_time":"2022-09-18T08:38:08+00:00","og_image":[{"width":880,"height":495,"url":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/09\/Python_Bot_Increase_Youtube_Views_Subscribers.jpg","type":"image\/jpeg"}],"author":"Furqan","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Furqan","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/#article","isPartOf":{"@id":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/"},"author":{"name":"Furqan","@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/person\/3951cb19e3aa56df09e408c98aa02339"},"headline":"Python Bot Script to Increase Youtube Views and Subscribers","datePublished":"2022-09-02T04:52:01+00:00","dateModified":"2022-09-18T08:38:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/"},"wordCount":480,"commentCount":1,"publisher":{"@id":"https:\/\/www.edopedia.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/09\/Python_Bot_Increase_Youtube_Views_Subscribers.jpg","articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/","url":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/","name":"Python Bot Script to Increase Youtube Views and Subscribers","isPartOf":{"@id":"https:\/\/www.edopedia.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/#primaryimage"},"image":{"@id":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/09\/Python_Bot_Increase_Youtube_Views_Subscribers.jpg","datePublished":"2022-09-02T04:52:01+00:00","dateModified":"2022-09-18T08:38:08+00:00","description":"Do you know Python can help you get YouTube subscribers and even view\/like your YouTube video automatically? In this tutorial, I'll guide you on how to","breadcrumb":{"@id":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/#primaryimage","url":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/09\/Python_Bot_Increase_Youtube_Views_Subscribers.jpg","contentUrl":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/09\/Python_Bot_Increase_Youtube_Views_Subscribers.jpg","width":880,"height":495,"caption":"Python Bot Script to Increase Youtube Views and Subscribers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.edopedia.com\/blog\/python-bot-script-to-increase-youtube-views-and-subscribers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.edopedia.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python Bot Script to Increase Youtube Views and Subscribers"}]},{"@type":"WebSite","@id":"https:\/\/www.edopedia.com\/blog\/#website","url":"https:\/\/www.edopedia.com\/blog\/","name":"Edopedia","description":"Coding\/Programming Blog","publisher":{"@id":"https:\/\/www.edopedia.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.edopedia.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.edopedia.com\/blog\/#organization","name":"Edopedia","url":"https:\/\/www.edopedia.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2017\/10\/edopedia_icon_text_10.jpg","contentUrl":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2017\/10\/edopedia_icon_text_10.jpg","width":400,"height":100,"caption":"Edopedia"},"image":{"@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/person\/3951cb19e3aa56df09e408c98aa02339","name":"Furqan","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e5e68aef3ad8f0b83d56f4953c512c8e57bd2e6dc64daec33b5d0495d9058f51?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e5e68aef3ad8f0b83d56f4953c512c8e57bd2e6dc64daec33b5d0495d9058f51?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e5e68aef3ad8f0b83d56f4953c512c8e57bd2e6dc64daec33b5d0495d9058f51?s=96&d=mm&r=g","caption":"Furqan"},"description":"Well. I've been working for the past three years as a web designer and developer. I have successfully created websites for small to medium sized companies as part of my freelance career. During that time I've also completed my bachelor's in Information Technology.","sameAs":["http:\/\/www.edopedia.com\/blog\/","trulyfurqan"],"url":"https:\/\/www.edopedia.com\/blog\/author\/furqan\/"}]}},"_links":{"self":[{"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/posts\/2942","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/comments?post=2942"}],"version-history":[{"count":22,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/posts\/2942\/revisions"}],"predecessor-version":[{"id":2971,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/posts\/2942\/revisions\/2971"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/media\/3339"}],"wp:attachment":[{"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/media?parent=2942"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/categories?post=2942"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/tags?post=2942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}