国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【小白慎入】還在手動(dòng)擼瀏覽器?教你一招分分鐘自動(dòng)化操作瀏覽器(Python進(jìn)階)

這篇具有很好參考價(jià)值的文章主要介紹了【小白慎入】還在手動(dòng)擼瀏覽器?教你一招分分鐘自動(dòng)化操作瀏覽器(Python進(jìn)階)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

大家好啊,辣條哥又來(lái)猛貨了!
小白慎入!
【小白慎入】還在手動(dòng)擼瀏覽器?教你一招分分鐘自動(dòng)化操作瀏覽器(Python進(jìn)階),Python,Python知識(shí)點(diǎn)系列詳解,Python實(shí)戰(zhàn)項(xiàng)目,自動(dòng)化,python,運(yùn)維,爬蟲(chóng),網(wǎng)絡(luò)爬蟲(chóng),經(jīng)驗(yàn)分享,后端

Puppeteer 是 Google 基于 Node.js 開(kāi)發(fā)的一個(gè)工具,而 Pyppeteer 又是什么呢?它實(shí)際上是Puppeteer 的 Python 版本的實(shí)現(xiàn),但它不是Google 開(kāi)發(fā)的,是一位來(lái)自于日本的工程師依據(jù)Puppeteer 的一些功能開(kāi)發(fā)出來(lái)的非官方版本。
在 Pyppetter 中,實(shí)際上它背后也是有一個(gè)類似 Chrome 瀏覽器的 Chromium 瀏覽器在執(zhí)行一些動(dòng)作進(jìn)行網(wǎng)頁(yè)渲染,首先說(shuō)下 Chrome 瀏覽器和 Chromium 瀏覽器的淵源。
【小白慎入】還在手動(dòng)擼瀏覽器?教你一招分分鐘自動(dòng)化操作瀏覽器(Python進(jìn)階),Python,Python知識(shí)點(diǎn)系列詳解,Python實(shí)戰(zhàn)項(xiàng)目,自動(dòng)化,python,運(yùn)維,爬蟲(chóng),網(wǎng)絡(luò)爬蟲(chóng),經(jīng)驗(yàn)分享,后端
總的來(lái)說(shuō),兩款瀏覽器的內(nèi)核是一樣的,實(shí)現(xiàn)方式也是一樣的,可以認(rèn)為是開(kāi)發(fā)版和正式版的區(qū)別,功能上基本是沒(méi)有太大區(qū)別的。

環(huán)境安裝

pip install pyppeteer

注意: 支持異步需要3.5以上的解釋器

import pyppeteer
print(pyppeteer.__chromium_revision__) # 查看版本號(hào)
print(pyppeteer.executablePath()) # 查看 Chromium 存放路徑
# pyppeteer-install 幫助你去安裝谷歌

如果無(wú)法啟動(dòng),需要手動(dòng)改文件路徑
官方網(wǎng)站:https://miyakogi.github.io/pyppeteer/reference.html
【小白慎入】還在手動(dòng)擼瀏覽器?教你一招分分鐘自動(dòng)化操作瀏覽器(Python進(jìn)階),Python,Python知識(shí)點(diǎn)系列詳解,Python實(shí)戰(zhàn)項(xiàng)目,自動(dòng)化,python,運(yùn)維,爬蟲(chóng),網(wǎng)絡(luò)爬蟲(chóng),經(jīng)驗(yàn)分享,后端

1 測(cè)試樣例

from pyppeteer import launch
import asyncio
import time
async def main():
# 啟動(dòng)一個(gè)瀏覽器
browser = await launch(headless=False,args=['--disable-infobars','--windowsize=1920,1080'])
# 創(chuàng)建一個(gè)頁(yè)面
page = await browser.newPage()
# 跳轉(zhuǎn)到百度
await page.goto("http://www.baidu.com/")
# 輸入要查詢的關(guān)鍵字,type 第一個(gè)參數(shù)是元素的selector,第二個(gè)是要輸入的關(guān)鍵字
await page.type('#kw','pyppeteer')
# 點(diǎn)擊提交按鈕 click 通過(guò)selector點(diǎn)擊指定的元素
await page.click('#su')
time.sleep(3)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())

2 基本配置

2.0 基本參數(shù)

params={
# 關(guān)閉無(wú)頭瀏覽器
"headless": False,
'dumpio':'True', # 防止瀏覽器卡住
r'userDataDir':'./cache-data', # 用戶文件地址
"args": [
'--disable-infobars', # 關(guān)閉自動(dòng)化提示框
'--window-size=1920,1080', # 窗口大小
'--log-level=30', # 日志保存等級(jí), 建議設(shè)置越小越好,要不然生成的日志占用的空間會(huì)
很大 30為warning級(jí)別
'--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',
'--no-sandbox', # 關(guān)閉沙盒模式
'--start-maximized', # 窗口最大化模式
'--proxy-server=http://localhost:1080' # 代理
],
}

2.1 設(shè)置窗口

# UI模式 頻閉警告
browser = await launch(headless=False, args=['--disable-infobars'])
page = await browser.newPage()
await page.setViewport({'width': 1200, 'height': 800})

2.2 添加頭部

await page.setUserAgent("Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML,
like Gecko) Chrome/19.0.1084.36 Safari/536.5")

2.3 網(wǎng)頁(yè)截圖

page.screenshot(path='example.png')

2.4 偽裝瀏覽器 繞過(guò)檢測(cè)

Object.defineProperty() 方法會(huì)直接在一個(gè)對(duì)象上定義一個(gè)新屬性,或者修改一個(gè)對(duì)象的現(xiàn)有屬性,并
返回此對(duì)象。
# 偽裝
await page.evaluateOnNewDocument('() =>{ Object.defineProperties(navigator,'
'{ webdriver:{ get: () => false } })}')
await page.goto('https://intoli.com/blog/not-possible-to-block-chromeheadless/chrome-headless-test.html')

2.5案例演示 觸發(fā)JS

async def run():
browser = await launch()
page = await browser.newPage()
await page.setViewport({'width': 1200, 'height': 800})
await page.goto('https://www.zhipin.com/job_detail/?
query=%E8%85%BE%E8%AE%AF%E7%88%AC%E8%99%AB&city=101020100&industry=&position=')
dimensions = await page.evaluate('''() => {
return {
cookie: window.document.cookie,
}
}''')
print(dimensions,type(dimensions))
asyncio.get_event_loop().run_until_complete(run())

2.6 boss直聘cookie反爬繞過(guò)實(shí)踐

import asyncio,requests
from pyppeteer import launch
async def run():
browser = await launch()
page = await browser.newPage()
await page.setUserAgent("Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5
(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5")
await page.setViewport(viewport={'width': 1536, 'height': 768})
await page.evaluateOnNewDocument('() =>{ Object.defineProperties(navigator,'
'{ webdriver:{ get: () => false } }) }')
await page.goto('https://www.zhipin.com/job_detail/?
query=%E8%85%BE%E8%AE%AF%E7%88%AC%E8%99%AB&city=101020100&industry=&position=')
dimensions = await page.evaluate('''() => {
return {
cookie: window.document.cookie,
}
}''')
headets = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
'cookie': dimensions.get('cookie')
}
res = requests.get(
'https://www.zhipin.com/job_detail/?
query=%E8%85%BE%E8%AE%AF%E7%88%AC%E8%99%AB&city=101020100&industry=&position=',
headers=headets)
print(res.text)

注:boss主要是cookie token反爬還有IP監(jiān)測(cè)

2. 7滾動(dòng)到頁(yè)面底部

await page.evaluate('window.scrollBy(0, document.body.scrollHeight)')

接下來(lái)看看它的參數(shù)簡(jiǎn)介:

  • ignoreHTTPSErrors (bool):是否要忽略 HTTPS 的錯(cuò)誤,默認(rèn)是 False。
  • headless (bool):是否啟用 Headless 模式,即無(wú)界面模式,如果devtools 這個(gè)參數(shù)是 True 的 話,那么該參數(shù)就會(huì)被設(shè)置為 False,否則為 True,即默認(rèn)是開(kāi)啟無(wú)界面模式的。
  • executablePath (str):可執(zhí)行文件的路徑,如果指定之后就不需要使用默認(rèn)的 Chromium 了,可 以指定為已有的 Chrome 或 Chromium。
  • slowMo (int|float):通過(guò)傳入指定的時(shí)間,可以減緩 Pyppeteer 的一些模擬操作。
  • args (List[str]):在執(zhí)行過(guò)程中可以傳入的額外參數(shù)。
  • ignoreDefaultArgs (bool):不使用 Pyppeteer 的默認(rèn)參數(shù),如果使用了這個(gè)參數(shù),那么最好通過(guò) args 參數(shù)來(lái)設(shè)定一些參數(shù),否則可能會(huì)出現(xiàn)一些意想不到的問(wèn)題。這個(gè)參數(shù)相對(duì)比較危險(xiǎn),慎用。
  • handleSIGINT (bool):是否響應(yīng) SIGINT 信號(hào),也就是可以使用 Ctrl + C 來(lái)終止瀏覽器程序,默認(rèn) 是 True。
  • handleSIGTERM (bool):是否響應(yīng) SIGTERM 信號(hào),一般是 kill 命令,默認(rèn)是 True。
  • handleSIGHUP (bool):是否響應(yīng) SIGHUP 信號(hào),即掛起信號(hào),比如終端退出操作,默認(rèn)是 True。
  • dumpio (bool):是否將 Pyppeteer 的輸出內(nèi)容傳給 process.stdout 和 process.stderr 對(duì)象,默 認(rèn)是 False。
  • userDataDir (str):即用戶數(shù)據(jù)文件夾,即可以保留一些個(gè)性化配置和操作記錄。
  • env (dict):環(huán)境變量,可以通過(guò)字典形式傳入。
  • devtools (bool):是否為每一個(gè)頁(yè)面自動(dòng)開(kāi)啟調(diào)試工具,默認(rèn)是 False。如果這個(gè)參數(shù)設(shè)置為True,那么 headless 參數(shù)就會(huì)無(wú)效,會(huì)被強(qiáng)制設(shè)置為 False。
  • logLevel (int|str):日志級(jí)別,默認(rèn)和 root logger 對(duì)象的級(jí)別相同。
  • autoClose (bool):當(dāng)一些命令執(zhí)行完之后,是否自動(dòng)關(guān)閉瀏覽器,默認(rèn)是 True。
  • loop (asyncio.AbstractEventLoop):事件循環(huán)對(duì)象。
  • 3 進(jìn)階使用

    import asyncio
    from pyppeteer import launch
    from pyquery import PyQuery as pq
    async def main():
    browser = await launch(headless=False) # 打開(kāi)瀏覽器
    page = await browser.newPage() # 開(kāi)啟選項(xiàng)卡
    # 輸入地址訪問(wèn)頁(yè)面
    await page.goto('https://careers.tencent.com/search.html?keyword=python')
    # 調(diào)用選折器
    await page.waitForXPath('//div[@class="recruit-wrap recruit-margin"]/div')
    # 獲取網(wǎng)頁(yè)源代碼
    doc = pq(await page.content())
    # 提取數(shù)據(jù)
    title = [item.text() for item in doc('.recruit-title').items()]
    print('title:', title)
    # 關(guān)閉瀏覽器
    await browser.close()
    # 啟動(dòng)異步方法
    asyncio.get_event_loop().run_until_complete(main())
    

    4 數(shù)據(jù)提取

    # 在頁(yè)面內(nèi)執(zhí)行 document.querySelector。如果沒(méi)有元素匹配指定選擇器,返回值是 None
    J = querySelector
    # 在頁(yè)面內(nèi)執(zhí)行 document.querySelector,然后把匹配到的元素作為第一個(gè)參數(shù)傳給 pageFunction
    Jeval = querySelectorEval
    # 在頁(yè)面內(nèi)執(zhí)行 document.querySelectorAll。如果沒(méi)有元素匹配指定選擇器,返回值是 []
    JJ = querySelectorAll
    # 在頁(yè)面內(nèi)執(zhí)行 Array.from(document.querySelectorAll(selector)),然后把匹配到的元素?cái)?shù)組
    作為第一個(gè)參數(shù)傳給 pageFunction
    JJeval = querySelectorAllEval
    # XPath表達(dá)式
    Jx = xpath
    # Pyppeteer 三種解析方式
    Page.querySelector() # 選擇器 css 選擇器
    Page.querySelectorAll()
    Page.xpath() # xpath 表達(dá)式
    # 簡(jiǎn)寫(xiě)方式為:
    Page.J(), Page.JJ(), and Page.Jx()
    

    5 獲取屬性

    提取目標(biāo)地址:https://pic.netbian.com/4kmeinv/index.html 所有的圖片資源文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-591857.html

    async def mains1():
    browser = await launch(headless=False, args=['--disable-infobars'])
    page = await browser.newPage()
    await page.setUserAgent("Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5
    (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5")
    await page.setViewport(viewport={'width': 1536, 'height': 768})
    await page.evaluateOnNewDocument('() =>{ Object.defineProperties(navigator,'
    '{ webdriver:{ get: () => false } }) }')
    await page.goto('https://pic.netbian.com/4kmeinv/index.html')
    elements = await page.querySelectorAll(".clearfix li a img")
    for item in elements:
    # 獲取連接
    title_link = await (await item.getProperty('src')).jsonValue()
    print(title_link)
    await browser.close()
    asyncio.get_event_loop().run_until_complete(mains1())
    

    6 登錄案例

    import asyncio
    from pyppeteer import launch
    async def mains2():
    browser = await launch({'headless': False, 'args': ['--disable-infobars', '-
    -window-size=1920,1080']})
    page = await browser.newPage()
    await page.setViewport({'width': 1920, 'height': 1080})
    await page.goto('https://www.captainbi.com/amz_login.html')
    await page.evaluateOnNewDocument('() =>{ Object.defineProperties(navigator,'
    '{ webdriver:{ get: () => false } }) }')
    await page.type('#username', '13555553333') # 賬號(hào)
    await page.type('#password', '123456') # 密碼
    await asyncio.sleep(2)
    await page.click('#submit',{'timeout': 3000})
    import time
    # await browser.close()
    print('登錄成功')
    asyncio.get_event_loop().run_until_complete(mains2())
    

    7 綜合案例

    # encoding: utf-8
    """
    @author: 夏洛
    @QQ: 1972386194
    @site: https://www.tulingxueyuan.cn/
    @file: 唯品會(huì).py
    """
    import requests
    from lxml import etree
    from loguru import logger
    import pandas as pd
    from utils import ua
    import asyncio
    from pyppeteer import launch
    class Wph(object):
    def __init__(self,url,name):
    self.url = url
    self.name = name
    self.headers = {
    'user-agent': ua.get_random_useragent()
    }
    self.session = requests.session()
    self.hadlnone = lambda x:x[0] if x else ''
    async def main(self,url):
    global browser
    browser = await launch()
    page = await browser.newPage()
    await page.goto(url)
    text = await page.content() # 返回頁(yè)面html
    return text
    def spider(self):
    df = pd.DataFrame(columns=['品牌', '標(biāo)題', '原價(jià)', '現(xiàn)價(jià)', '折扣'])
    # 發(fā)起HTTP請(qǐng)求
    # https://category.vip.com/suggest.php?
    keyword=%E5%8F%A3%E7%BA%A2&brand_sn=10000359
    res = self.session.get(self.url,params={'keyword':self.name},headers =
    self.headers,verify=False)
    html = etree.HTML(res.text)
    url_list = html.xpath('//div[@class="c-filter-groupcontent"]/div[contains(@class,"c-filter-group-scroll-brand")]/ul/li/a/@href')
    # 迭代品牌URL地址
    for i in url_list:
    ua.wait_some_time()
    # 驅(qū)動(dòng)瀏覽器 請(qǐng)求
    page_html =
    asyncio.get_event_loop().run_until_complete(self.main('http:' + i))
    # 獲取網(wǎng)頁(yè)源代碼
    page = etree.HTML(page_html)
    htmls = page.xpath('//section[@id="J_searchCatList"]/div')
    # 迭代商品URL列表
    for h in htmls[1:]:
    # 評(píng)判
    pingpai = self.hadlnone(h.xpath('//div[contains(@class,"cbreadcrumbs-cell-title")]/span/text()'))
    # 標(biāo)題
    title = self.hadlnone(h.xpath('.//div[contains(@class,"cgoods-item__name")]/text()'))
    # 價(jià)格 原價(jià)
    y_price = self.hadlnone(h.xpath('.//div[contains(@class,"cgoods-item__market-price")]/text()'))
    # 賣價(jià)
    x_price = self.hadlnone(h.xpath('.//div[contains(@class,"cgoods-item__sale-price")]/text()'))
    # 折扣
    zk = self.hadlnone(h.xpath('.//div[contains(@class,"c-goodsitem__discount")]/text()'))
    logger.info(f'品牌{pingpai},標(biāo)題{title},原價(jià){y_price},現(xiàn)價(jià)
    {x_price},折扣{zk}')
    # 構(gòu)造字典
    pro = {
    '品牌':pingpai,
    '標(biāo)題':title,
    '原價(jià)':y_price,
    '現(xiàn)價(jià)':x_price,
    '折扣':zk
    }
    df = df.append([pro])
    df.to_excel('唯品會(huì)數(shù)據(jù)2.xlsx',index=False)
    return df
    def __del__(self):
    browser.close()
    if __name__ == '__main__':
    url = 'https://category.vip.com/suggest.php'
    name = '香水'
    w = Wph(url,name)
    w.spider()
    

到了這里,關(guān)于【小白慎入】還在手動(dòng)擼瀏覽器?教你一招分分鐘自動(dòng)化操作瀏覽器(Python進(jìn)階)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 用Python手動(dòng)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的服務(wù)器,不借助任何框架在瀏覽器中輸出任意內(nèi)容

    用Python手動(dòng)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的服務(wù)器,不借助任何框架在瀏覽器中輸出任意內(nèi)容

    前言 嗨嘍~大家好呀,這里是魔王吶 ? ~! 在公司網(wǎng)站開(kāi)發(fā)中,我們往往借助于Flask、Django等網(wǎng)站開(kāi)發(fā)框架去提高網(wǎng)站開(kāi)發(fā)效率。 那么在面試后端開(kāi)發(fā)工程師的時(shí)候,面試官可能就會(huì)問(wèn)到網(wǎng)站開(kāi)發(fā)的底層原理是什么? 我們不止僅僅會(huì)使用框架開(kāi)發(fā),還需要知其所以然 今天領(lǐng)大

    2024年02月15日
    瀏覽(17)
  • 新人必看!手把手教你如何使用瀏覽器表格插件(下)

    新人必看!手把手教你如何使用瀏覽器表格插件(下)

    本文由葡萄城技術(shù)團(tuán)隊(duì)于博客園原創(chuàng)并首發(fā)。轉(zhuǎn)載請(qǐng)注明出處:葡萄城官網(wǎng),葡萄城為開(kāi)發(fā)者提供專業(yè)的開(kāi)發(fā)工具、解決方案和服務(wù),賦能開(kāi)發(fā)者。 作為一名優(yōu)秀的打工人,Excel是大家上班中必不可少的辦公軟件。隨著互聯(lián)網(wǎng)時(shí)代的到來(lái),越來(lái)越多的公司開(kāi)始使用各種B/S系統(tǒng)

    2024年02月06日
    瀏覽(95)
  • 新人必看!手把手教你如何使用瀏覽器表格插件(上)

    本文由葡萄城技術(shù)團(tuán)隊(duì)于博客園原創(chuàng)并首發(fā)。轉(zhuǎn)載請(qǐng)注明出處:葡萄城官網(wǎng),葡萄城為開(kāi)發(fā)者提供專業(yè)的開(kāi)發(fā)工具、解決方案和服務(wù),賦能開(kāi)發(fā)者。 作為一名優(yōu)秀的打工人,Excel是大家上班中必不可少的辦公軟件。隨著互聯(lián)網(wǎng)時(shí)代的到來(lái),越來(lái)越多的公司開(kāi)始使用各種B/S系統(tǒng)

    2024年02月06日
    瀏覽(103)
  • 揭秘報(bào)表新玩法!標(biāo)配插件不再單調(diào),手把手教你如何在瀏覽器中引入柱形圖插件。

    揭秘報(bào)表新玩法!標(biāo)配插件不再單調(diào),手把手教你如何在瀏覽器中引入柱形圖插件。

    摘要:本文由葡萄城技術(shù)團(tuán)隊(duì)于CSDN原創(chuàng)并首發(fā)。轉(zhuǎn)載請(qǐng)注明出處:葡萄城官網(wǎng),葡萄城為開(kāi)發(fā)者提供專業(yè)的開(kāi)發(fā)工具、解決方案和服務(wù),賦能開(kāi)發(fā)者。 圖表作為一款用于可視化數(shù)據(jù)的工具,可以幫助我們更好的分析和理解數(shù)據(jù),并發(fā)現(xiàn)數(shù)據(jù)之間的關(guān)系和趨勢(shì)。下面以柱形圖

    2024年02月08日
    瀏覽(28)
  • 還在手動(dòng)復(fù)制文章嗎?教你如何一鍵將文章從notion同步到WordPress

    還在手動(dòng)復(fù)制文章嗎?教你如何一鍵將文章從notion同步到WordPress

    本文會(huì)給大家介紹如何在WordPress上安裝一個(gè)插件,實(shí)現(xiàn)將notion上寫(xiě)的文章自動(dòng)同步到WordPress上,從而提高寫(xiě)作效率,接下來(lái)請(qǐng)跟隨我的腳步一起來(lái)操作吧! 在WordPress后臺(tái)添加新插件頁(yè)面中搜索“notion”,選擇如下圖紅框勾選的插件“WP Sync for Notion”進(jìn)行安裝。 插件安裝成功

    2024年01月20日
    瀏覽(19)
  • Selenium調(diào)用使用360瀏覽器,QQ瀏覽器,遨游瀏覽器,獵豹瀏覽器,Chromium

    Selenium調(diào)用使用360瀏覽器,QQ瀏覽器,遨游瀏覽器,獵豹瀏覽器,Chromium

    國(guó)產(chǎn)的360安全瀏覽器,360急速瀏覽器,QQ瀏覽器,遨游瀏覽器甚至新版還未上市的Edge瀏覽器都是基于Chrome瀏覽器的開(kāi)源版本Chronium開(kāi)發(fā)來(lái)的。所以360瀏覽器可以理解為一個(gè)定制的Chrome瀏覽器,最新360安全瀏覽器是基于Chromium 63版本的,落后正式的Chrome版本。 我們下載對(duì)應(yīng)的2

    2024年02月06日
    瀏覽(79)
  • 瀏覽器:瀏覽器指紋

    瀏覽器:瀏覽器指紋

    一、引子 場(chǎng)景一、綁定用戶與瀏覽器(設(shè)備),比如某一個(gè)網(wǎng)站的賬號(hào)給到用戶,用戶只能在自己的電腦的某瀏覽器使用。 場(chǎng)景二、精準(zhǔn)推送廣告。 場(chǎng)景三、公司做營(yíng)銷活動(dòng),防止活動(dòng)獎(jiǎng)品被程序薅羊毛。 等等場(chǎng)景我們有什么技術(shù)方法實(shí)現(xiàn)或避免呢,本文介紹瀏覽器指紋來(lái)

    2024年02月06日
    瀏覽(26)
  • 瀏覽器原理 之 瀏覽器安全

    XSS 攻擊,即跨站腳本攻擊(Cross-Site Scripting),是一種常見(jiàn)的網(wǎng)絡(luò)安全漏洞,它允許攻擊者將惡意腳本注入到其他用戶瀏覽的正常網(wǎng)頁(yè)中。這些惡意腳本通常以 JavaScript 形式出現(xiàn),并在用戶的瀏覽器中執(zhí)行。執(zhí)行的結(jié)果可以是竊取用戶的cookies、會(huì)話令牌,或者對(duì)用戶的賬戶進(jìn)

    2024年04月25日
    瀏覽(23)
  • 瀏覽器---瀏覽器/http相關(guān)面試題

    瀏覽器---瀏覽器/http相關(guān)面試題

    共同點(diǎn):二者都是以key-value的鍵值對(duì)方式存儲(chǔ)在瀏覽器端,大小大概在5M。 區(qū)別: (1)數(shù)據(jù)有效期不同:sessionStorage僅在當(dāng)前瀏覽器窗口關(guān)閉之前有效;localStorage始終有效,窗口或?yàn)g覽器關(guān)閉也一直保存,因此用作持久數(shù)據(jù); (2)作用域不同:sessionStorage數(shù)據(jù)只能在同一個(gè)

    2024年02月22日
    瀏覽(25)
  • 對(duì)比兩款支持?jǐn)U展的安卓瀏覽器:kiwi瀏覽器和狐猴瀏覽器

    對(duì)比兩款支持?jǐn)U展的安卓瀏覽器:kiwi瀏覽器和狐猴瀏覽器

    如果你對(duì)支持?jǐn)U展的手機(jī)瀏覽器感興趣的話,應(yīng)該早已對(duì)kiwi瀏覽器耳熟能詳。而國(guó)內(nèi)也有不少優(yōu)秀的支持?jǐn)U展的手機(jī)瀏覽器非常值得一試,最近我正在使用的狐猴瀏覽器就是一個(gè)不錯(cuò)的產(chǎn)品。 可能你正在尋找一個(gè)適合自己的手機(jī)瀏覽器,那這篇文章我就想對(duì)比一下kiwi瀏覽器

    2024年02月06日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包