ساخت یک اکانت اینستاگرام با کتابخانه selenium و سایت emaildrop

ما قصد داریم یه اکانت اینستا با استفاده از کتابخانه سلنیوم، سیستم ایمیل موقت emaildrop، زبان پایتتون و کمی جاوا اسکریپ بسازیم هدف از این پست آشنایی با کتابخانه selenium و بعضی از دستوراتش هست.

ابتدا با دستور زیر کتابخانه سلنیوم رو نصب می کنیم:

pip install selenium

قبل از شروع باید وب درایور متناسب با مرورگرمون (کروم یا موزیلا) رو دانلود کنیم و اون رو داخل پوشه ای که فایل پایتون قرار داره قرار بدیم، اینجا از مرورگر کروم استفاده می کنیم و از این لینک می تونید مناسب با نسخه کرومتون وب درایور رو دانلود کنید. ضمنا می تونید فایل وب درایور رو پیش فایل پایتون قرار ندید و بهش ادرس دهی کنید که می تونید سرچ کنید راجبش.

حالا یک فایل پایتون می سازیم و با ایمپورت کردن شروع می کنیم. خط اول برای ایمپورت وب درایور از سلنیوم هست و بعدش sleep رو از ماژول time ایمپورت می کنیم و در خط سوم صفحه کیبورد را از سلنیوم ایمپورت می کنیم، چون در ادامه در یک مرحله از کلید اینتر یا همون Return استفاده می کنیم:

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys

حالا با دستور زیر یه نسخه وب درایو می سازیم و اسمش رو driver میزاریم:

driver = webdriver.Chrome()

با دستور زیر (get) می تونیم وارد آدرس دلخواهمون بشیم که ما می خوایم وارد آدرس سایت ایمیل دراپ بشیم و در خط دوم از دستور sleep استفاده می کنیم تا 4 ثانیه مهلت بدیم صفحه لود بشه از اینجا به بعد به دستور sleep اشاره نمی کنم و تا آخر برای مهلت دادن ازش استفاده می کنم :

driver.get(&quothttps://www.emaildrop.io/&quot)
sleep(4)

سایت ایمیل دراپ لود میشه همونطور که تو عکس می بینید سایت خودش یه ادرس ایمیل رندوم داده ولی اگه ما از این ایمیل استفاده کنیم چون آدرس عجیب و غریبیه اینستاگرام میفهمه ایمل فیکه و ایمیل وریفای کردن اینستاگرام بهمون نمیرسه و ما می خوایم روی دکمه CUSTOM کلیک کنیم تا یدونه سفارشی برای خودمون بسازیم:

برای کلیک کردن روی CUSTOM باید مسیر full Xpath اون رو کپی کنیم برای این کار ابتدا روی کلید F12 کلیک می کنیم و با موس روی قسمت شماره یک عکس که برای اینسپکت کردن یک المان خاص در صفحه است کلیک میکنیم و سپس با موس روی CUSTOM (شماره 2 در عکس) کلیک می کنیم که با این کار در قسمت سمت راست صفحه المان مورد نظر آبی رنگ میشه سپس روی المان آبی شده با موس راست کلیک میکنیم وارد تب Copy شده و روی Copy full Xpath (شماره 3 عکس) کلیک می کنیم.

حالا باید آدرس کپی شده را داخل پرانتز دستور ("")driver.find_element_by_xpath وارد کنیم. با این دستور می توان المان را بر اساس Xpath پیدا کرد و سپس با ()click روی آن کلیک کرد. بعد از Paste کردن این آدرس به صورت زیر می شود:

driver.find_element_by_xpath(&quot/html/body/div/div/main/div/div[1]/div/div/div[2]/button[3]&quot).click()
sleep(3)

مطابق عکس زیر حالا یک قسمت input برای ما باز شده است.


مثل بالا باید full Xpath آن input را کپی کنیم و در یک داخل پرانتز دستور driver.find_element_by_xpath قرار دهیم. یک متغیر به نام myname می سازیم و یک اسم دلخواه ساده مثل پدرام را برای آن در نظر می گیریم و در ادامه از دستور ()send_keys. برای پر کردن input استفاده می کنیم که داخلش myname را قرار می دهیم:

myname = &quotpedraam&quot
driver.find_element_by_xpath(&quot/html/body/div/div/main/div/div[1]/div/div/div[1]/div/code/input&quot).send_keys(myname)
sleep(2)

حالا باید روی دکمه اینتر کلیک کنیم تا ایمیل ساخته بشه در دستور زیر از همون full Xpath برای input استفاده می کنیم و در قسمت send_keys برای دکمه اینتر دستور keys.RETURN را وارد می کنیم که به صورت زیر می شود:

driver.find_element_by_xpath(&quot/html/body/div/div/main/div/div[1]/div/div/div[1]/div/code/input&quot).send_keys(Keys.RETURN)
sleep(3)

با دستور ()driver.execute_script می توان از زبان جاوا اسکریپت استفاده کرد دستور زیر را داخل پرانتز این دستور قرار می دهیم تا در یک تب جدید صفحه sign up اینستاگرام را برای ما باز کند. سپس در خط بعد از درایور می خواهیم که به تب دوم برود و ادامه دستورات را در آنجا ادامه دهد دقت کنید که driver.wondow_handle[0] یعنی تب اول و driver.wondow_handle[1] یعنی تب دوم:

driver.execute_script(&quotwindow.open('https://www.instagram.com/accounts/emailsignup/','_blank');&quot)
sleep(1)
driver.switch_to.window(driver.window_handles[1])
sleep(8)

اکنون وارد صفحه sign up اینستاگرام شده ایم:

در این قسمت احتیاج به ایمیل، نام، یوزرنیم و پسورد داریم. متغیرهای زیر را برای آنها می سازیم، برای emailaddress از متغیر myname که پیشتر ساخته بودیم استفاده کردیم و سپس متغیرها را در فیلدهای مرتبط وارد می کنیم:

emailaddress = myname + &quot@emaildrop.io&quot
username = &quotpedraamhasani_2876&quot
fname = &quotpedraam hasani&quot
passw = &quotPedraam2876&quot
driver.find_element_by_name(&quotemailOrPhone&quot).send_keys(emailaddress)
sleep(1)
driver.find_element_by_name(&quotfullName&quot).send_keys(fname)
sleep(1)
driver.find_element_by_name(&quotusername&quot).send_keys(username)
sleep(1)
driver.find_element_by_name(&quotpassword&quot).send_keys(passw)
sleep(2)

سپس با دستور جاوا اسکریپت زیر روی دکمه ساین آپ کلیک می کنیم. اینطور که من خوندم دلیل اینکه از fullXpath در سایت اینستاگرام استفاده نمی کنیم اینه که اینستاگرام چند وقت یبار fullXpath هارو تغییر میده ولی اینطوری بدون مشکل میتونیم استفاده کنیم:

driver.execute_script(&quot&quot&quot
var submitbutton = document.getElementsByTagName(&quotbutton&quot);
for (i = 0; i < submitbutton.length; i++) {
if (submitbutton[i].textContent == &quotSign up&quot) {
submitbutton[i].click();
break;
}
}&quot&quot&quot)
sleep(4)

صفحه بعد مشخصات تولد هستش که از سه تا فیلدی که باید پر کنیم دو تاش را کاری نداریم و فقط باید سال تولد رو تغییر بدیم:

در خط اول سال تولد رو تغییر دادیم و بعدش با کد جاوا اسکریپت زیر رو دکمه next کلیک می کنیم و بعدش وارد صفحه وریفای کردن میشه و کد وریفای رو بهمون ایمیل کرده:

driver.find_elements_by_tag_name(&quotselect&quot)[2].send_keys(&quot1982&quot)
sleep(2)
driver.execute_script(&quot&quot&quot
var nextbutton = document.getElementsByTagName(&quotbutton&quot);
for (i = 0; i < nextbutton.length; i++) {
if (nextbutton[i].textContent == &quotNext&quot) {
nextbutton[i].click();
break;
}
}&quot&quot&quot)
sleep(6)

حالا با دستور زیر برمیگردیم همون تب اول یا همون emaildrop و مدتی (30 ثانیه) رو منتظر می مونیم تا ایمیل وریفای کردن بیاد بعدش با دستور driver.refresh صفحه رو رفرش می کنیم:

driver.switch_to.window(driver.window_handles[0])
sleep(30)
driver.refresh()
sleep(10)

حالا ایمیل اومده و ما می خوایم اون عدد شیش رقمی رو داخل یه متغییر بریزیم و بریم به تب اینستاگرام و اونجا واردش کنیم:

یه متغیر به اسم emailcode می سازیم و متن قسمت مشخص شده در شکل بالا از روی fullXpath رو مطابق کد زیر داخلش می ریزیم و با یک لوپ شش کارکتر اول اون متن که همون شش رقم کد ما هستش رو داخل متغیر mycode می ریزیم:

emailcode=driver.find_element_by_xpath(&quot/html/body/div/div/main/div/div[2]/div/span/div/div/a/div[2]&quot).text
sleep(2)
mycode = &quot&quot
for i in range(6):
    mycode += emailcode[i]
sleep(1)

حالا بر میگردیم به تب دوم (اینستاگرام)، متغیر mycode رو در input وارد می کنیم و با کد جاوا اسکریپت رو دکمه next کلیک می کنیم:

driver.switch_to.window(driver.window_handles[1])
sleep(2)
driver.find_elements_by_tag_name(&quotinput&quot)[0].send_keys(mycode)
sleep(2)
driver.execute_script(&quot&quot&quot
var nextbutton = document.getElementsByTagName(&quotbutton&quot);
for (i = 0; i < nextbutton.length; i++) {
if (nextbutton[i].textContent == &quotNext&quot) {
nextbutton[i].click();
break;
}
}&quot&quot&quot)
sleep(8)

و تمام وارد صفحه اول اینستاگرام می شویم در انتها می توانید با دوبار استفاده از دستور driver.close تب ها را ببندید:

driver.close()
sleep(1)
driver.close()

فقط این کار رو با هر آی پی حدودا چهار بار می تونید انجام بدید بعدش اینستاگرام مشکوک میشه و برای یه مدتی آی پی شما رو بلاک میکنه و از صفحه sign up جلوتر نمی تونید برید.