...只需python两行代码,就能获取你的浏览器历。。。
pythonhistory.history_只需python两⾏代码,就能获取你的浏
览器历。。。
1. 两⾏代码搞定历史浏览器记录最好看的电影排行榜
偶然间遇到⼀个第三⽅库,竟然可以只⽤两⾏代码就能获得浏览器的历史浏览记录,再⼀次感叹python社区的强⼤。
使⽤pip安装
pip install browserhistory
代码⽰例
import browserhistory as bh
bh.write_browserhistory_csv()
整个源码只有区区不到200⾏,但却可以轻松的获取⾕歌,⽕狐,safari 这三种浏览器的历史浏览记录,⽽且⽀持,mac, linux, windows 三种平台。
运⾏程序,会在当前⼯作⽬录下⽣成浏览器对应的历史记录⽂件,格式为csv,内容包括url,标题,时间。笔记本怎么看配置
2. 源码解读
保持⼀颗好奇⼼,是做技术必备的素养。作者是如何做到在不同的平台上获取这三种浏览器的历史浏览记录的呢?打开源码,我们⼀探究竟。
# platform_table maps the name of user's OS to a platform code
platform_table = {
'linux': 0,
'linux2': 0,
'darwin': 1,
'cygwin': 2,
'win32': 2,
}
dnf 狂战加点
# it supports Linux, MacOS, and Windows platforms.
try:
user_platformcode = platform_table[sys.platform]
except KeyError:
class NotAvailableOS(Exception):
pass
raise NotAvailableOS("It does not support your OS.")
作者⾸先通过sys.platform 获得了平台的名称,据此得知当前程序运⾏在哪种操作系统上。
def get_database_paths() -> dict:
"""Get paths to the database of browsers and store them in a dictionary.It returns a dictionary: its key is the name of browser in str and its value is the path to database in str."""
platform_code = user_platformcode
browser_path_dict = dict()
# if it is a macOS
if platform_code == 1:
cwd_path = os.getcwd()
cwd_path_list = cwd_path.split('/')
# it creates string paths to broswer databases
abs_safari_path = os.path.join('/', cwd_path_list[1], cwd_path_list[2], 'Library', 'Safari', 'History.db')
abs_chrome_path = os.path.join('/', cwd_path_list[1], cwd_path_list[2], 'Library', 'Application Support',
'Google/Chrome/Default', 'History')
abs_firefox_path = os.path.join('/', cwd_path_list[1], cwd_path_list[2], 'Library', 'Application Support', 'Firefox/Profiles')
# check whether the databases exist
⾕歌,⽕狐,safari 的历史浏览记录都保存在user⽬录下的固定位置,因此只要知道当前登录⽤户的user⽬录就以获得准确的位置。作者在get_database_paths 函数中,根据平台的不同,使⽤了不同的⽅法来确定user⽬录。
def get_browserhistory() -> dict:
paths2databases = get_database_paths()
for browser, path in paths2databases.items():
try:
conn = t(path)
cursor = conn.cursor()
_SQL = ''
# SQL command for browsers' database table
if browser == 'chrome':
_SQL = """SELECT url, title, datetime((last_visit_time/1000000)-11644473600, 'unixepoch', 'localtime')AS last_visit_time FROM urls ORDER BY last_visit_time DESC"""
elif browser == 'firefox':
_SQL = """SELECT url, title, datetime((visit_date/1000000), 'unixepoch', 'localtime') AS visit_dateFROM moz_places INNER JOIN moz_historyvisits on moz_historyvisits.place_id = moz_places.id ORDER BY visit_date DESC"""
elif browser == 'safari':
_SQL = """SELECT url, title, datetime(visit_time + 978307200, 'unixepoch', 'localtime')FROM history_visits INNER JOIN history_items ON history_items.id = history_visits.history_item ORDER BY visit_time DESC"""
else:
pass
# query_result will store the result of query
query_result = []上海有哪些二本大学
try:
query_result = cursor.fetchall()
except sqlite3.OperationalError:
print('* Notification * ')
print('Please Completely Close ' + browser.upper() + ' Window')
except Exception as err:
print(err)
# close cursor and connector
cursor.close()
conn.close()
# put the query result based on the name of browsers.
browserhistory[browser] = query_result
except sqlite3.OperationalError:
print('* ' + browser.upper() + ' Database Permission Denied.')
return browserhistory
这三种浏览器的数据都存储在sqlite3中,get_browserhistory函数分别将这三种浏览器的历史浏览器记录从数据库中读取出来,这个过程需要你关闭浏览器,浏览器和你的程序⽆法同时操作sqlite3。
def write_browserhistory_csv() -> None:
"""It writes csv files that contain the browser history inthe current working directory. It will writes csv files base onthe name of browsers the program detects."""
browserhistory = get_browserhistory()
for browser, history in browserhistory.items():
with open(browser + '_history.csv', mode='w', encoding='utf-8', newline='') as csvfile:
csv_writer = csv.writer(csvfile, delimiter=',',音悦台怎么获得积分
quoting=csv.QUOTE_ALL)
for data in history:
csv_writer.writerow(data)
最后⼀步,使⽤csv模块,将不同的浏览器历史浏览记录写⼊到csv⽂件中。
受限于篇幅,每段代码只截取关键内容,感兴趣的朋友可以下载源码仔细研究,本⽂仅做⼤概介绍
3. 收获
学习使⽤第三⽅库,阅读其源码,是⾮常有效的提升技术⽔平的途径,不到200⾏的代码,认真阅读,可以收获以下知识sys.platform
csv 模块使⽤
sqlite3 读取数据库
获得不同平台,当前登录⽤户的user⽬录妈妈最想对孩子说的话
os.path 模块的⽤法

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。