qiushang 5 tháng trước cách đây
mục cha
commit
2e36aa7980
4 tập tin đã thay đổi với 169 bổ sung42 xóa
  1. 3 3
      nsis/test.nsi
  2. 1 1
      package.json
  3. 89 17
      src/renderer/components/header.vue
  4. 76 21
      src/renderer/components/home.vue

+ 3 - 3
nsis/test.nsi

@@ -1,16 +1,16 @@
 # ====================== 自定义宏 产品信息==============================
 !define PRODUCT_MID        		    "Ds8JqlRmiiGR"
-!define PRODUCT_VERSION        		"2.2.0.0"
+!define PRODUCT_VERSION        		"2.2.0.2"
 !define PRODUCT_NAME           		"星优图片下载助手"
 !define INSTALL_OUTPUT_NAME    		"XYCapture_XY.exe" 
 !define EXE_NAME               		"XYCapture.exe"
 !define PRODUCT_PATHNAME           	"XYCapture"     #安装卸载项用到的KEY,注册表
 !define INSTALL_APPEND_PATH         "XYCapture"     #安装路径追加的名称 
-!define APP_DOWNLOAD_URL    		"https://xy.xingyousoft.com/soft/XYCapture/lastest2.2.0.0.7z"
+!define APP_DOWNLOAD_URL    		"https://xy.xingyousoft.com/soft/XYCapture/lastest2.2.0.2.7z"
 !define PRODUCT_PUBLISHER      	    "苏州星优办公软件有限公司"
 !define PRODUCT_LEGAL          	    "苏州星优办公软件有限公司"
 !define STATISTICS_url              "https://www.xingyousoft.com/api/index/user_log"   # 统计网址
-!define UNINSTALL_url               "https://xy.xingyousoft.com/soft/XYCapture/uninstallWeb/?v=2.2.0.0"   # 接卸优惠网址
+!define UNINSTALL_url               "https://xy.xingyousoft.com/soft/XYCapture/uninstallWeb/?v=2.2.0.2"   # 接卸优惠网址
 
 # ====================== 自定义宏 安装信息==============================
 !define INSTALL_7Z_NAME 	   		"app.7z"

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
 	"name": "XYCapture",
-	"version": "2.2.0.0",
+	"version": "2.2.0.2",
 	"author": "苏州星优办公软件有限公司",
 	"description": "An electron-vue project",
 	"license": "capture",

+ 89 - 17
src/renderer/components/header.vue

@@ -36,6 +36,7 @@
 						        <el-dropdown-item command="update">检查更新</el-dropdown-item>
 						        <el-dropdown-item command="help"><a href="https://www.xingyousoft.com/help2" style="color: inherit;">使用教程</a></el-dropdown-item>
 						        <el-dropdown-item command="setting">软件设置</el-dropdown-item>
+								<el-dropdown-item command="developer">开发者模式</el-dropdown-item>
 						        <el-dropdown-item command="out" v-if="userInfo.username || userInfo.avatar">退出登录</el-dropdown-item>
 						    </el-dropdown-menu>
 						</el-dropdown>
@@ -139,20 +140,23 @@
 					<el-button size="mini" @click="toLogin('tb')" :loading="tbLoading">天猫/淘宝</el-button>
 					<el-button size="mini" @click="toLogin('red')" :loading="redLoading">小红书</el-button>
 				</el-row>
-				<!-- <el-divider content-position="left">
-					同时下载量
-					<el-popover placement="bottom" popper-class="popper-open" trigger="hover" content="同时下载量过多,可能会触发平台拦截">
+				<el-divider content-position="left">
+					页面滚动速度
+					<el-popover placement="bottom" popper-class="popper-open" trigger="hover" content="默认500ms,本地网路访问速度快可选择短时间,时间越长处理任务的时间也越长">
 						<i class="el-icon-info" slot="reference" style="margin-left: 10px; color: #F56C6C;"></i>
 					</el-popover>
 				</el-divider>
 				<el-row style="text-align: center;">
-					<el-radio-group v-model="numType">
-					    <el-radio :label="1">1个</el-radio>
-					    <el-radio :label="2">2个</el-radio>
-					    <el-radio :label="3">3个</el-radio>
-					    <el-radio :label="4">4个</el-radio>
-					</el-radio-group>
-				</el-row> -->
+					<el-select v-model="pageMs" placeholder="请选择时间" size="mini" style="width: 100px; margin-right: 5px;">
+						<el-option :value="400"></el-option>
+						<el-option :value="500"></el-option>
+						<el-option :value="600"></el-option>
+						<el-option :value="700"></el-option>
+						<el-option :value="800"></el-option>
+						<el-option :value="900"></el-option>
+						<el-option :value="1000"></el-option>
+					</el-select>ms
+				</el-row>
 				<el-divider content-position="left">
 					浏览器版本 
 					<el-popover placement="bottom" popper-class="popper-open" trigger="hover" content="win10以下版本(不含win10),请使用兼容版本的浏览器">
@@ -181,6 +185,35 @@
 				<el-button type="primary" @click="saveSetting" :loading="saveLoading">保存设置</el-button>
 			</span>
 		</el-dialog>
+		
+		<!-- 开发者模式 -->
+		<el-dialog title="开发者模式" :visible.sync="developerModal" width="400px" :close-on-click-modal="false" :close-on-press-escape="false">
+			<div>
+				<p style="text-align: center; color: #F56C6C;">开发者参数设置,软件退出后会重置</p>
+				<p style="text-align: center; color: #F56C6C;">(无头模式:true|网络连接:networkidle2)</p>
+				<el-divider content-position="left">
+					无头模式
+				</el-divider>
+				<el-row style="text-align: center;">
+					<el-radio-group v-model="headless">
+					    <el-radio :label="1">true</el-radio>
+					    <el-radio :label="2">false</el-radio>
+					</el-radio-group>
+				</el-row>
+				<el-divider content-position="left">网络连接</el-divider>
+				<el-row style="text-align: center;">
+					<el-radio-group v-model="waitUntil">
+						<el-radio style="margin-bottom: 20px;" label="load">load</el-radio>
+						<el-radio style="margin-bottom: 20px;" label="domcontentloaded">domcontentloaded</el-radio>
+						<el-radio style="margin-bottom: 20px;" label="networkidle0">networkidle0</el-radio>
+						<el-radio style="margin-bottom: 20px;" label="networkidle2">networkidle2</el-radio>
+					</el-radio-group>
+				</el-row>
+			</div>
+			<span slot="footer" class="dialog-footer">
+				<el-button type="primary" @click="saveDevelop" :loading="saveDevelopLoading">保存设置</el-button>
+			</span>
+		</el-dialog>
 
 	</div>
 </template>
@@ -208,8 +241,8 @@
 				boot: false, // 开机启动
 				closeModel: false,
 				closeType: 2,
-				numType: 1,
 				versionType: 2,
+				pageMs: 500,
 				isRemember:true,
 				//
 				productName: pjson.softInfo.softName,
@@ -256,6 +289,11 @@
 				redLoading: false,
 				cacheLoading: false,
 				saveLoading: false,
+				
+				saveDevelopLoading: false,
+				developerModal: false,
+				headless: 1,
+				waitUntil: 'networkidle2'
 			}
 		},
         props: {
@@ -441,7 +479,7 @@
 						type: 'warning'
 					}).then(() => {
 						this.$utils.setStorage('closeType', this.closeType);
-						// this.$utils.setStorage('numType', this.numType);
+						this.$utils.setStorage('pageMs', this.pageMs);
 						this.$utils.setStorage('versionType', this.versionType);
 						this.$utils.setStorage('isRemember', true)
 						ipcRenderer.send('boot', this.boot);
@@ -454,7 +492,7 @@
 					});
 				}else{
 					this.$utils.setStorage('closeType', this.closeType);
-					// this.$utils.setStorage('numType', this.numType);
+					this.$utils.setStorage('pageMs', this.pageMs);
 					this.$utils.setStorage('versionType', this.versionType);
 					this.$utils.setStorage('isRemember', true)
 					ipcRenderer.send('boot', this.boot);
@@ -464,6 +502,16 @@
 					}, 800)
 				}
 			},
+			// 保存开发者设置
+			saveDevelop(){
+				this.saveDevelopLoading = true;
+				this.$utils.setStorage('headless', this.headless);
+				this.$utils.setStorage('waitUntil', this.waitUntil);
+				setTimeout(() => {
+					this.saveDevelopLoading = false;
+					this.developerModal = false;
+				}, 800)
+			},
 			// 
 			getAdv() {
 				// 非会员广告接口
@@ -754,17 +802,41 @@
 					this.saveLoading = false;
 					// 获取设置
 					let closeType = this.$utils.getStorage('closeType');
-					// let numType = this.$utils.getStorage('numType');
+					let pageMs = this.$utils.getStorage('pageMs');
 					let versionType = this.$utils.getStorage('versionType');
 					if(closeType){
 						this.closeType = closeType;
 					}
-					// if(numType){
-					// 	this.numType = numType;
-					// }
+					if(pageMs){
+						this.pageMs = pageMs;
+					}
 					if(versionType){
 						this.versionType = versionType;
 					}
+				} else if (e == 'developer'){ //开发者模式
+					let password = '9d0b17e04db20927047de3d09152db0f'; //默认密钥
+					this.$http.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';
+					this.$http.get(pjson.softInfo.downloadPrefix + '/' + pjson.name + "/developer.json?"+Math.random()).then((response) => {
+						let getResult = response.data || '';
+						if(getResult && typeof(response.data) == 'string'){
+							password = getResult;
+						}
+					}).catch(function(error){
+						console.log(error);
+					});
+					this.$prompt('请输入开发者密钥:', '提示', {
+					  confirmButtonText: '确定',
+					  cancelButtonText: '取消',
+					  inputPlaceholder: '请联系软件底部企业微信客服咨询使用',
+					}).then(({ value }) => {
+						if(value == password){
+							this.developerModal = true;
+						}else{
+							this.$message.error('密钥错误,已退出');
+						}
+					}).catch(() => {      
+					
+					});
 				}
 			},
 		},

+ 76 - 21
src/renderer/components/home.vue

@@ -338,6 +338,8 @@
 	import puppeteer from 'puppeteer-extra'
 	const StealthPlugin = require('puppeteer-extra-plugin-stealth');
 	const listNameArr = ['alibaba','jd','tmall','tb','red','aliguoji','acaigou','amazon', '' ,'common'];
+	// const headless = true;
+	// const waitUntil = 'networkidle2';
 	
 	let separator = '';
 	if (os.platform == 'linux') {
@@ -480,6 +482,11 @@
 					this.$utils.setStorage('versionType', 2);
 				}
 			}
+			
+			// 初始化开发者设置
+			this.$utils.setStorage('headless', 1);
+			this.$utils.setStorage('waitUntil', 'networkidle2');
+			
 		},
 		methods: {
 			// 实时获取浏览器路径
@@ -491,6 +498,36 @@
 				}
 				return chromePath;
 			},
+			// 实时获取页面滚动加载时间
+			initMs(){
+				let pageMs = this.$utils.getStorage('pageMs');
+				if(pageMs){
+					return Number(pageMs);
+				}else{
+					return 500;
+				}
+			},
+			// 实时获取淘宝的开发者设置
+			initDevelop(){
+				let develop = {
+					headless: true,
+					waitUntil: 'networkidle2'
+				};
+				let n1 = this.$utils.getStorage('headless');
+				let n2 = this.$utils.getStorage('waitUntil');
+				if(n1){
+					if(n1 == 1){
+						develop.headless = true;
+					}else if(n1 == 2){
+						develop.headless = false;
+					}
+				}
+				if(n2){
+					develop.waitUntil = n2;
+				}
+				
+				return develop;
+			},
 			// 删除文件夹内容
 			deleteAll(folderPath, flag) {
 				if (fs.existsSync(folderPath)) {
@@ -831,14 +868,17 @@
 						browserName = 'tbBrowser';
 					}
 					
+					let headless = true;
+					headless = this.initDevelop().headless;
 					this[browserName] = await puppeteer.launch({
+						headless: headless,
 						executablePath: this.initPath(),
 						userDataDir: userDataDir, 
 						args: [
 							'--start-maximized',
 							'--no-sandbox',
 							'--disable-setuid-sandbox',
-							'--disable-blink-features=AutomationControlled',
+							'--disable-blink-features=AutomationControlled'
 						]
 					});
 					
@@ -1014,6 +1054,7 @@
 							
 							let num = Math.ceil(scrollHeight / cHeight);
 							let start = -1;
+							let scrollTime = this.initMs();
 							let scrollInt = setInterval(async() => {
 								start ++;
 								await page.evaluate((start) => {
@@ -1030,7 +1071,7 @@
 									resolve(true);
 									this.loading = false;
 								}
-							}, 300);
+							}, scrollTime);
 							
 						}catch(e){
 							urlInfo.status = '5';
@@ -1100,7 +1141,10 @@
 							// 	userDataDir: os.tmpdir() + separator + 'chrome-data-capture', 
 							// });
 							const page = await browser.newPage();
-							await page.goto(urlInfo.url, {waitUntil : 'networkidle2'});
+							
+							let waitUntil = 'networkidle2';
+							waitUntil = this.initDevelop().waitUntil;
+							await page.goto(urlInfo.url, {waitUntil : waitUntil});
 							
 							if(urlInfo.title){
 								if (fs.existsSync(this.downloadDir + separator + pjson.softInfo.softName + separator + urlInfo.title)) {
@@ -1124,6 +1168,10 @@
 							
 							let num = Math.ceil(scrollHeight / cHeight);
 							let start = -1;
+							let scrollTime = this.initMs();
+							if(scrollTime < 800 && this.menuIndex == '6'){
+								scrollTime = 800;
+							}
 							let scrollInt = setInterval(async() => {
 								start ++;
 								if(this.settingArr.indexOf('detailImg') > -1){
@@ -1156,7 +1204,7 @@
 									urlInfo.status = '4';
 									resolve(true);
 								}
-							}, 500);
+							}, scrollTime);
 							
 						}catch(e){
 							urlInfo.status = '5';
@@ -1560,19 +1608,9 @@
 									}
 								}
 							});
-							
-							await page.goto(urlInfo.url, {waitUntil : 'networkidle0'});
-							
-							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); // 生成页面标题对应的文件夹
-							}
+							let waitUntil = 'networkidle2';
+							waitUntil = this.initDevelop().waitUntil;
+							await page.goto(urlInfo.url, {waitUntil : waitUntil});
 							
 							if(this.settingArr.indexOf('video') > -1){ // 用户选择下载视频的时候才会触发
 								//鼠标放在主图第一张,生成视频
@@ -1606,10 +1644,23 @@
 								let scrollHeight = document.body.scrollHeight;
 								return {'scrollHeight': scrollHeight, 'cHeight': cHeight}
 							});
+							
+							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); // 生成页面标题对应的文件夹
+							}
+							
 							let scrollHeight = pageInfo.scrollHeight;
 							let cHeight = pageInfo.cHeight;
 							let num = Math.ceil(scrollHeight / cHeight);
 							let start = -1;
+							let scrollTime = this.initMs();
 							let scrollInt = setInterval(async() => {
 								start ++;
 								if(this.settingArr.indexOf('commentImg') > -1 && this.settingArr.indexOf('detailImg') < 0){ // 选择了评论图没选择详情图
@@ -1783,8 +1834,12 @@
 										return outObj;
 									}, authority, this.execNum);
 				
-									if(imgInfo.video.length == 0 && responseVideo.length > 0){
-										imgInfo.video = responseVideo;
+									if(responseVideo.length > 0){
+										for(let l=0; l<responseVideo.length; l++){
+											if(imgInfo.video.indexOf(responseVideo[l]) == -1){
+												imgInfo.video.push(responseVideo[l]);
+											}
+										}
 									}
 									
 									if(this.settingArr.indexOf('mainImg') > -1){
@@ -1916,7 +1971,7 @@
 									resolve(true);
 									this.loading = false;
 								}
-							}, 500);
+							}, scrollTime);
 						}catch(e){
 							reject(e);
 							this.showError(e);
@@ -1988,7 +2043,7 @@
 						}
 					}
 					// 视频
-					let arr5 = document.querySelectorAll('video.lib-video');
+					let arr5 = document.querySelectorAll('video');
 					for(let i=0; i< arr5.length; i++){
 						if(outObj.video.indexOf(arr5[i].src) == -1){
 							if(!authority && i < execNum){