|
@@ -0,0 +1,175 @@
|
|
|
+/** 900行,任务执行完成之后 **/
|
|
|
+let tbLogin = true,jdLogin = true,redLogin = true;
|
|
|
+switch(this.menuIndex){
|
|
|
+ case '2': // 京东
|
|
|
+ if(this.jdStatus == 3){
|
|
|
+ jdLogin = false;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case '3': // 天猫
|
|
|
+ case '4': // 淘宝
|
|
|
+ if(this.tbStatus == 3){
|
|
|
+ tbLogin = false;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case '5': // 小红书
|
|
|
+ if(this.redStatus == 3){
|
|
|
+ redLogin = false;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/**淘宝验证码滑动拦截代码**/
|
|
|
+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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+/**京东-旧规格**/
|
|
|
+
|
|
|
+if (response.headers()['content-type'] && response.headers()['content-type'].startsWith('image/')) {
|
|
|
+ let regex = /^https:\/\/img[0-9]+.360buyimg.com\/n/;
|
|
|
+ if(regex.exec(response.url())){ // 匹配符合规则的图片路径
|
|
|
+ let skuReg = /\/n[0-9]+\/s(60|40)x(80|40)_jfs\//;
|
|
|
+ if(response.url().match(skuReg) && this.settingArr.indexOf('skuImg') > -1){ // sku图片
|
|
|
+ let replaceStr = '/n1/s800x800_jfs/';
|
|
|
+ if(response.url().match(/\/n[0-9]+\/s60x80_jfs\//)){
|
|
|
+ replaceStr = '/n1/s750x1000_jfs/';
|
|
|
+ }
|
|
|
+ let skuImgUrl = response.url().replace(skuReg, replaceStr).replace('.avif', '');
|
|
|
+ if(response.url().match(skuReg))
|
|
|
+ jdImgInfo.skuImg.push(skuImgUrl);
|
|
|
+
|
|
|
+ let fileName = skuImgUrl.split('/').pop();
|
|
|
+ if(fileName){
|
|
|
+ let queryIndex = fileName.indexOf('?');
|
|
|
+ if (queryIndex !== -1) {
|
|
|
+ fileName = fileName.substr(0, queryIndex);
|
|
|
+ }
|
|
|
+ if (!fs.existsSync(urlInfo.newPath + '\\sku图')) {
|
|
|
+ fs.mkdirSync(urlInfo.newPath + '\\sku图');
|
|
|
+ }
|
|
|
+ let outputPath = urlInfo.newPath + '\\sku图\\' + fileName;
|
|
|
+ skuNum ++;
|
|
|
+ if(!authority && skuNum <= this.execNum){
|
|
|
+ await this.downloadImage(skuImgUrl, outputPath, urlInfo);
|
|
|
+ }
|
|
|
+ if(authority){
|
|
|
+ await this.downloadImage(skuImgUrl, outputPath, urlInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ let reg = /\/n[0-9]+\/jfs\//;
|
|
|
+ let reg2 = /\/n[0-9]+\/s(54|50)x(54|66)_jfs\//;
|
|
|
+ if(response.url().match(reg) || response.url().match(reg2)){ // 主图
|
|
|
+ let replaceStr = '/n1/s800x800_jfs/';
|
|
|
+ if(response.url().match(/\/n[0-9]+\/s50x66_jfs\//)){
|
|
|
+ replaceStr = '/n1/s750x1000_jfs/';
|
|
|
+ }
|
|
|
+ let mainImgUrl = response.url().replace(reg, replaceStr).replace(reg2, replaceStr).replace('.avif', '');
|
|
|
+ jdImgInfo.mainImg.push(mainImgUrl);
|
|
|
+
|
|
|
+ let fileName = mainImgUrl.split('/').pop();
|
|
|
+ if(fileName){
|
|
|
+ let queryIndex = fileName.indexOf('?');
|
|
|
+ let queryIndex2 = fileName.indexOf('!');
|
|
|
+ if (queryIndex !== -1) {
|
|
|
+ fileName = fileName.substr(0, queryIndex);
|
|
|
+ }
|
|
|
+ if (queryIndex2 !== -1) {
|
|
|
+ fileName = fileName.substr(0, queryIndex2);
|
|
|
+ }
|
|
|
+ if (!fs.existsSync(urlInfo.newPath + '\\主图')) {
|
|
|
+ fs.mkdirSync(urlInfo.newPath + '\\主图');
|
|
|
+ }
|
|
|
+ let outputPath = urlInfo.newPath + '\\主图\\' + fileName;
|
|
|
+ mainNum ++;
|
|
|
+ if(!authority && mainNum <= this.execNum){
|
|
|
+ await this.downloadImage(mainImgUrl, outputPath, urlInfo);
|
|
|
+ }
|
|
|
+ if(authority){
|
|
|
+ await this.downloadImage(mainImgUrl, outputPath, urlInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/**小红书旧版不显示视频的时候加载**/
|
|
|
+let noteImg = await page.$$('img[class^=note-slider-img]');
|
|
|
+if(noteImg.length == 0){
|
|
|
+ let refreshImg = await page.$$('.xgplayer-error-refresh');
|
|
|
+ let startImg = await page.$$('.xgplayer-start');
|
|
|
+ console.log(refreshImg, startImg);
|
|
|
+ //点击播放生成视频
|
|
|
+ if(startImg.length > 0){
|
|
|
+ await page.waitForSelector('.xgplayer-start', { visible: true });
|
|
|
+ await page.click('.xgplayer-start');
|
|
|
+ }else{
|
|
|
+ await page.waitForSelector('.xgplayer-error-refresh', { visible: true });
|
|
|
+ await page.click('.xgplayer-error-refresh');
|
|
|
+ await page.click('.xgplayer-error-refresh');
|
|
|
+ await page.click('.xgplayer-error-refresh');
|
|
|
+ }
|
|
|
+}
|