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[] = []
|
||||
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}`)
|
||||
const result = await executeScriptServiceInstance.executeScript(item.scriptPath, {
|
||||
roomType: roomType[item.channel],
|
||||
startTime: options.startTime,
|
||||
endTime: options.endTime,
|
||||
operation: options.operation,
|
||||
tabIndex: i,
|
||||
})
|
||||
results.push({
|
||||
channel: item.channel,
|
||||
|
||||
@@ -91,10 +91,9 @@ const toggleRoomByDateIndex = async (page, container, { roomType, dateIndex, ope
|
||||
};
|
||||
|
||||
(async () => {
|
||||
let browser;
|
||||
const browser = await chromium.connectOverCDP('http://127.0.0.1:9222');
|
||||
|
||||
try {
|
||||
browser = await chromium.connectOverCDP(`http://127.0.0.1:9222`);
|
||||
const context = browser.contexts()[0];
|
||||
|
||||
await context.addInitScript(() => {
|
||||
@@ -102,8 +101,8 @@ const toggleRoomByDateIndex = async (page, container, { roomType, dateIndex, ope
|
||||
});
|
||||
|
||||
const pages = await context.pages();
|
||||
|
||||
const page = pages.length ? pages[0] : await context.newPage();
|
||||
const tabIndex = Number(process.env.TAB_INDEX);
|
||||
const page = pages.length ? pages[tabIndex] : await context.newPage();
|
||||
|
||||
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';
|
||||
|
||||
log.info('mt_trace.mjs placeholder: not implemented');
|
||||
process.exit(0);
|
||||
const getOrCreateTab = async (context, targetIndex) => {
|
||||
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 endTime = options?.endTime ?? '';
|
||||
const operation = options?.operation ?? '';
|
||||
const tabIndex = options?.tabIndex ?? '';
|
||||
|
||||
const child = spawn('node', [scriptPath], {
|
||||
env: {
|
||||
@@ -29,7 +30,8 @@ export class executeScriptService extends EventEmitter {
|
||||
ROOM_TYPE: String(roomType),
|
||||
START_DATE: String(startTime),
|
||||
END_DATE: String(endTime),
|
||||
OPERATION: String(operation)
|
||||
OPERATION: String(operation),
|
||||
TAB_INDEX: String(tabIndex),
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in new issue
Block a user