qiushang 8 kuukautta sitten
vanhempi
commit
6ce21dbb76

+ 1 - 1
package.json

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

+ 1 - 1
src/index.ejs

@@ -2,7 +2,7 @@
 <html>
   <head>
     <meta charset="utf-8">
-    <title>星优图片下载</title>
+    <title>星优图片下载助手</title>
     <% if (htmlWebpackPlugin.options.nodeModules) { %>
       <!-- Add `node_modules/` to global paths so `require` works properly in development -->
       <script>

+ 53 - 7
src/renderer/components/header.vue

@@ -140,7 +140,7 @@
 					<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="同时下载量过多,可能会触发平台拦截">
 						<i class="el-icon-info" slot="reference" style="margin-left: 10px; color: #F56C6C;"></i>
 					</el-popover>
@@ -153,6 +153,18 @@
 					    <el-radio :label="4">4个</el-radio>
 					</el-radio-group>
 				</el-row>
+				<el-divider content-position="left">
+					浏览器版本 
+					<el-popover placement="bottom" popper-class="popper-open" trigger="hover" content="win10以下版本(不含win10),请使用兼容版本的浏览器">
+						<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="versionType">
+					    <el-radio :label="1">兼容版本</el-radio>
+					    <el-radio :label="2">最新版本</el-radio>
+					</el-radio-group>
+				</el-row>
 				<el-divider content-position="left">清理缓存</el-divider>
 				<el-row style="text-align: center;">
 					<el-button size="small" type="primary" @click="clearCache()" :loading="cacheLoading">点击清除软件缓存</el-button>
@@ -166,7 +178,7 @@
 				</el-row>
 			</div>
 			<span slot="footer" class="dialog-footer">
-				<el-button type="primary" @click="saveSetting">保存设置</el-button>
+				<el-button type="primary" @click="saveSetting" :loading="saveLoading">保存设置</el-button>
 			</span>
 		</el-dialog>
 
@@ -197,6 +209,7 @@
 				closeModel: false,
 				closeType: 2,
 				numType: 2,
+				versionType: 2,
 				isRemember:true,
 				//
 				productName: pjson.softInfo.softName,
@@ -242,6 +255,7 @@
 				tbLoading: false,
 				redLoading: false,
 				cacheLoading: false,
+				saveLoading: false,
 			}
 		},
         props: {
@@ -417,11 +431,38 @@
 			},
 			// 保存设置
 			saveSetting(){
-				this.$utils.setStorage('closeType', this.closeType);
-				this.$utils.setStorage('numType', this.numType);
-				this.$utils.setStorage('isRemember', true)
-				ipcRenderer.send('boot', this.boot);
-				this.settingModal = false;
+				this.saveLoading = true;
+				let systemVersion = 10;
+				if(os.release() && os.release().indexOf('.')){
+					systemVersion = Number(os.release().split('.')[0]);
+				}
+				if(systemVersion < 10 && this.versionType == 2){ // win10以下版本,而且选择了最新版本时提示
+					this.$confirm("检测到当前Windows系统不兼容最新版浏览器,是否继续选择最新版?", '提示', {
+						type: 'warning'
+					}).then(() => {
+						this.$utils.setStorage('closeType', this.closeType);
+						this.$utils.setStorage('numType', this.numType);
+						this.$utils.setStorage('versionType', this.versionType);
+						this.$utils.setStorage('isRemember', true)
+						ipcRenderer.send('boot', this.boot);
+						setTimeout(() => {
+							this.saveLoading = false;
+							this.settingModal = false;
+						}, 800)
+					}).catch(() => {
+						this.saveLoading = false;
+					});
+				}else{
+					this.$utils.setStorage('closeType', this.closeType);
+					this.$utils.setStorage('numType', this.numType);
+					this.$utils.setStorage('versionType', this.versionType);
+					this.$utils.setStorage('isRemember', true)
+					ipcRenderer.send('boot', this.boot);
+					setTimeout(() => {
+						this.saveLoading = false;
+						this.settingModal = false;
+					}, 800)
+				}
 			},
 			// 
 			getAdv() {
@@ -710,15 +751,20 @@
 					this.$emit('update-soft', true);
 			    } else if (e === 'setting'){
 					this.settingModal = true;
+					this.saveLoading = false;
 					// 获取设置
 					let closeType = this.$utils.getStorage('closeType');
 					let numType = this.$utils.getStorage('numType');
+					let versionType = this.$utils.getStorage('versionType');
 					if(closeType){
 						this.closeType = closeType;
 					}
 					if(numType){
 						this.numType = numType;
 					}
+					if(versionType){
+						this.versionType = versionType;
+					}
 				}
 			},
 		},

+ 95 - 13
src/renderer/components/home.vue

@@ -97,18 +97,20 @@
 										<span v-if="menuIndex == '10'">网页 - </span>
 										图片下载
 									</h3>
+									<el-link v-if="menuIndex == '5'" :underline="false" type="danger" style="text-align: center; font-size: 12px;">
+										仅支持win10及以上系统,浏览器请选择最新版本
+									</el-link>
+									
 									<!-- <el-link v-if="menuIndex == '3' || menuIndex == '4'" :underline="false" type="danger" style="text-align: center; font-size: 12px;">
 										(需登录{{menuIndex == '3' ? '天猫' : '淘宝'}}账号后才能下载)
 									</el-link>
 									<el-link v-if="menuIndex == '2'" :underline="false" type="danger" style="text-align: center; font-size: 12px;">
 										(需登录京东账号后才能下载)
-									</el-link> -->
-									<!-- <el-link v-if="menuIndex == '10'" :underline="false" type="info" style="text-align: center; font-size: 12px;">
+									</el-link>
+									<el-link v-if="menuIndex == '10'" :underline="false" type="info" style="text-align: center; font-size: 12px;">
 										 (非会员功能,仅提供试用)
 									</el-link> -->
-									
 								</div>
-								<!-- <el-link v-if="((menuIndex == '3' || menuIndex == '4') && tbStatus == 3) || (menuIndex == '2' && jdStatus == 3)" :underline="false" type="danger" style="text-align: center; font-size: 12px;">登录完成后请关闭浏览器</el-link> -->
 							</el-row>
 							
 							<div style="padding: 15px 0 20px;">
@@ -140,6 +142,16 @@
 										</el-popover>
 									</div>
 									
+									<!-- 阿里巴巴账号 -->
+									<template v-if="menuIndex == '1'">
+										<div>
+											<el-tag type="info" size="mini" v-if="alibabaStatus == 1">未检测</el-tag>
+											<el-tag type="success" size="mini" v-if="alibabaStatus == 2">阿里巴巴账号已登录</el-tag>
+											<el-link type="danger" style="text-decoration: underline;" v-if="alibabaStatus == 3" :underline="false" @click="loginUrl('https://www.1688.com')">未登录,点击登录阿里巴巴账号</el-link>
+											<el-button size="mini" type="warning" :loading="checkLoading" style="margin-left: 10px;" :disabled='alibabaStatus == 2' @click="checkAlibabaLogin">检测登录状态</el-button>
+										</div>
+									</template>
+									
 									<!-- 天猫/淘宝 -->
 									<template v-if="menuIndex == '3' || menuIndex == '4'">
 										<div>
@@ -373,6 +385,7 @@
 				tbStatus: 1, // 1、未检测 2、已经登录 3、未登录 
 				jdStatus: 1, // 1、未检测 2、已经登录 3、未登录 
 				redStatus: 1, //同上
+				alibabaStatus: 1, //同上上
 				execLimit: 2,
 				execNum: 3, // 限制5张
 				
@@ -446,11 +459,25 @@
 					shell.openExternal(url);
 				});
 			});
+			
+			// 判断系统版本 低于10使用兼容模式
+			if(os.release() && os.release().indexOf('.') > -1){
+				let systemVersion = Number(os.release().split('.')[0]);
+				if(systemVersion < 10){ // 低于win10,软件打开时候浏览器设置为兼容版
+					this.$utils.setStorage('versionType', 1);
+				}else{
+					this.$utils.setStorage('versionType', 2);
+				}
+			}
 		},
 		methods: {
 			// 实时获取浏览器路径
 			initPath(){
 				let chromePath = puppeteer.executablePath().replace('win32-1', 'win64-1');
+				let versionType = this.$utils.getStorage('versionType');
+				if(versionType && versionType == 1){
+					chromePath = chromePath.replace('chrome-win', 'chrome7');
+				}
 				return chromePath;
 			},
 			// 删除文件夹内容
@@ -1091,6 +1118,60 @@
 				
 			},
 			
+			// 检查天猫淘宝登录状态
+			checkAlibabaLogin(){
+				this.checkLoading = true;
+				this.alibabaStatus = 1;
+				return new Promise((resolve, reject) => {
+					(async () => {
+						try{
+							if(this.loginBrowser){
+								await this.loginBrowser.close();
+								this.loginBrowser = null;
+							}
+							this.loginBrowser = await puppeteer.launch({
+								executablePath: this.initPath(),
+								args: ['--window-size=1280,800'],
+								userDataDir: os.tmpdir() + separator + 'chrome-data-capture', 
+							});
+							const page = await this.loginBrowser.newPage();
+							await page.setViewport({ width: 1280, height: 800 });
+							let testUrl = 'https://www.1688.com';
+							await page.goto(testUrl, {waitUntil : 'networkidle2'});
+							
+							let loginInfo = await page.evaluate(() => {
+								let navTags = document.querySelector('.site-nav-sign a');
+								let userTags = document.querySelector('.site-nav-user a');
+								
+								if(navTags && navTags.innerHTML.indexOf('登录') > -1){
+									return false;
+								}else if(userTags){
+									return true;
+								}else{
+									return false;
+								}
+							});
+							
+							if(loginInfo){
+								this.tbStatus = 2;
+							}else{
+								this.tbStatus = 3;
+							}
+							
+							resolve(this.tbStatus);
+							this.checkLoading = false;
+							await this.loginBrowser.close();
+							this.loginBrowser = null;
+						}catch(e){
+							this.checkLoading = false;
+							reject(3);
+							this.showError(e);
+						}
+					})();
+				});
+				
+			},
+			
 			// 1 - 阿里巴巴下载
 			async alibabaDownload(urlInfo, browser){
 				let task = await new Promise((resolve,reject) =>{
@@ -2107,24 +2188,25 @@
 								await this.loginBrowser.close();
 								this.loginBrowser = null;
 							}
+							puppeteer.use(StealthPlugin());
 							this.loginBrowser = await puppeteer.launch({
 								executablePath: this.initPath(),
-								args: ['--window-size=1280,800'],
 								userDataDir: os.tmpdir() + separator + 'chrome-data-capture', 
+								args: [
+									'--start-maximized',
+									'--no-sandbox',
+									'--disable-setuid-sandbox',
+									'--disable-blink-features=AutomationControlled',
+									'--window-size=1280,800'
+								],
 							});
 							const page = await this.loginBrowser.newPage();
 							await page.setViewport({ width: 1280, height: 800 });
-							
-							await page.evaluateOnNewDocument(() => {
-							    const newProto = navigator.__proto__;
-								delete newProto.webdriver;
-								navigator.__proto__ = newProto;
-							});
-							
 							let testUrl = "https://www.xiaohongshu.com";
 							await page.goto(testUrl, {waitUntil : 'networkidle2'});
-							let loginContainer = await page.$$('.login-container');
+							
 							let loginBtn = await page.$$('#login-btn');
+							let loginContainer = await page.$$('.login-container');
 							if(loginContainer.length > 0 || loginBtn.length > 0){
 								this.redStatus = 3; //未登录
 							}else{

+ 3 - 0
src/renderer/components/update.vue

@@ -101,6 +101,9 @@
 				<el-collapse-item title="10、实况(Live)图下载的不全" name="10">
 					<div>实况(Live)图下载的格式为mp4,且设置同时下载任务量必须为1个,点击软件右上角菜单按钮,选择软件设置-同时下载任务量-1个</div>
 				</el-collapse-item>
+				<el-collapse-item title="11、浏览器版本如何选择和使用?" name="11">
+					<div>点击软件右上角菜单按钮,选择软件设置-浏览器版本,兼容版本适合win10以下系统使用,win10及以上建议使用最新版本,小红书下载仅支持win10及以上系统且浏览器为最新版本。</div>
+				</el-collapse-item>
 				<!-- <el-collapse-item title="10、为什么每次打开软件,需要重新登录平台账号" name="10">
 					<div>为了考虑安全性,软件在退出后会清空所有的缓存和账号信息,因此每次重新打开软件需要要求用户重新登录各个平台账号。</div>
 				</el-collapse-item> -->