qiushang преди 5 месеца
родител
ревизия
31c2ab1c7c
променени са 2 файла, в които са добавени 142 реда и са изтрити 4 реда
  1. 2 2
      package.json
  2. 140 2
      src/renderer/components/home.vue

+ 2 - 2
package.json

@@ -1,6 +1,6 @@
 {
 	"name": "XYCaptureVideo",
-	"version": "2.1.1.0",
+	"version": "2.2.1.0",
 	"author": "苏州星优办公软件有限公司",
 	"description": "An electron-vue project",
 	"license": "captureVideo",
@@ -8,7 +8,7 @@
 	"softInfo": {
 		"description": "这里是软件描述文档",
 		"downloadName": "XYCaptureVideo",
-		"softMid": "Ds8JqlRmiiGR",
+		"softMid": "EkoFCqqaUJXy",
 		"softName": "星优视频下载助手",
 		"copyright": "苏州星优办公软件有限公司",
 		"popupAdvId": "30",

+ 140 - 2
src/renderer/components/home.vue

@@ -633,7 +633,11 @@
 							return false;
 						}
 						
-						task = this.videoDownload(item, this.videoBrowser);
+						if(this.menuIndex == '1'){
+							task = this.douyinDownload(item, this.videoBrowser);
+						}else{
+							task = this.videoDownload(item, this.videoBrowser);
+						}
 					
 						if(task){
 							taskArr.push(task);
@@ -671,6 +675,138 @@
 				}
 			},
 			
+			// 抖音视频下载
+			async douyinDownload(urlInfo, browser){
+				let task = await new Promise((resolve,reject) =>{
+					(async () => {
+						try{
+							let authority = this.$refs.headerRef.authority.isAuthority;
+							urlInfo.status = '2';
+							urlInfo.num = 0;
+							const page = await browser.newPage();
+							
+							let responseVideo = [];
+							let responseUrl = [];
+							page.on('response', async(response) => {
+								// 检查响应的 MIME 类型是否以 'video/' 开头
+								if (response.headers()['content-type'] && response.headers()['content-type'].startsWith('video/')) {
+									if(responseVideo.indexOf(response.url()) < 0 && !response.url().startsWith('blob:https://')){
+										responseVideo.push(response.url());
+									}
+								}
+								
+								if (response.headers()['content-type'] && response.headers()['content-type'].startsWith('application/json')) {
+									if(response.url().indexOf('/aweme/detail/') > -1){
+										console.log(response.url(), '------------111111111111111111');
+										if(responseUrl.indexOf(response.url()) < 0){
+											responseUrl.push(response.url());
+										}else{
+											return false;
+										}
+										
+										let jsonText = await response.text();
+										let jsonObj = {};
+										if(jsonText && typeof jsonText == 'string'){
+											jsonObj = JSON.parse(jsonText);
+										}
+										
+										
+										let arr = ['aweme_detail', 'video', 'play_addr', 'url_list', '2'];
+										for(let i = 0; i < 5; i++){
+											jsonObj = jsonObj[arr[i]];
+										}
+										
+										console.log(jsonObj, '-----------22222222222222222');
+										
+										
+										
+										
+									}
+								}
+								
+								
+							});
+							await page.goto(urlInfo.url, {waitUntil : 'networkidle2'});
+							
+							let pageInfo = await page.evaluate(() => {
+								let cHeight = document.documentElement.clientHeight;
+								let scrollHeight = document.body.scrollHeight;
+								return {'scrollHeight': scrollHeight, 'cHeight': cHeight}
+							});
+							let scrollHeight = pageInfo.scrollHeight;
+							let cHeight = pageInfo.cHeight;
+							
+							let num = Math.ceil(scrollHeight / cHeight);
+							let start = -1;
+							let scrollInt = setInterval(async() => {
+								start ++;
+								
+								if(start > num || start > 30){ // 防止页面过长,滚动30次自动停止
+									urlInfo.status = '3';
+									clearInterval(scrollInt);
+									
+									if(urlInfo.title){
+										if (fs.existsSync(this.downloadDir + separator + pjson.softInfo.softName + separator + urlInfo.title)) {
+											urlInfo.newPath = this.downloadDir + separator + pjson.softInfo.softName + separator + urlInfo.title;
+										} else {
+											fs.mkdirSync(this.downloadDir + separator + pjson.softInfo.softName + separator + urlInfo.title);
+											urlInfo.newPath = this.downloadDir + separator + pjson.softInfo.softName + separator + urlInfo.title;
+										}
+									}else{
+										await this.getTitle(page, urlInfo); // 生成页面标题对应的文件夹
+									}
+									
+									//detailImg:详情图;skuImg:sku图片;commentImg: 评论图;video: 视频
+									const imgInfo = await page.evaluate((authority) => {
+										let outObj = {
+											video: []
+										};
+										// 视频
+										let arr5 = document.querySelectorAll('video source');
+										for(let i=0; i< arr5.length; i++){
+											if(outObj.video.indexOf(arr5[i].src) < 0 && !arr5[i].src.startsWith('blob:https://')){
+												if(arr5[i].src){
+													outObj.video.push(arr5[i].src);
+												}
+											}
+										}
+										return outObj;
+									}, authority);
+									
+									if(responseVideo.length > 0){
+										for(let l=0; l<responseVideo.length; l++){
+											if(imgInfo.video.indexOf(responseVideo[l]) < 0){
+												imgInfo.video.push(responseVideo[l]);
+											}
+										}
+									}
+									
+									urlInfo.status = '3';
+									console.log(imgInfo.video);
+									
+									//视频下载
+									for(let j = 0; j < imgInfo.video.length; j++){
+										let num = Number(j) + 1;
+										let suffix = '.mp4';
+										let outputPath = urlInfo.newPath + '\\视频' + num + suffix;
+										console.log(imgInfo.video[j], '--------------333333333333');
+										// await this.downloadImage(imgInfo.video[j], outputPath, urlInfo);
+									}
+									
+									this.loading = false;
+									urlInfo.status = '4';
+									resolve(true);
+								}
+							}, 600);
+						}catch(e){
+							urlInfo.status = '5';
+							reject(e);
+							this.showError(e);
+						}
+					})();
+				});
+			},
+			
 			// 视频下载
 			async videoDownload(urlInfo, browser){
 				let task = await new Promise((resolve,reject) =>{
@@ -743,6 +879,9 @@
 										};
 										// 视频
 										let arr5 = document.querySelectorAll('video source');
+										if(arr5.length == 0){
+											arr5 = document.querySelectorAll('video');
+										}
 										for(let i=0; i< arr5.length; i++){
 											if(outObj.video.indexOf(arr5[i].src) < 0 && !arr5[i].src.startsWith('blob:https://')){
 												if(arr5[i].src){
@@ -769,7 +908,6 @@
 										let num = Number(j) + 1;
 										let suffix = '.mp4';
 										let outputPath = urlInfo.newPath + '\\视频' + num + suffix;
-										console.log(imgInfo.video[j]);
 										await this.downloadImage(imgInfo.video[j], outputPath, urlInfo);
 									}