<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你寫P站視頻下載Chrome插件

          共 2168字,需瀏覽 5分鐘

           ·

          2020-07-03 23:28

          今天帶大家開發(fā)一個(gè) Chrome 瀏覽器插件,主要功能是下載P站視頻,如果還不知道P站是干嘛的,嗯。。。那還是不要往下看了,這趟車最好不要上。

          P站是個(gè)學(xué)習(xí)的好地方,比如看新聞聯(lián)播什么的。

          04d32250836c43889648d93cd48b3e7f.webp


          但他需要登錄才能下載高清視頻,有的視頻還需要付費(fèi)下載。但是這種怎么能阻擋我們學(xué)習(xí)的好奇心呢。

          1dda415f50eff68c8067cc03a496ef06.webp


          如何下載P站高清視頻

          打開 Devtools, 審查元素,找到 flashvars 變量,之前的版本是直接能在這個(gè)變量下看到視頻地址。

          6f1e3e3971fb60188ad53aa814e1d8df.webp

          現(xiàn)在前端做了混淆,不能直接看到,但是只要執(zhí)行完 js,地址依然能輕松拿到。我們打印 flashvars_224154541 的值??梢钥吹接?種格式的視頻 cdn 地址。

          f04b053d6041c55964e2eb1eae790b3c.webp


          看樣子需要一個(gè) js 引擎去執(zhí)行這段代碼。網(wǎng)上查了下,有個(gè)神奇的項(xiàng)目居然能完美下載P站視頻,應(yīng)該很多小伙伴都用過:https://github.com/ytdl-org/youtube-dl

          看了下他的代碼,實(shí)現(xiàn)邏輯也跟上面的差不多,詳見:https://github.com/ytdl-org/youtube-dl/blob/fa9b8c662808a50605bb05f90af101e13b30fce6/youtube_dl/extractor/pornhub.py

          好了,輪子別人已經(jīng)做好了,我們只要實(shí)現(xiàn)個(gè)轉(zhuǎn)換的 web server 的接口就行。

          defget_download_urls(url):
          ydl_opts_start
          ={'forcejson':True,'simulate':True,'skip_download':True,'quiet':True}

          f
          = io.StringIO()
          with redirect_stdout(f):
          ydl
          = youtube_dl.YoutubeDL(ydl_opts_start)
          ydl
          .download([url])
          result
          = f.getvalue()
          result
          = json.loads(result)if result else{}
          return result

          Chrome 插件開發(fā)

          Chrome 插件的作用是拿到用戶訪問的 url,提交給服務(wù)器即可。

          我們先創(chuàng)建一個(gè) manifest.json,相當(dāng)于插件的一個(gè)配置文件。

          {
          "manifest_version": 2,
          "name": "P站視頻高清下載",
          "version": "1.1",
          "description": "下載高清P站高清視頻",
          "author": "laosiji",
          "icons":
          {
          "48": "icon.png",
          "128": "icon.png"
          },
          "browser_action":
          {
          "default_icon": "icon.png",
          "default_popup": "popup.html"
          },
          "permissions": ["activeTab"]
          }

          由于插件非常簡單,用不著 background.js content-script.js ,只需聲明 activeTab 的權(quán)限。

          接下來,我們創(chuàng)建一個(gè) popup.html 作為和用戶的交互界面,html 里面包含一個(gè) popup.js

          chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
          url = tabs[0].url
          title = tabs[0].title
          if (url != undefined && url.match(/https:\/\/.*?\.pornhub\.com\/view_video\.php\?viewkey=.*/)) {
          html = '
          ' + title +'
          '
          html += 'Download'
          $("#video_info").append(html)

          }
          })

          將開發(fā)完的插件加載到瀏覽器中,然后在P站頁面點(diǎn)擊瀏覽器右上角的插件,可以看到如下彈窗。

          6962dfa17b1318ad4f7c3ed638456295.webp

          點(diǎn)擊 Download 跳轉(zhuǎn)至網(wǎng)站頁面,即可下載高清視頻。

          ae7829b985c19883f58a802c345b480c.webp

          總結(jié)

          本次教程忽略了一些細(xì)節(jié),比如前端 html 的制作,如何打包一個(gè)插件,這部分內(nèi)容可參見我翻譯的谷歌瀏覽器擴(kuò)展官方文檔:https://dev.crxhome.org

          其實(shí)解析視頻這塊,直接用 js 執(zhí)行也能得到結(jié)果,而且還不依賴后端 api。我開發(fā)后端的轉(zhuǎn)換 api,主要原因如下:

          1. 插件有更新問題,一旦解析邏輯失效,需要重新審核上線,或者一些無法更新的用戶就會(huì)沒法使用。

          2. 網(wǎng)站可以不依賴插件運(yùn)行,相對限制更少,更通用。

          安裝

          最后把 Demo 放出來給大家試用吧,在公眾號(hào)「程序化思維」回復(fù) demo ,最后下載拿到一個(gè) zip 文件。

          谷歌瀏覽器訪問 chrome://extensions 后,直接將 zip 文件拖拽進(jìn)頁面安裝即可。


          瀏覽 972
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  情趣在线视频 | AV黄片毛片 | 中文字幕久久精品无码不卡 | 搡老熟女大熟了88AV一区二区 | 国产七区 |