|
@@ -227,7 +227,7 @@
|
|
<div>
|
|
<div>
|
|
<el-form label-position="right" label-width="80px" :rules="rules" :model="formData" ref="formData">
|
|
<el-form label-position="right" label-width="80px" :rules="rules" :model="formData" ref="formData">
|
|
<el-form-item label="目录名称" prop="title">
|
|
<el-form-item label="目录名称" prop="title">
|
|
- <el-input v-model="formData.title" placeholder="为空则默认使用网页标题前60个字符"></el-input>
|
|
|
|
|
|
+ <el-input v-model="formData.title" placeholder="为空则默认使用网页标题前50个字符"></el-input>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="网页链接" prop="url">
|
|
<el-form-item label="网页链接" prop="url">
|
|
<el-input type="textarea" :rows="10" v-if="menuIndex < 10" :placeholder="'请输入网址链接(例:' + exampleUrl[menuIndex-1] + ')'" v-model="formData.url"></el-input>
|
|
<el-input type="textarea" :rows="10" v-if="menuIndex < 10" :placeholder="'请输入网址链接(例:' + exampleUrl[menuIndex-1] + ')'" v-model="formData.url"></el-input>
|
|
@@ -320,7 +320,7 @@
|
|
},
|
|
},
|
|
rules:{ //
|
|
rules:{ //
|
|
title: [
|
|
title: [
|
|
- { min: 0, max: 60, message: '不能超过 60 个字符', trigger: 'blur' },
|
|
|
|
|
|
+ { min: 0, max: 50, message: '不能超过 50 个字符', trigger: 'blur' },
|
|
{ pattern: /^[^\\/:*?"<>|]*$/, message: '标题中不能包含 \\ / : * ? " < > |', trigger: 'blur' }
|
|
{ pattern: /^[^\\/:*?"<>|]*$/, message: '标题中不能包含 \\ / : * ? " < > |', trigger: 'blur' }
|
|
],
|
|
],
|
|
url: [
|
|
url: [
|
|
@@ -1528,34 +1528,89 @@
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
- let pageInfo = await page.evaluate(() => {
|
|
|
|
- let cHeight = document.documentElement.clientHeight;
|
|
|
|
- let scrollHeight = document.body.scrollHeight;
|
|
|
|
- return {'scrollHeight': scrollHeight, 'cHeight': cHeight}
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- //鼠标放在主图第一张,生成视频
|
|
|
|
- const elementHandle = await page.$('li[class*=thumbnail--]');
|
|
|
|
-
|
|
|
|
- if(elementHandle){
|
|
|
|
- const classListProperty = await elementHandle.getProperty('classList');
|
|
|
|
- const classList = await classListProperty.jsonValue();
|
|
|
|
- const classesArray = Object.values(classList);
|
|
|
|
- const allClasses = classesArray.join('.');
|
|
|
|
- if(allClasses && allClasses.indexOf('active-') < 0){
|
|
|
|
- await page.hover('li.'+allClasses);
|
|
|
|
|
|
+ if(this.settingArr.indexOf('video') > -1){ // 用户选择下载视频的时候才会触发
|
|
|
|
+ //鼠标放在主图第一张,生成视频
|
|
|
|
+ const elementHandle = await page.$('li[class*=thumbnail--]');
|
|
|
|
+ if(elementHandle){
|
|
|
|
+ const classListProperty = await elementHandle.getProperty('classList');
|
|
|
|
+ const classList = await classListProperty.jsonValue();
|
|
|
|
+ const classesArray = Object.values(classList);
|
|
|
|
+ const allClasses = classesArray.join('.');
|
|
|
|
+ if(allClasses && allClasses.indexOf('active-') < 0){
|
|
|
|
+ await page.hover('li.'+allClasses);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- let m1 = document.querySelectorAll('img[class^=PicGallery--thumbnailPic--]');
|
|
|
|
- let m2 = document.querySelectorAll('img[class*=thumbnailPic--]');
|
|
|
|
- if(document.querySelector('iframe') && m1.length == 0 && m2.length == 0){ // 出现弹窗而且没有主图,判断为拦截模式
|
|
|
|
- await tbBrowser.close();
|
|
|
|
- urlInfo.status = '6';
|
|
|
|
- resolve(true);
|
|
|
|
- this.loading = false;
|
|
|
|
|
|
+ let iframeElementHandle = await page.$('iframe');
|
|
|
|
+ if(iframeElementHandle){
|
|
|
|
+ let m1 = await page.$('img[class^=PicGallery--thumbnailPic--]');
|
|
|
|
+ let m2 = await page.$('img[class*=thumbnailPic--]');
|
|
|
|
+ if(!m1 && !m2){ // 出现弹窗而且没有主图,判断为拦截模式
|
|
|
|
+ /** 手动滑动过滤拦截验证拦截 **/
|
|
|
|
+ const iframe = await iframeElementHandle.contentFrame();
|
|
|
|
+ const handle = await iframe.$('.btn_slide'); //滑块
|
|
|
|
+ const handle2 = await iframe.$('.nc_scale'); //轨道
|
|
|
|
+ if(handle && handle2){
|
|
|
|
+ const box = await handle.boundingBox();
|
|
|
|
+ const boxEnd = await handle2.boundingBox();
|
|
|
|
+ const center = {
|
|
|
|
+ x: box.x + box.width / 2,
|
|
|
|
+ y: box.y + box.height / 2
|
|
|
|
+ };
|
|
|
|
+ const centerEnd = {
|
|
|
|
+ x: center.x + boxEnd.width,
|
|
|
|
+ y: box.y + box.height / 2
|
|
|
|
+ };
|
|
|
|
+ await page.mouse.move(center.x, center.y);
|
|
|
|
+ await page.mouse.down();
|
|
|
|
+ await page.mouse.move(centerEnd.x, centerEnd.y, { steps: 80 });
|
|
|
|
+ await page.mouse.up();
|
|
|
|
+ await page.waitForTimeout(500);
|
|
|
|
+
|
|
|
|
+ const nocaptcha = await iframe.$('#nocaptcha');
|
|
|
|
+ if(nocaptcha){ // 第一次滑动未通过再次点击验证
|
|
|
|
+ await nocaptcha.click();
|
|
|
|
+ await page.waitForTimeout(500);
|
|
|
|
+
|
|
|
|
+ const reHandle = await iframe.$('.btn_slide'); //滑块
|
|
|
|
+ const reHandle2 = await iframe.$('.nc_scale'); //轨道
|
|
|
|
+ if(reHandle && reHandle2){
|
|
|
|
+ const box = await reHandle.boundingBox();
|
|
|
|
+ const boxEnd = await reHandle2.boundingBox();
|
|
|
|
+ const center = {
|
|
|
|
+ x: box.x + box.width / 2,
|
|
|
|
+ y: box.y + box.height / 2
|
|
|
|
+ };
|
|
|
|
+ const centerEnd = {
|
|
|
|
+ x: center.x + boxEnd.width,
|
|
|
|
+ y: box.y + box.height / 2
|
|
|
|
+ };
|
|
|
|
+ await page.mouse.move(center.x, center.y);
|
|
|
|
+ await page.mouse.down();
|
|
|
|
+ await page.mouse.move(centerEnd.x, centerEnd.y, { steps: 80 });
|
|
|
|
+ await page.mouse.up();
|
|
|
|
+ await page.waitForTimeout(500);
|
|
|
|
+
|
|
|
|
+ let iframeElementHandle2 = await page.$('iframe');
|
|
|
|
+ if(iframeElementHandle2){
|
|
|
|
+ await tbBrowser.close();
|
|
|
|
+ urlInfo.status = '6';
|
|
|
|
+ resolve(true);
|
|
|
|
+ this.loading = false;
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ 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 scrollHeight = pageInfo.scrollHeight;
|
|
let cHeight = pageInfo.cHeight;
|
|
let cHeight = pageInfo.cHeight;
|
|
let num = Math.ceil(scrollHeight / cHeight);
|
|
let num = Math.ceil(scrollHeight / cHeight);
|
|
@@ -1583,7 +1638,7 @@
|
|
num = 0;
|
|
num = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if(this.settingArr.indexOf('detailImg') > -1){
|
|
|
|
|
|
+ if(this.settingArr.indexOf('detailImg') > -1){ // 选择详情图
|
|
let scrollHeight2 = await page.evaluate((start) => {
|
|
let scrollHeight2 = await page.evaluate((start) => {
|
|
let scrollHeight = document.body.scrollHeight;
|
|
let scrollHeight = document.body.scrollHeight;
|
|
let cHeight = document.documentElement.clientHeight;
|
|
let cHeight = document.documentElement.clientHeight;
|
|
@@ -1604,7 +1659,30 @@
|
|
num = 0;
|
|
num = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ if(this.settingArr.indexOf('skuImg') > -1 && this.settingArr.indexOf('commentImg') < 0 && this.settingArr.indexOf('detailImg') < 0){ // 选择了sku图片没选择评论和详情
|
|
|
|
+ let scrollHeight2 = await page.evaluate((start) => {
|
|
|
|
+ let scrollHeight = document.body.scrollHeight;
|
|
|
|
+ let cHeight = document.documentElement.clientHeight;
|
|
|
|
+ let obj = document.querySelector('div[class^=SkuContent--]');
|
|
|
|
+ if(obj && obj.getBoundingClientRect().bottom < 500){
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+ window.scrollTo({
|
|
|
|
+ top: cHeight * start,
|
|
|
|
+ behavior: "smooth"
|
|
|
|
+ });
|
|
|
|
+ return scrollHeight;
|
|
|
|
+ }, start);
|
|
|
|
+
|
|
|
|
+ if(scrollHeight2 > 0){
|
|
|
|
+ num = Math.ceil(scrollHeight2 / cHeight);
|
|
|
|
+ }else{
|
|
|
|
+ num = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(this.settingArr.indexOf('skuImg') < 0 && this.settingArr.indexOf('detailImg') < 0 && this.settingArr.indexOf('commentImg') < 0){ // 没有选择评论图和详情图
|
|
|
|
+ num = 0;
|
|
|
|
+ }
|
|
if(start > num || start > 200){ // 防止页面过长,滚动200次自动停止
|
|
if(start > num || start > 200){ // 防止页面过长,滚动200次自动停止
|
|
urlInfo.status = '3';
|
|
urlInfo.status = '3';
|
|
clearInterval(scrollInt);
|
|
clearInterval(scrollInt);
|
|
@@ -2332,10 +2410,10 @@
|
|
|
|
|
|
// 获取页面标题 - 生成对应的文件夹
|
|
// 获取页面标题 - 生成对应的文件夹
|
|
async getTitle(page, urlInfo){
|
|
async getTitle(page, urlInfo){
|
|
- // 已页面标题作为新建文件夹,保留前60个字
|
|
|
|
|
|
+ // 已页面标题作为新建文件夹,保留前50个字
|
|
let title = await page.title();
|
|
let title = await page.title();
|
|
if(title){
|
|
if(title){
|
|
- title = title.substring(0, 60);
|
|
|
|
|
|
+ title = title.substring(0, 50);
|
|
if(this.containsAnyChar(title, ['\\', '/', ':', '*', '?', '"', '<', '>', '|'])){ //判断是否含有特殊字符
|
|
if(this.containsAnyChar(title, ['\\', '/', ':', '*', '?', '"', '<', '>', '|'])){ //判断是否含有特殊字符
|
|
title = title.replace(/[\\|/|:|*|?|"|<|>||]/g, "");
|
|
title = title.replace(/[\\|/|:|*|?|"|<|>||]/g, "");
|
|
}
|
|
}
|