-
پنجشنبه, ۱۶ مرداد ۱۳۹۹، ۰۴:۰۴ ب.ظ
-
۱۵۷۸
ساخت ابزار بیرون کشیدن اطلاعات از تاریخچه مرورگر کاربر در پایتون
درود به همه !
همونطور که میدونید تمامی مرورگر ها دارای تاریخچه هایی (History) هستند که بیشتر فعالیت های کاربر در آن مرورگر را ثبت میکنند . به طور مثال اطلاعاتی مثل سایت هایی که کاربر باز کرده ، عبارت هایی که کاربر جستوجو کرده و .... در تاریخچه ذخیره میشوند . امروز میخوایم اسکریپت پایتونی بنویسیم که به محض اجرا شدن به تاریخچه مرورگر گوگل کروم ، دسترسی بگیره و اطلاعاتی مثل : عبارت های جستوجو شده توسط کاربر ، سایت های باز شده و فایل های دانلود شده توسط کاربر رو بهمون نشون بده .
قبل از اینکه شروع کنیم اسکریپت بنویسیم و اونو توضیح بدیم باید طرز کار اسکریپت رو بدونید . باید بگم این اسکریپت فقط تاریخچه مرورگر گوگل کروم روی سیستم رو میخونه و روی لینوکس و ویندوز هم کار میده .
مرورگر Google Chrome بسته به سیستم عامل (ویندوز یا لینوکس) ، فایل های History خودش رو داخل یه مسیری ذخیره میکنه . حالا این فایل تاریخچه در واقع یه فایل دیتابیس هستش که ما میتونیم اطلاعاتشو بخونیم و کامل به تاریخچه مرورگر دسترسی داشته باشیم .
در سیستم عامل ویندوز فایل دیتابیسی به مسیر زیر حاوی تاریخچه مرورگر کروم است :
C:\Users\<username>\AppData\Local\Google\Chrome\User Data\Default\History
در سیستم عامل لینوکس :
/home/<username>/.config/google-chrome/Default/History
حالا که مسیر فایل دیتابیس تاریخچه رو میدونیم میتونیم یه اسکریپتی بنویسیم که به این فایل دسترسی پیدا کنه و محتویاتشو بخونه . فایل تاریخچه که بالا مسیرشو گفتیم یک دیتابیس SQLite هستش پس برای خوندن اون از کتابخونه ی sqlite3 در پایتون استفاده میکنیم که به صورت پیشفرض روی پایتون نصبه .
سورس اسکریپت :
import sqlite3 import os
if os.system("uname > /dev/null") == 0 : # OS IS LINUX db_path = os.getenv("HOME") + "/.config/google-chrome/Default/History" else : # OS IS WINDOWS appdata = os.getenv("appdata").replace("\\Roaming","") db_path = appdata + "\\Local\\Google\\Chrome\\User Data\\Default\\History"
db = sqlite3.connect(db_path) c = db.cursor()
# SEARCH History searchs = [] c.execute("select term from keyword_search_terms") for item in c.fetchall(): searchs.append(item[0])
# URL HISTORY urls = [] c.execute("select url from urls") for item in c.fetchall(): urls.append(item[0])
# Download HISTORY : downloads = [] c.execute("select tab_url from downloads") for item in c.fetchall(): downloads.append(item[0])
## SHOW Information ## print("Urls : ") for url in urls: print("\t{}".format(url))
print("-"*50)
print("Downloaded Files :") for download in downloads: print("\t{}".format(download))
print("-"*50)
print("Searchs : ") for search in searchs: print("\t{}".format(search))
توضیح سورس :
در خطوط ابتدایی کتابخونه های مورد نیاز رو ایمپورت کردیم . سپس به وسیله ی تابع os.system یک دستور لینوکسی رو از طریق خط فرمان اجرا کردیم . بعد چک کردیم اگه جواب برگشتی برابر صفر بود یعنی دستور بدونه هیچ مشکلی اجرا شده پس سیستم عامل لینوکسه . در غیر این صورت سیستم عامل ویندوزه . سپس با توجه به سیستم عامل متغییرdb_path که دربر دارنده ی مسیر دیتابیس هستش رو تعریف کردیم .
در خط بعدی با استفاده از دستور sqlite3.connect یک شیء از دیتابیس ساختیم و ریختیم داخل متغییر db . پس از اون یک cursor برای اجرای دستورات sqlite درست کردیم .
در چند خط بعدی اومدیم یه لیست خالی به اسم searchs تعریف کردیم که قراره عبارت های جستوجو شده توسط کاربر توی اون ریخته بشه . با استفاده از دستور c.execute اومدیم دستور استخراج اطلاعات مربوط به جستوجو های کاربر رو روی دیتابیس اجرا کردیم . در خط بعد جواب دستور که برابر لیستی از عبارت های جستوجو شده کاربر هستش رو با یه حلقه ی for ریختیم داخل لیست searchs .
تا اینجا عبارت های جستوجو شده ی کاربر رو بدست آوردیم . در چند خط بعدی ، برای بدست آوردن بقیه اطلاعات هم دقیقا همین کد ها رو اجرا میکنیم با این تفاوت که دستور اجرا شده روی دیتابیس فرق داره .
با توجه به کامنت گذاری همینطور که میبینید غیر از عبارت های جستوجو شده ، لیست دانلود ها و لیست سایت های باز شده توسط کاربر رو هم به همین روش بدست آوردیم .
در نهایت پس از بدست آوردن اطلاعات میریم سراغ نمایش اطلاعات . قسمت زیر کامنت show information مربوط به نمایش اطلاعات بدست آمده است .
ما در اینجا سه تا لیست داریم . یکی searchs که دربردارنده ی جستوجو های کاربر است و دیگری urls که حاوی لینک های باز شده توسط کاربر است و نهایتا لیست downloads که حاوی لینک دانلود فایل های دانلود شده توسط کاربر است .
با استفاده از سه حلقه ی for ، محتویات این سه لیست رو به وسیله ی دستور print چاپ کردیم .
(اینجا دیگه ریش و قیچی دست خود شماس . میتونید این اطلاعات رو آپلود کنین روی یه هاست شخصی یا ارسال کنید به ربات تلگرام یا حتی بنویسینش داخل یه فایلی )
نکته ای که قبل از اجرا باید بدونید اینه که وقتی میخواین سورس رو اجرا کنید ، مرورگر کروم نباید باز باشه . اجرای نرم افزار کروم باعث میشه که مرورگر وصل بشه به فایل دیتابیس تاریخچه و این باعث میشه که این فایل مشغول بشه و ما تا وقتی که مرورگر وصله به این فایل نتونیم بهش دسترسی داشته باشیم در نتیجه در زمان اجرای این اسکریپت مرورگر کروم نباید در حال اجرا باشه .
پس از رعایت نکته ی بالا سورس رو با پایتون ۳ اجرا میکنیم . همینطور که در تصویر زیر میبینید ، لیست سایت های باز شده ، لیست دانلود ها و لیست عبارت های جستوجو شده به نمایش در میاد .
Telegram Channel : @mrpythonblog