feat: 新增美团脚本
This commit is contained in:
1 parent
07d3e10056
commit
f084e47c58
6 files changed
+58
-8
No files matched your search
@@ -42,13 +42,15 @@ export function runTaskOperationService() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const results: any[] = []
|
const results: any[] = []
|
||||||
for (const item of scriptPaths) {
|
for (let i = 0; i < scriptPaths.length; i++) {
|
||||||
|
const item = scriptPaths[i]
|
||||||
log.info(`Launching script for channel ${item.channel}: ${item.scriptPath}`)
|
log.info(`Launching script for channel ${item.channel}: ${item.scriptPath}`)
|
||||||
const result = await executeScriptServiceInstance.executeScript(item.scriptPath, {
|
const result = await executeScriptServiceInstance.executeScript(item.scriptPath, {
|
||||||
roomType: roomType[item.channel],
|
roomType: roomType[item.channel],
|
||||||
startTime: options.startTime,
|
startTime: options.startTime,
|
||||||
endTime: options.endTime,
|
endTime: options.endTime,
|
||||||
operation: options.operation,
|
operation: options.operation,
|
||||||
|
tabIndex: i,
|
||||||
})
|
})
|
||||||
results.push({
|
results.push({
|
||||||
channel: item.channel,
|
channel: item.channel,
|
||||||
|
|||||||
@@ -91,10 +91,9 @@ const toggleRoomByDateIndex = async (page, container, { roomType, dateIndex, ope
|
|||||||
};
|
};
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
let browser;
|
const browser = await chromium.connectOverCDP('http://127.0.0.1:9222');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
browser = await chromium.connectOverCDP(`http://127.0.0.1:9222`);
|
|
||||||
const context = browser.contexts()[0];
|
const context = browser.contexts()[0];
|
||||||
|
|
||||||
await context.addInitScript(() => {
|
await context.addInitScript(() => {
|
||||||
@@ -102,8 +101,8 @@ const toggleRoomByDateIndex = async (page, container, { roomType, dateIndex, ope
|
|||||||
});
|
});
|
||||||
|
|
||||||
const pages = await context.pages();
|
const pages = await context.pages();
|
||||||
|
const tabIndex = Number(process.env.TAB_INDEX);
|
||||||
const page = pages.length ? pages[0] : await context.newPage();
|
const page = pages.length ? pages[tabIndex] : await context.newPage();
|
||||||
|
|
||||||
await page.goto('https://hotel.fliggy.com/ebooking/hotelBaseInfoUv.htm#/ebk/homeV1');
|
await page.goto('https://hotel.fliggy.com/ebooking/hotelBaseInfoUv.htm#/ebk/homeV1');
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
```html
|
||||||
|
<div class="product-container" data-v-2311e292=""><div class="sub-header" data-v-4ad0f163="" data-v-2311e292=""><div class="product-notice-alert" use-custom-pr-freshs="" data-v-bcd285a2="" data-v-4ad0f163=""><div class="lion-push-notice" eventtype="" extrastyle="" usecustomrsfresh="true" usecustomprfresh="false" data-v-1d6a6128="" data-v-bcd285a2="" style="display: none;"><!----></div><div class="supply-notice" eventtype="" extrastyle="" usecustomrsfresh="true" usecustomprfresh="false" data-v-5445a116="" data-v-bcd285a2="" style="display: none;"><!----></div><div class="lz-announcement lz-announcement-warning lz-announcement-closable hotspot-calendar-notice" source="roomstatus" data-v-1d80a1e6="" data-v-bcd285a2=""><i class="lz-announcement-icon lzicon lzicon-warning-circle"></i><div class="lz-announcement-content"><div class="lz-announcement-title"><span class="notice-desc high-light" data-v-1d80a1e6="">第29届安团家博会-贵阳展将至</span><span class="notice-desc" data-v-1d80a1e6="">,请提前调整好</span><span class="notice-desc high-light" data-v-1d80a1e6="">03月20日至03月22日</span><span class="notice-desc" data-v-1d80a1e6="">房价,确保房量和房态准确,</span><span class="notice-desc" data-v-1d80a1e6="">并及时安排好接单人员</span><span data-v-1d80a1e6=""><a href="javascript:;" class="right-link" data-v-1d80a1e6="">查看其他热点</a></span><div class="notice-actions" data-v-1d80a1e6=""><a href="javascript:;" data-v-1d80a1e6="">立即维护</a></div></div><!----><div class="lz-announcement-close"><i class="lzicon lzicon-close-thick"></i></div></div></div></div><!----><!----><!----><!----><div class="eb-header-container" data-v-4ad0f163="" style="margin-bottom: 12px;"><form class="lz-form lz-form-right lz-form-inline" autocomplete="off" style="display: flex; flex-wrap: wrap;"><div class="lz-form-item lz-form-item-right"><!----><div class="lz-form-item-content"><button class="lz-btn lz-btn-primary" type="button"><!---->新增产品(新)</button><!----><!----></div></div><div class="lz-form-item lz-form-item-right"><!----><div class="lz-form-item-content"><button class="lz-btn lz-btn-primary lz-btn-ghost" type="button"><!---->批量修改销售规则</button><!----><!----></div></div><div class="lz-form-item lz-form-item-right"><!----><div class="lz-form-item-content"><button class="lz-btn lz-btn-primary lz-btn-ghost" type="button"><!----><span style="margin-right: 4px;">查看协议与记录</span><i class="lzicon lzicon-down"></i></button><!----><!----></div></div><!----><!----><!----><div class="lz-form-item lz-form-item-right"><!----><div class="lz-form-item-content"><button class="lz-btn lz-btn-primary lz-btn-ghost" type="button"><!---->热点日历</button><!----><!----></div></div></form></div><!----><!----><div class="common-search-area" data-v-4ad0f163=""><div class="merchant-search-area" data-v-df6b8148="" data-v-4ad0f163=""><form class="lz-form lz-form-right lz-form-inline header-form" autocomplete="off" data-v-df6b8148="" style="display: flex; flex-wrap: wrap;"><div class="lz-form-item lz-form-item-right" data-v-df6b8148=""><!----><div class="lz-form-item-content"><button class="lz-btn lz-btn-primary" type="button" data-v-df6b8148=""><!---->快速筛选房型</button><!----><!----></div></div><div class="lz-form-item lz-form-item-right" data-v-df6b8148=""><!----><div class="lz-form-item-content"><div class="calendar-date-picker" data-v-df6b8148=""><div class="lz-date-picker lz-date-picker-selected date-picker popper-identification-symbol" style="width: 175px;"><div class="date-picker lz-date-picker-editor lz-input-wrapper lz-range-picker"><!----><!----><input class="date-picker lz-date-picker-editor lz-input" closable="true" loading="false" show-tag="true" placeholder="" type="text"><span class="range-separator"> ~ </span><input class="date-picker lz-date-picker-editor lz-input" closable="true" loading="false" show-tag="true" placeholder="" type="text"><span class="lz-input-suffix-inner"><i class="lzicon lzicon-calendar-o"></i></span><!----></div></div></div><!----><!----></div></div><div class="lz-form-item lz-form-item-right quick-select-box" data-v-df6b8148=""><!----><div class="lz-form-item-content"><div class="main-container" data-v-20a91b9c="" data-v-df6b8148=""><div class="quick-select-container" data-v-20a91b9c=""><div class="lz-checkbox-group checkbox-wrapper" data-v-20a91b9c=""><label class="lz-checkbox lz-checkbox-checked" data-v-20a91b9c="" style="margin-left: 8px;"><input class="lz-checkbox-input" type="checkbox" style="display: none;"><span class="lz-checkbox-inner"><i class="lzicon lzicon-check-thick"></i></span><span class="lz-checkbox-text">全日房</span></label><label class="lz-checkbox" data-v-20a91b9c="" style="margin-left: 8px;"><input class="lz-checkbox-input" type="checkbox" style="display: none;"><span class="lz-checkbox-inner"><i class="lzicon lzicon-check-thick" style="display: none;"></i></span><span class="lz-checkboLine truncated
|
||||||
|
```
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 67 KiB |
@@ -1,4 +1,48 @@
|
|||||||
|
import { chromium } from 'playwright';
|
||||||
import log from 'electron-log';
|
import log from 'electron-log';
|
||||||
|
|
||||||
log.info('mt_trace.mjs placeholder: not implemented');
|
const getOrCreateTab = async (context, targetIndex) => {
|
||||||
process.exit(0);
|
const idx =
|
||||||
|
Number.isFinite(targetIndex) && targetIndex >= 0 ? Math.floor(targetIndex) : 1;
|
||||||
|
|
||||||
|
let pages = await context.pages();
|
||||||
|
while (pages.length <= idx) {
|
||||||
|
await context.newPage();
|
||||||
|
pages = await context.pages();
|
||||||
|
}
|
||||||
|
const page = pages[idx];
|
||||||
|
await page.bringToFront();
|
||||||
|
return page;
|
||||||
|
};
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
const browser = await chromium.connectOverCDP('http://127.0.0.1:9222');
|
||||||
|
|
||||||
|
try {
|
||||||
|
const context = browser.contexts()[0];
|
||||||
|
if (!context) {
|
||||||
|
throw new Error('No browser context available');
|
||||||
|
}
|
||||||
|
|
||||||
|
await context.addInitScript(() => {
|
||||||
|
Object.defineProperty(navigator, 'webdriver', { get: () => undefined });
|
||||||
|
});
|
||||||
|
|
||||||
|
const tabIndex = Number(process.env.TAB_INDEX);
|
||||||
|
const page = await getOrCreateTab(context, tabIndex);
|
||||||
|
await page.goto('https://me.meituan.com/ebooking/merchant/product#/index');
|
||||||
|
} catch (error) {
|
||||||
|
log.error(error);
|
||||||
|
process.exitCode = 1;
|
||||||
|
} finally {
|
||||||
|
if (browser) {
|
||||||
|
try {
|
||||||
|
if (typeof browser.disconnect === 'function') {
|
||||||
|
await browser.disconnect();
|
||||||
|
} else {
|
||||||
|
await browser.close();
|
||||||
|
}
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
||||||
@@ -22,6 +22,7 @@ export class executeScriptService extends EventEmitter {
|
|||||||
const startTime = options?.startTime ?? '';
|
const startTime = options?.startTime ?? '';
|
||||||
const endTime = options?.endTime ?? '';
|
const endTime = options?.endTime ?? '';
|
||||||
const operation = options?.operation ?? '';
|
const operation = options?.operation ?? '';
|
||||||
|
const tabIndex = options?.tabIndex ?? '';
|
||||||
|
|
||||||
const child = spawn('node', [scriptPath], {
|
const child = spawn('node', [scriptPath], {
|
||||||
env: {
|
env: {
|
||||||
@@ -29,7 +30,8 @@ export class executeScriptService extends EventEmitter {
|
|||||||
ROOM_TYPE: String(roomType),
|
ROOM_TYPE: String(roomType),
|
||||||
START_DATE: String(startTime),
|
START_DATE: String(startTime),
|
||||||
END_DATE: String(endTime),
|
END_DATE: String(endTime),
|
||||||
OPERATION: String(operation)
|
OPERATION: String(operation),
|
||||||
|
TAB_INDEX: String(tabIndex),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user