插件实现1206网站“按预填信息”自动抢票
插件实现1206网站“按预填信息”自动抢票
年底了,为了回老家过年,大部分同学都需要抢票,1206提供了"按预填信息购票"的功能,先把购票信息填好,到点直接抢票,但是这个功能有点蛋疼,到点开票之前,页面上根本就看不到"按预填信息购票"按钮,只有页面的倒计时结束,用户才能看到这个按钮,检查源代码可以发现,开发人员把这个按钮给隐藏了。
代码语言:html复制<div class="ticket-btn" style="user-select: text;">
<a href="javascript:;" class="btn btn-hollow btn-sm w120 buy-ticket-button" data-index="0" data-seatno=""
style="display: none; user-select: text;">按预填信息购票</a>
<span class="txt-lighter qishou-text" style="user-select: text;">1月9日09点
起售</span>
</div>
作为程序员的我,心里暗爽,“这不是小场面~”,把style="display: none; user-select: text;"改成style="display: inline-block; user-select: text;"不就行。说干就干,可是当我改成“display: inline-block”之后,发现立马又被改回了“display: none”,我猜应该是有一个脚本在维护这一块的隐藏。
当我以为等着页面上的倒计时结束,“按预填信息购票”按钮出现后,立马点击一下就能开始抢票,然而并不是,当时的我心中真的是一万匹**马在崩腾。点击“按预填信息购票”按钮后,竟然还会弹出购票信息确认窗口,需要我们再次点击“提交订单”按钮。
好家伙,这还抢个der,无奈抢票时间就这样一点点被浪费,最终喜提的“已售罄”三个大字像是在屏幕前嘲笑我:“你个菜鸡,没有抢到票吧”。
这我哪能忍!所以决定研究一下怎么搞一个google chrome插件,实现一键自动化,节省两次点击按钮的时间,毕竟抢票的时间是很宝贵的,哪怕节约哪怕1毫秒,可能我们就已经排在很多人前面了。
凭借着以前学过的一点点前端知识和几个小弟(文心一言、豆包、chatGPT),从没有搞过chrome插件开发的我,似乎有那么一点点出生牛犊不怕虎的意思,这就开始干了。
明确需求
首先根据场景,明确一下我们的需求。希望达到的效果是,通过chrome插件,自动监听页面上的按钮控件,一是当出现“按预填信息购票”按钮时,自动触发点击;二是当出现“提交订单”按钮时,自动触发点击。
功能实现
秉承着面向小弟编程的原则,经过一通通高手之间“对话”,再加上验证调试,最终达到了效果。下面记录一下实现过程,具体的原理就不讲了,因为我也不懂哈哈。
模式1206的页面
写一个页面,模拟1206页面上的从“1月9日09点 起售”到“按预填信息购票”按钮出现的过程,再模拟当用户点击“按预填信息购票”按钮时,弹出“购票信息确认”窗口,显示“提交订单”按钮。代码放在github仓库里,这里就不贴了
编写插件
1、创建 Chrome 扩展目录结构
首先,创建一个包含以下文件的目录结构:
代码语言:shell复制├── 1206 pre-filled buy
│ ├── ic //插件图标
│ │ ├── icon128.png
│ │ ├── icon16.png
│ │ └── icon48.png
│ ├── manifest.json //配置文件
│ ├── popup.html //弹出界面
│ └── popup.js
2、编写manifest.json
代码语言:json复制{
"manifest_version": ,
"name": "1206 按预填信息购票",
"version": "1.0",
"description": "1206 按预填信息购票",
"permissi": [
"activeTab",
"alarms",
"scripting"
],
"action": {
"default_popup": "popup.html",
"default_icon": {
"16": "ic/icon16.png",
"48": "ic/icon48.png",
"128": "ic/icon128.png"
}
},
"ic": {
"16": "ic/icon16.png",
"48": "ic/icon48.png",
"128": "ic/icon128.png"
}
}
、编写popup.html
代码语言:html复制<!DOCTYPE html>
<html>
<head>
<title>1206 按预填信息购票</title>
<style>
body {
width: 200px;
height: 50px;
display: flex;
justify-content: center;
align-items: center;
background-color: #f1f1f1;
}
button {
padding: 10px 20px;
font-size: 16px;
}
</style>
</head>
<body>
<button id="goHome">I Must Go Home</button>
<script src="popup.js"></script>
</body>
</html>
4、编写popup.js
代码语言:javascript代码运行次数:0运行复制document.getElementById('goHome').addEventListener('click', function() {
// 首先获取当前活动标签页的ID
query({active: true, currentWindow: true}, function(tabs) {
var tabId = tabs[0].id;
// 使用获取到的tabId来执行脚本
chrome.({
target: {tabId: tabId},
func: buttonlistener
}, function() {
cole.log('button listener enabled in tab:', tabId);
});
});
});
function buttonlistener() {
cole.log('listening start...');
ct intervalId0 = setInterval(() => {
ct targetButtonSelector = 'a.buy-ticket-button[style*="display: inline-block;"]';
ct targetButton = document.querySelector(targetButtonSelector);
if (targetButton && window.getComputedStyle(targetButton).display !== 'none') {
();
cole.log('yushou, clicking...');
clearInterval(intervalId0); // 停止检查
}else{
cole.log('ot found the yushou button, waiting...');
}
}, ); // 每隔毫秒检查一次
ct intervalId = setInterval(() => {
ct submitButton = document.querySelector('a[href="javascript:;"][class="btn btn-primary ok"]');
if (submitButton) {
();
cole.log('Found the submit button, clicking...');
clearInterval(intervalId); // 停止检查
}else{
cole.log('ot found the submit button, waiting...');
}
}, 5); // 每隔5毫秒检查一次
}
5、加载扩展
- 打开Chrome浏览器,进入
chrome://extensi/
。 - 打开右上角的“开发者模式”
- 点击“加载已解压的扩展程序”按钮,选择你的
1206 pre-filled buy
文件夹。
经过以上步骤后,应该就能在Chrome工具栏中看到你的扩展图标。点击图标,然后点击“I Must Go Home”按钮,脚本就会在当前活动页面上执行,可以打开浏览器控制台看日志。
演示使用
利用我们前面写的模拟页面,来演示一下插件的使用:
显然,我们开发的这个插件非常的简陋,还有报错信息没有处理,另外每隔5毫秒检查一次DOM元素对浏览器性能有一定影响,不过足以满足我们的自动化需求。
另外,在使用插件之前,我们需要注意几点:
- 更新主机的系统时间,1206上面的倒计时貌似是根据系统时间来的,如果你的系统时间慢了,结果可想而知
mac上可以执行命令:
sudo ntpdate -u time.apple
- 在倒计时还有两分钟的时候开启我们这个插件功能,避免长时间高频检查DOM元素导致对浏览器性能产生影响
平时我都是拿来主义,想要什么插件就在chrome的插件市场或者tampermonkey里,大部分都是能到的。第一次硬着头皮自己捣鼓了一个,虽然过程中遇到了好几个坎,功能也很简陋,但最终到达了目标,节约了抢票时间,心里还是美滋滋的。所以把这次经历记录下来,希望对大家有一丢丢帮助。
上述所有代码都已经放在了github,需要的自取哦。
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 20 条评论) |
本站网友 陌生的性 | 29分钟前 发表 |
"version" | |
本站网友 美国白宫 | 14分钟前 发表 |
可能我们就已经排在很多人前面了 | |
本站网友 吃黑木耳有什么好处 | 28分钟前 发表 |
创建 Chrome 扩展目录结构首先 | |
本站网友 阳虚体质 | 24分钟前 发表 |
' | |
本站网友 皱纹怎么减少 | 23分钟前 发表 |
豆包 | |
本站网友 食品安全管理员培训 | 22分钟前 发表 |
"48" | |
本站网友 115网址导航 | 7分钟前 发表 |
true | |
本站网友 放纸鸢 | 17分钟前 发表 |
心里还是美滋滋的 | |
本站网友 偏头痛的症状 | 10分钟前 发表 |
"description" | |
本站网友 f22p | 3分钟前 发表 |
"48" | |
本站网友 天津达沃斯论坛 | 24分钟前 发表 |
text;">1月9日09点 起售</span> </div>作为程序员的我 | |
本站网友 辽宁大雪 | 24分钟前 发表 |
flex; justify-content | |
本站网友 火影忍者大结局 | 12分钟前 发表 |
选择你的1206 pre-filled buy文件夹 | |
本站网友 踯躅不前 | 3分钟前 发表 |
tabId} | |
本站网友 中山脱裤门 | 8分钟前 发表 |
text;"> <a href="javascript | |
本站网友 面部塑形 | 21分钟前 发表 |
没有抢到票吧” | |
本站网友 中国银行总行 | 6分钟前 发表 |
这还抢个der | |
本站网友 中堂海陆汇 | 15分钟前 发表 |
这我哪能忍!所以决定研究一下怎么搞一个google chrome插件 | |
本站网友 磨房论坛 | 26分钟前 发表 |
不过足以满足我们的自动化需求 |