看完Pornhub的视频接口JS混淆后,我顺手写了个下载插件

看完Pornhub的视频接口JS混淆后,我顺手写了个下载插件

看过我博客的朋友,应该都知道我以前经常写爬虫的,但是现在基本上不玩了。以前写过一篇关于pornhub视频接口抓取的文章,当时写那个完全是兴趣使然。不过没想到很多朋友在谷歌上都看到了那篇文章,然后加了我好友一起探讨。

pornhub视频地址接口抓取分析&&爬虫源码分享

之所以写这篇文章呢,是因为前几天有一位朋友,看了我上面这篇文章,加了我好友并咨询了我一些问题。

应该是最近Pornhub(下面全部简称P站)好像修改了前端的代码,将视频的接口信息全部隐藏起来了。不过我很久都没有看过P站了,也不太了解情况。第二天打开看了一下,发现确实不像以前那样能直接在网页源码中找到视频链接了。

这是以前的P站。

现在的P站。

这两段都是JS代码,但是以前的一看就很清晰明了,而现在的都是些什么鬼玩意儿,怎么还有一大堆的垃圾注释在里面。

不用说,肯定是做了JS混淆。恰好最近在研究JS逆向,本来想着可能比较复杂。应该要下断点,然后查看堆栈调用什么的。因为代码是被压缩过的,所以在chrome开发者工具里直接代码格式化。

在network面板中将代码格式化之后可以看的很清楚,看上面定义的那一堆变量感觉就是我们要的url,而下面就是将变量拼接的最后的视频链接。

我在想P站的程序猿不会真的这么傻吧,难道就这样拼接一堆字符串??所以我就去前面找到定义的那个变量。

然后在控制台输出这个变量的值。

我整个人都傻了,P站的程序猿这么直接的吗?那还混淆个**的代码。以前写个P站的爬虫还得每个URL正则匹配才能提取出来。现在更省事了,都不用爬了,直接把这个变量的值取出来就什么信息都有了。

我严重怀疑P站的前端程序猿是不是写代码的时候看片去了!

所以接下来要想提取出视频的url就很容易了,我本来还是打算用Python来写个脚本直接拿到url的。直接用ExecJS这个库来执行这段被混淆过的JS代码就ok了。但是想了想这样也太简单了吧,没什么意思。要不我写一个Chrome的插件来完成这件事,因为本身视频加载之前JS肯定会执行。那么用插件的方式也更加方便。于是思索了一晚上,第二天一大早就起床撸插件。

插件开发的过程,最关键的问题就是如何将包含所有视频接口信息的变量给提取出来。

一开始我是想到是直接在浏览器的全局变量window中拿到那个变量,这是最简单的办法。我发现通过注入JS代码用console.log(window)输出的全局变量中还是没有包含flashvars_*****这个变量,不清楚为什么。我一开始认为可能是页面onload的时候还没有执行JS所以没有变量信息。后面我想了想要不执行settimeout来实现延迟执行代码,但是还是不行。

 

于是我决定用另外一个办法,将字符串作为代码执行。也就是写木马最常用到的eval函数。在页面加载时,通过xpath得到混淆JS代码的位置,将它作为一段字符串当成代码执行,这样同样拿到了接口信息。

给大家看一下插件最核心的两段代码content-script.js,也就是注入页面的JS代码。

function Func() {
   return new Promise((resolve, reject) => {
      var a = document.querySelector("#player >script:nth-child(1)").innerHTML
      a = a.split('loadScriptUniqueId')[0]
      var c = a.match("flashvars_[0-9]{1,}")[0] 
      eval(a) 
      var d = eval(c) 
      resolve(d)
   })
}
window.onload = () => {
   Func().then(res => {
      var videoType = []
      Object.keys(res).forEach((item) => {
         if (item.startsWith('quality_')) {
            var obj={
               key:item,
               val:res[item]
            }
            videoType.push(obj)
         }
      })
   for(var i = 0, len = videoType.length; i < len; i++){
   console.log(videoType[i].key,videoType[i].val)
}   
   chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
      if(request.cmd == 'test') 
      sendResponse(videoType);
      });
   })
}

和popup.js也就是插件在浏览器右上角的那个页面的JS。

function sendMessageToContentScript(message, callback)
{
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs)
    {
        chrome.tabs.sendMessage(tabs[0].id, message, function(response)
        {
            if(callback) callback(response);
        });
    });
}
sendMessageToContentScript({cmd:'test', value:'test'}, function(videoType)
{
    console.log(videoType);
   for(var i = 0, len = videoType.length; i < len; i++){
      console.log(videoType[i].key,videoType[i].val)
}
    var boxEl = document.getElementsByTagName('ul')[0]
    //var videoType = [{ key: 'qeqw', val: 'adasda' }, { key: 'qeqw', val: 'adasda' }, { key: 'qeqw', val: 'adasda' }]
    var videoStr = ''
    videoType.forEach(item => {
        videoStr += "<li>" + "<label>清晰度:" + "<span>" + item.key + "</span>" + "</label>" + "<a href=" + item.val + " target='_blank'>下载</a>" + "</li>"
    });
    boxEl.innerHTML = videoStr
});

popup.js的作用主要就是和content-script.js通信,相互传值。然后在插件中渲染生成页面,JS间传值主要用到了Chrome的API。

插件开发的过程中还涉及到很多细节问题,比如ico的制作,这些就不提了。最后插件的样子大致如下。

当页面加载完成,点击下载就能下载到到原视频了。最后插件写完,顺便上传到了Google商店里,毕竟是自己写的第一个Chrome插件,还是蛮激动的。感兴趣的小伙伴可以下载来试试。

插件链接:https://chrome.google.com/webstore/detail/pornhub%E8%A7%86%E9%A2%91%E4%B8%8B%E8%BD%BD%E6%8F%92%E4%BB%B6/ilkaomdecidpjhckgicihkekblbfjklc?hl=zh-CN&gl=CN

插件源码压缩包:

Pornhub视频下载插件

如果不能从谷歌商店安装的话,可以直接解压导入。

总结:

由于之前一直都是用Python写脚本,对JS不是太熟悉,虽然我只知道怎么去实现,但是我却不能熟练地用JS写出来,这期间向很多问题都是我的同学勾大佬请教的,很感谢大佬的帮忙。不过令我很惊奇的是做开发的同学他们普遍都没用过eval函数,甚至不知道。他们告诉我正常的开发中没有这样用的。但是我感觉搞安全的,基本人人都知道eval,毕竟一开始学习一句话木马的时候就没少接触过。也许做开发和搞安全区别真的挺大的吧。

10月13日更新:

谈一下谷歌插件发布的一些经验。由于写插件之前我根本不知道看P站的人竟然有这么多。大概过去半个多月,就有700多用户了,Amazing!

 

所以我在前两天就修复了一些插件的bug,并且添加了一些插件的英文翻译。

好像是触发了Chrome插件商店的自动化审查,结果第二天我收到了谷歌给我发来的邮件。

所以赶紧删掉了插件介绍的英文翻译,然后重新发布了插件,然后通过了审查。恰好有朋友发邮件咨询我。

大概就是这样吧,不过我还是想声明一下,真的没有搞黄色[\捂脸]

插件1.2版本更新:

1.取消onload事件,优化插件运行速度,不必等待页面加载完成再获取视频链接信息
2.增加对pornhub会员账号的视频链接提取
3.增加用户提示

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

141条评论

GaoMon 发布于5:36 下午 - 2月 3, 2023

GaoMon Home Official: https://www.gaomon.com/  offer home appliances, kitchen appliances, modern furniture, kids toys, home goods, outdoor gears etc. We have a vast selection of affordable products online. Enjoy big savings and fast free shipping on high quality brand products. Shop the best home goods for modern home that suit your new style. 

Dirndl 发布于10:12 上午 - 12月 29, 2021

Das Oktoberfest ist das größte Volksfest der Welt und etwas, das Sie auf keinen Fall verpassen sollten, wenn Sie eine Reise nach Deutschland planen! Es ist ein Fest der guten Zeit, der Musik, der fröhlichen Menschen in Lederhose und Dirndl(https://www.wiesnfashion.com/), des Biertrinkens und des traditionellen bayerischen Essens.

匿名 发布于10:44 上午 - 10月 29, 2021

好人一生平安

シリコン ラブドール 发布于5:30 下午 - 10月 21, 2021

ラブドール リアル Enjoyed every bit of your article post. Much obliged.

    Zgao 发布于12:52 下午 - 1月 27, 2021

    大家可以去github上下载

      MJ 发布于7:40 下午 - 2月 5, 2021

      表示chrome,不认这个插件,无法安装上

    发布于7:18 下午 - 4月 17, 2021

    为什么它的url具有IP限制&ip=xx.xx.xx.xx&hash=BS7XHd%2BVe2NWarASUHAMcQCA10A%3如何突破他的IP限制?谢谢

marin 发布于9:48 下午 - 1月 26, 2021

发现P站已经换了流媒体的方式,不过还是有mp4的,需要额外的请求处理,可以使用下面的代码。
在地址栏创建一个书签,名称为“下载”,网址内容如下一行:
javascript:void(function(d){var a=d.querySelector(“#player >script:nth-child(1)”).innerHTML;a=a.split(‘loadScriptUniqueId’)[0];var c=a.match(“flashvars_[0-9]{1,}”)[0];eval(a);var v=eval(c);console.log(v.mediaDefinitions);var vl=””;for(var i=0,len=v.mediaDefinitions.length;i<len;i++){if(v.mediaDefinitions[i].format=="mp4"){fetch(v.mediaDefinitions[i].videoUrl,{method:'GET',mode:'cors',credentials:'include'}).then(function(response){response.json().then(function(data){console.log(data);for(var i=0;i<data.length;i++){vl+='‘+data[i].quality+’  ‘}d.querySelector(“div.download-tab”).classList.add(“active”);d.querySelector(“div.download-tab”).innerHTML=vl})}).catch(function(e){console.log(‘error: ‘+e.toString())})}}}(document));

在需要down的页面点击书签下载即可。
来自marin
地址https://github.com/marin1993

    匿名 发布于9:50 下午 - 1月 26, 2021

    push一下代码

    Zgao 发布于9:51 下午 - 1月 26, 2021

    感谢你的代码,不过我已经发布了插件1.9版本解决了该问题。

      匿名 发布于11:53 上午 - 1月 27, 2021

      请问在哪可以下载1.9版本?

匿名 发布于12:03 上午 - 1月 21, 2021

niubility!!!!!

匿名 发布于6:50 下午 - 1月 12, 2021

大佬 插件好像挂了 能不能修复一下qaq

匿名 发布于12:02 上午 - 1月 9, 2021

插件凉了吗?混淆程度好像变高了,这会儿插件都不能跑了。目前找不到拼接的规律。

小书童 发布于7:49 下午 - 12月 29, 2020

大佬。膜拜!

edison chen 发布于12:45 上午 - 11月 26, 2020

什么时候安排91站件

    edison chen 发布于12:46 上午 - 11月 26, 2020

    插件

匿名 发布于4:35 下午 - 10月 21, 2020

大佬 现在谷歌浏览器装这个插件会报错啊 也显示不出来下载

匿名 发布于7:29 下午 - 10月 3, 2020

大佬,我发现如果视频的名字里有windows文件名不允许的符号(*?什么的),那么这个视频就不会被创建下载,虽然听起来理所当然,但是实际体验上就是”下载”按钮怎么都没反应。现在因为都找不到插件下载和更新了,所以可能只有我的这个老版本有问题hhh

    zgao 发布于9:58 上午 - 10月 10, 2020

    这个bug我修复过,忘记更新到博客上了,你提醒了我,谢谢。

匿名 发布于10:16 下午 - 7月 3, 2020

安装了1.2版本的插件,但是找不到下载入口了

    duzi 发布于10:16 上午 - 8月 23, 2020

    现在有很多pornhub在线下载网站,不用安装插件,直接输入播放地址就可以下载。https://www.sourcetrackers.com

    匿名 发布于12:28 下午 - 9月 15, 2020

    123

匿名 发布于7:22 下午 - 7月 2, 2020

这个Gmail也不打码么。。。
高大佬?

匿名 发布于6:21 下午 - 5月 15, 2020

老大,能不能写个批量的,哈哈,那样不是很爽。感谢!辛苦了!

    匿名 发布于8:29 下午 - 6月 25, 2020

    哥们你用哪个版本的,我用1.2,找不到下载入口啊

匿名 发布于1:53 下午 - 5月 14, 2020

请问为啥console.log出来是undefined呢。。都找到那串数字了

    匿名 发布于1:55 下午 - 5月 14, 2020

    没事了。。

IOKEY 发布于11:09 上午 - 4月 17, 2020

又被Google下架了,作者太难了哈哈哈

匿名 发布于2:24 下午 - 4月 11, 2020

已经被chrome屏蔽了,不能用了,有啥好办法吗?

    匿名 发布于3:54 下午 - 4月 13, 2020

    同问

zgao fan 发布于11:29 上午 - 4月 7, 2020

你在我心里真的是个神了!

Yang 发布于10:14 下午 - 4月 6, 2020

被商店屏蔽了
能在这里留下下载链接吗

    Yang 发布于10:20 下午 - 4月 6, 2020

    看漏了高亮字,抱歉

zaq 发布于8:23 下午 - 4月 5, 2020

大佬,请教一下,能拿到下载地址后,绕过梯子免流量下载吗

phd一年级 发布于7:30 上午 - 4月 5, 2020

兄弟厉害啊

匿名 发布于1:19 上午 - 4月 3, 2020

大佬,p站id是乱码,下载下来的id是数字,咋么转换的?

    匿名 发布于9:46 下午 - 4月 3, 2020

    ph58cafca074cc1 怎么转换到109869322

匿名 发布于8:58 下午 - 4月 2, 2020

你好,请问可以加个功能,由浏览器接管下载吗?因为我chrome的下载是由一个扩展程序chrono接管的,速度比浏览器原生的流畅点

Akiyama 发布于3:30 下午 - 4月 2, 2020

您好,下载页面没有任何连接
是BUG吗?

    匿名 发布于4:59 下午 - 4月 3, 2020

    同样遇到了这个情况,1.3版本。

    Yang 发布于10:25 下午 - 4月 6, 2020

    同样问题,会报错误
    Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.

匿名 发布于6:48 上午 - 4月 1, 2020

老大,插件好像暂时用不了,可以看看吗,谢啦~!我有个朋友上P站学英语。

    匿名 发布于11:21 上午 - 4月 8, 2020

    无中生友

匿名 发布于5:07 下午 - 3月 26, 2020

现在P站好像变成了流文件了,打开URL变成下载m3u8文件,请问还能通过这种方法获取视频地址吗?

发布于1:07 上午 - 3月 12, 2020

很久以前写过一个爬虫用来下载,但是去年开始不能用了,最近年纪大了很少看P站,今天偶然发现了你的站点,很有意思。
个人感觉(估计)P站还是下了点功夫的,不是在JS客户端,而是在服务端的资源控制/管理,现在提取的连接,在本机上确实能够下载,但是换个IP,这个地址就没有效果了,显示4XX未授权错误。
我不知道你的那个反向代理的站点能否解决这个问题。本来我以为资源页进入的时候服务端会记录你的IP,然后你再请求资源的时候只有这个IP有效。但是看了你反代的那个我又不怎么确定了。

    zgao 发布于10:30 上午 - 3月 12, 2020

    是的,用插件提取出的链接仅当前ip有效,而利用反向代理刚好解决了这个问题,因为这时p站记录的ip是反代服务器的ip,反代的视频就绕过了该限制。

匿名 发布于9:28 下午 - 3月 4, 2020

下载速度有点慢啊

kir 发布于2:27 下午 - 3月 3, 2020

idm也可以抓到视频,不过还是感谢大神!

ZIKE 发布于9:36 上午 - 3月 3, 2020

THANK YOU VERY MUCH FOR THIS!
COULD PLEASE MAKE SOMETHING LIKE THIS FOR XVIDEOS?
IM SURE THAT MANY OF YOUR USERS WOULD APPRECIATE YOUR WORK.

    zgao 发布于10:11 上午 - 3月 3, 2020

    Good idea,I’ll try it.

JOHNNY 发布于10:39 下午 - 2月 27, 2020

HI
VERY GOOD ADD-ON

CAN YOU MAKE THE DOWNLOADED FILE WITH SAME NAME OF THE VIDEO FROM THE SITE PLEASE

THANKS

    zgao 发布于4:15 下午 - 2月 28, 2020

    Thanks,I’ll add this function to next version.

jaya 发布于10:29 下午 - 2月 26, 2020

一次下载太多了,有部分没下载完,并且停止住了,查看链接显示403了,有什么方法可以通过视频的id来获取到原来的视频网页地址。

钺阡 发布于11:25 下午 - 2月 24, 2020

请问博主,我用最简单的beautiful soup和request,想把搜索结果每一页的信息拷下来(就是您上一篇的第二块代码那样),但我的代码在遍历所有div这一块直接跳过去了(就是没有输出),但我确定过了,不是接口的问题,findall的class也没有问题,它可以访问这个网站并且获取soup.text这种信息。
请问这种情况和新加的JS混淆有关系么?

    zgao 发布于8:51 上午 - 2月 25, 2020

    这个和JS的混淆无关,具体代码上的问题你可以加我好友一起讨论。

匿名 发布于1:41 上午 - 2月 23, 2020

大佬,p站的视频下载链接是不是过一段时间就会变,有时候链接里有ttl等参数,有时候没有,有时候带有IP,可以简单解释一下这些吗?

    zgao 发布于9:21 上午 - 2月 23, 2020

    链接确实会变,大多数获取到的链接都有带ip参数,你看到没有带ip的实际是被编码过的,还是带了ip的。

匿名 发布于10:33 下午 - 2月 21, 2020

有句话叫闻道有先后,术业有专攻,向你学习

源波 发布于8:21 下午 - 2月 13, 2020

大大抽空能研究一下这个网站的视频接口吗?用了很多个VIDEO下载插件,都无法嗅探
https://jav.re/watch/5Ag

millennium 发布于4:08 上午 - 2月 4, 2020

下载没有问题,就是您上面写的是付费视频也可以免费下载。点开付费视频,就是一个比较短的预览视频,这个时候点击插件不显示视频连接,请问该怎么解决,谢谢!

    伟哥司机 发布于6:19 上午 - 2月 4, 2020

    之前是可以直接用idm下载到mp4格式的、、、之后不知道怎么的只能抓到ts格式的了。

    zgao 发布于12:55 下午 - 2月 4, 2020

    我插件上说的付费是指付费下载的视频,不是付费观看的视频

      匿名 发布于1:15 下午 - 2月 4, 2020

      原来如此,我研究了一下,付费观看的下也是可以下的,就是只是那个预览片段。。。估计要购买之后才会跳到本体视频的页面吧

      GJG 发布于5:15 下午 - 4月 6, 2020

      付费下载的视频并不能下载..不过还是很感谢的,比以前方便多了,前一段时间刚添加了这个插件,今天就看到这个帖子了haha

      GJG 发布于5:28 下午 - 4月 6, 2020

      原来是更新插件了,下载更新后的插件就可以下载 付费下载 的视频了

校车司机 发布于2:20 上午 - 2月 3, 2020

没有搞黄色??????认真脸

匿名 发布于11:22 上午 - 2月 1, 2020

哈哈,有意思

匿名 发布于3:36 下午 - 1月 31, 2020

博主在下载时遇到的问题是:
Unauthorized
We’re sorry, the request requires user authentication

无法查看 发布于8:10 下午 - 1月 30, 2020

博主,出来的界面是

访问 dv1.phncdn.com 的请求遭到拒绝
您未获授权,无法查看此网页。
HTTP ERROR 403

    Zgao 发布于1:17 上午 - 1月 31, 2020

    梯子要用全局代理

路人乙 发布于4:44 下午 - 1月 27, 2020

本来我已经放弃p站了,因为下载视频简直是没法弄!无意中收到了此插件,作者真的是太厉害了,让我又重新回到了p站,不行了,营养不够用,我去喝瓶营养快线~~

233 发布于9:48 上午 - 1月 16, 2020

老哥牛逼

afkey 发布于9:11 下午 - 1月 4, 2020

博主你好,我想自学一些Python爬虫的知识,但是网络上一直没找到好的素材,请问有什么自学教材可以推荐一下吗?

    zgao 发布于11:09 上午 - 1月 5, 2020

    推荐b站小甲鱼的视频

多空 发布于11:31 上午 - 1月 1, 2020

大神真的厉害!谢谢了!但是4K的解析不了,能不能想办法搞一下!

    zgao 发布于12:04 下午 - 1月 1, 2020

    4k的通常需要p站付费会员的账号才可以解析到,插件实现的就是能播放才能下载。

匿名 发布于2:11 下午 - 12月 31, 2019

老哥太强了,希望这个插件能够一直更新!!!超级感谢大佬
好人一生平安

SEAN 发布于4:37 下午 - 12月 27, 2019

哥,我想问一下,如果我想观看或者下载一个视频,但是这个视频被发布者加密了,只能够通过添加对方为好友才能观看。这该怎么办?
已经加过对方好几次也留言诚恳希望他通过了,可惜还是没有添加我,实在是心痒痒呀

盒子yo 发布于2:39 下午 - 12月 25, 2019

牛啤 感谢!之前也是一直查看代码获取链接,后来不行了。。看了你的帖子明白了,嘿嘿,原来是这样~~

Chong 发布于4:28 下午 - 12月 23, 2019

Hey there! I’ve been reading your blog for a long time.

AlmondLee 发布于5:29 下午 - 12月 22, 2019

我有一个大胆的想法……输入喜欢的博主地址(如https://www.pornhub.com/users/iwake)然后自动开始下载他的所有视频

    zgao 发布于6:15 下午 - 12月 22, 2019

    你这个过分了,哈哈

      匿名 发布于1:27 下午 - 12月 31, 2019

      大佬,太强了,非常感谢你的努力!!!辛苦了

    校车司机 发布于6:17 上午 - 2月 4, 2020

    居然是学习资料哈哈

Lyon 发布于8:24 下午 - 12月 18, 2019

建议加个原始视频名字加网站后缀的选项,例如 truelove – pornhub.com.mp4

Morty 发布于12:26 上午 - 12月 16, 2019

【求助】插件页面点击“下载”后,打开新的页面显示“403 – Forbidden”

    zgao 发布于9:54 上午 - 12月 16, 2019

    1.确保你用的是全局代理
    2.不要复制链接在其他地方打开

ROME嗨 发布于9:46 下午 - 12月 13, 2019

好人啊真带劲儿~

匿名 发布于1:17 下午 - 12月 10, 2019

还是国中有人好办事, 一定要守护我方大佬,膜拜!

Johnny 发布于9:59 上午 - 12月 6, 2019

请问博主,有的网站视频被切割成多个地址加载,该如何处理呢?https://vcdn.sanjieke.cn/video/16173845/608p/ts/75cb6a9886e57b87d8ec65a76bf90613.ts?sign=889da9730c065f82160612b79dbcf24b&t=5dea0973
https://vcdn.sanjieke.cn/video/16173845/608p/ts/043c456a72de71ec0468b60b8035edb9.ts?sign=e682e65360cd47957bd1485634a022fa&t=5dea0973

    zgao 发布于5:38 下午 - 12月 15, 2019

    对于ts没有加密的,可以先抓取m3u8文件直接批量抓取下载再合并ts文件。

CCwade 发布于8:21 下午 - 12月 1, 2019

隐私模式下点下载,会在新窗口(正常模式)打开

danbi 发布于10:56 下午 - 11月 29, 2019

大佬你好,我今天第一次用这个插件,看介绍说可以下载会员视频,我下不了,这个是需要自己本身账户是会员才可以下载是吗?

    zgao 发布于10:56 上午 - 12月 1, 2019

    是的,视频可以看就能下载,如果你看不了就无法下载。

七玄 发布于7:35 上午 - 11月 29, 2019

取出的地址带有IP限制,但我发现我的一台主机取出的是没有限制的地址,任何地方都可欣赏,不知可有人知道其中的原因

    zgao 发布于10:52 上午 - 11月 29, 2019

    可否发一下链接,可以分析一下。

    匿名 发布于8:05 下午 - 11月 29, 2019

    怎么用不了了

匿名 发布于12:45 下午 - 11月 28, 2019

插件超级好用感谢大佬!!
但是有没有可能做到下载下来的文件名和原视频名称一样呢?

    zgao 发布于3:14 下午 - 11月 28, 2019

    谢谢建议,这个在以后的版本中会更新的。

小猛 发布于11:16 下午 - 11月 27, 2019

403了

    zgao 发布于10:23 上午 - 11月 28, 2019

    刚试了下,发现没有403,可能是个别情况吧。

匿名 发布于10:17 下午 - 11月 26, 2019

必须点赞。、
用来下载VR。感觉VR这个行业还是不行。内容太难搞,而且,很快就会觉得无聊。

匿名 发布于9:48 下午 - 11月 26, 2019

感谢老哥,哈哈哈

匿名 发布于3:22 下午 - 11月 25, 2019

牛批啊,特地来感谢一波。

    zgao 发布于8:37 下午 - 11月 25, 2019

    哈哈,感谢支持

re 发布于5:03 下午 - 11月 24, 2019

大佬你好,今天看到你的文章,去chrome应用市场,显示解压扩展程序失败,下载压缩包之后,解压同样出现错误,压缩包里的那个html文件解压不出来。求解决Thanks♪(・ω・)ノ

    zgao 发布于5:31 下午 - 11月 24, 2019

    你是用的Chrome吗,如果插件安装失败,可以试试安装新的Chrome版本

发布于11:29 下午 - 11月 21, 2019

可能我的梯子比价软,下载速度过于缓慢以至于几小时没下完然后就下不了了,请问这是什么问题,能否针对这个进行优化

    zgao 发布于11:36 下午 - 11月 21, 2019

    建议换一个速度快的梯子就ok了,这个和插件本身没有关系。网速太慢了,下载就容易断开。

匿名 发布于10:08 上午 - 11月 17, 2019

首先感谢您的分享
两点建议
1: 增加直接下载功能 不需另外打开窗口
2:下载视频应用视频原有的名称

    zgao 发布于10:44 上午 - 11月 17, 2019

    感谢您的建议,第一个建议我之前考虑过,由于目前还没有找到最优的办法解决下载跨域的问题,之后我会更新这个功能,直接在插件页面下载视频。
    第二个建议需要在第一点实现之后才能解决。

匿名 发布于11:29 下午 - 11月 14, 2019

love your work! can i get the english version?

    zgao 发布于11:14 上午 - 11月 17, 2019

    Sure,I can’t upload the English version to the Google Store for some policy reasons.
    So You can click on this link to download English version.
    Pornhub video download plugin

匿名 发布于5:54 下午 - 11月 10, 2019

哥 你的软件下载页面出不来 是空白的

    zgao 发布于7:12 下午 - 11月 10, 2019

    视频页面加载完之后,再点击插件即可显示下载信息。若视频页面还未加载完就点击插件则会显示空白。这个我会优化一下的

      匿名 发布于1:24 下午 - 12月 7, 2019

      使用方法是等页面加载出来,点击插件,插件就会显示下载的链接吗??为什么没有链接?

    ezez 发布于4:42 上午 - 12月 31, 2019

    下载页面出不来,是空白的。梯子没问题,视频早就加载好了,现在

匿名 发布于7:33 下午 - 11月 5, 2019

太骚了。学习了学习了

匿名 发布于12:21 上午 - 10月 24, 2019

大佬,用Python的话怎么获取JS中的变量呀?

    zgao 发布于10:07 上午 - 10月 24, 2019

    用ExecJS这个库来执行JS代码,可以直接调用JS中函数和变量。示例代码如下:

    import execjs
    #读取js文件
    with open('t.js',encoding='utf-8') as f:
        js = f.read()
     
    #通过compile命令转成一个js对象
    docjs = execjs.compile(js)
     
    #调用function
    res = docjs.call('createGuid')
    print(res)
     
    #调用变量
    res = docjs.eval('guid')
    print(res)

      匿名 发布于6:04 下午 - 10月 24, 2019

      好的好的,谢谢

      feel 发布于10:07 上午 - 10月 31, 2019

      老师来点正能量的呵呵!https://www.turbosquid.com/Search/Artists/rstr_tv 学习模型能抓取吗

        zgao 发布于2:38 下午 - 10月 31, 2019

        我看了好像都是图片诶,你所说的模型是图片吗?

      匿名 发布于11:01 下午 - 12月 19, 2019

      大佬 我把pornhub源码里面的var flashvars_190112311 = {“maxInitialBufferLength…..height”:”100%”,”version”:”9.0.0″} };这么一段复制到新建的js文件中 然后用复制你这个代码 运行报错execjs._exceptions.ProgramError: TypeError: ‘loadScriptUniqueId’ 未定义
      请问就pornhub这个例子怎么用execjs执行js代码 求指导 谢谢!

        zgao 发布于1:37 下午 - 12月 20, 2019

        因为你多复制了一段,复制到loadScriptUniqueId之前结束

          匿名 发布于6:48 下午 - 12月 20, 2019

          删除之后 又报错ReferenceError:createGuid is not defined
          怎么办?

          匿名 发布于8:26 下午 - 12月 20, 2019

          我找不到函数 能帮忙找下 发出来吗?谢谢

          zgao 发布于10:58 上午 - 12月 21, 2019

          js

          匿名 发布于11:18 上午 - 12月 21, 2019

          我是复制到那里了然后运行就报错 createGuid is not defined

          zgao 发布于11:25 上午 - 12月 21, 2019

          你加我qq吧,博客上交流回复不及时

          匿名 发布于1:18 下午 - 12月 21, 2019

          嗯嗯,加了

回复 匿名 取消回复