Chrome执行JS脚本进行接口请求的方法--完成很多需要复杂授权接口的hack

本文介绍了一种通过在Chrome控制台自定义JavaScript函数实现批量网页操作的方法,尤其适用于复杂的权限校验场景,例如批量注册账户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

最近在工作中经常遇到需要在网页上进行重复操作的场景,比如注册大量账户,新建多个子账户之类的操作,都是在一个网站中进行类似重复的操作,但是又很难通过接口去实现,因为网站的授权认证特别麻烦,有各种校验,有些还是第三方登录,比如Google Auth,要通过接口请求去模拟登录异常困难。

问题:

 1、需要在网页上进行重复操作,但实际是调用一个重复的接口;

2、网站的权限校验比较复杂;

解决思路:

通过在Chrome的console中自定义JavaScript的方法,然后通过循环执行调用这个接口传入不同参数来实现我们的目的;

实现步骤:

1、在console中定义函数,请求参数是form表单的情况:

PS:我们这里解决的是通过请求注册接口注册多个账户

const test_register = async () => {
  const uri = 'https://xxx.xxxx.xxx.xxx/system/register_ajax/'
  for (let i = 1000; i < 2000; i ++) {
    const searchParams = new URLSearchParams();
    searchParams.set('username', `user${i}`)
    searchParams.set('password', 'xxxxx')
    searchParams.set('email', `user${i}@gmail.com`)
    searchParams.set('country_code', '000')
    searchParams.set('phone', `000000${i}`)
    await fetch(uri, {
      method: 'POST',
      credentials: 'include',
      body: searchParams,
      headers: {
        "x-csrftoken": "OIYahxxxxxJfafHN0xxxxxxelc098L"
      }
    })
  }
}

2、执行函数:

test_register()

注意事项:

如果请求的接口是JSON格式的话参数应该这样定义:

const add_members = async () => {
      let uri = "https://xxxx.xxx.xxxxxx.com/api/v1/member/?CSRF_TOKEN=xxxxxxxx-4bb2-47a7-aa01-xxxxxxxx"
      for (let i = 6; i < 11; i ++) {
        let post_body = {"parm1":"value", "account_name":`member${i}`, "password":"xxxxxxxxxxxx", "confirmPassword":"", "nick_name":`member${i}`, "email":`member${i}@gmail.com`,"phonePrefix":"+86","phone":`+861345664700${i}`}
        await fetch(uri, {
          method: 'POST',
          credentials: 'same-origin',  //注意这个 [MUST]submit cookies in same origin, if not add this field request will not add cookies
          body: JSON.stringify(post_body)
        })
      }
    }

 

转载于:https://www.cnblogs.com/l33klin/p/9164188.html

<think>嗯,用户的问题是关于微信小程序中web-view组件在安卓和iOS设备上授权取消功能的差异,特别是如何检测安卓设备上的授权取消操作。用户引用了四篇相关文章,但核心需求很明确:解决跨平台授权取消的检测问题。从用户描述看,他们已经遇到实际开发困境:苹果设备正常显示而安卓空白,且调试发现苹果设备无法弹出alert(可能被系统拦截)。用户尝试过h5断点调试但效果有限,说明问题在小程序环境与h5的交互层。引用[2]提到录音权限问题,引用[4]提到安卓web-view的特殊拦截机制,这些都与当前问题强相关。用户真正的痛点在于:如何在web-view内统一处理安卓和iOS的系统级授权取消行为,尤其是安卓设备没有统一事件回调的缺陷。需要给出可落地的检测方案而非理论分析。根据技术经验,必须拆解三个核心:1)iOS通过webkit内核会阻塞JS执行,可通过页面隐藏事件捕获;2)安卓需要混合方案:用小程序API兜底+轮询H5权限状态;3)主动触发检测比被动监听更可靠。尤其要注意引用[4]的关键结论:安卓web-view可能将大数据请求误判为文件下载导致交互中断。这个机制可能也影响权限检测接口,因此轮询间隔不宜过短(避免被误判为频繁请求)。准备在回答中强调小程序环境与H5的双向通信机制,因为用户提到“没有小程序开发环境”,方案必须兼容远程调试场景。最后提醒他们测试安卓厂商ROM差异(如小米的权限管理更严格),这点在引用[3]的hack方案中已有印证。</think> 在微信小程序中,`web-view`组件在安卓和iOS设备上处理授权取消时存在显著差异,尤其在检测授权取消行为时需要针对性处理。以下是具体解决方案和检测方法--- ### **一、授权取消差异的核心原因** 1. **iOS 行为特性** - 当用户取消授权(如摄像头、麦克风)时,系统会**静默拒绝**,不会触发任何回调或弹窗。 - 页面可能被直接隐藏或冻结(导致JS中断),但不会抛出错误(如`alert()`失效)[^1]。 2. **Android 行为特性** - 系统可能弹出**二次确认弹窗**(部分厂商ROM定制)。 - 授权取消时,`web-view`内部分JS操作仍可执行(与iOS相比更“宽容”)。 --- ### **二、检测安卓取消授权的具体方案** #### ✅ **方法1:通过小程序API主动检测权限状态** 在小程序层调用`wx.getSetting`检查权限状态,通过`web-view`的`bindmessage`向H5传递授权结果: ```javascript // 小程序端代码 Page({ onLoad() { wx.getSetting({ success: (res) => { const authStatus = res.authSetting['scope.camera'] // 以相机权限为例 const h5Page = this.selectComponent('#webview') h5Page.postMessage({ authStatus }) // 通过bindmessage传递到H5 } }) } }) ``` #### ✅ **方法2:H5页面轮询检测(兼容iOS静默失败)** 在H5页面中定期检查API是否可用: ```javascript // H5页面脚本 let authCheckTimer = null function checkPermission() { navigator.mediaDevices.getUserMedia({ video: true }) .then(stream => { clearInterval(authCheckTimer) stream.getTracks().forEach(track => track.stop()) }) .catch(() => { // 捕获权限拒绝(Android可触发,iOS需结合其他方案) alert("授权被取消!") // Android可正常触发 }) } // 启动轮询(针对iOS静默拒绝) authCheckTimer = setInterval(checkPermission, 1000) ``` #### ✅ **方法3:监听页面可见性变化(兼容iOS)** iOS设备取消授权时页面常被隐藏,可监听`visibilitychange`事件: ```javascript // H5页面脚本 document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'hidden') { // 结合权限检测判断是否因授权取消导致 checkPermission() } }) ``` --- ### **三、跨平台兼容关键点** | **平台** | **检测难点** | **解决方案** | |----------|----------------------|------------------------------------------| | iOS | JS中断无回调 | `visibilitychange` + 小程序API状态同步 | | Android | 系统二次弹窗干扰 | `getUserMedia`错误捕获 + 轮询兜底 | --- ### **四、实际调试建议** 1. **安卓特殊场景** - 使用`chrome://inspect`远程调试WebView,观察Console报错。 - 过滤`NotAllowedError`错误(权限被系统拒绝)。 2. **iOS必做项** - 在`<web-view>`添加`<cover-view>`遮罩层,防止页面冻结后操作无响应。 - 通过小程序`onHide`生命周期向H5发送暂停指令。 --- ### **相关问题** 1. 为什么iOS取消授权后H5页面的`alert()`无法弹出? 2. 如何避免安卓厂商ROM的授权弹窗导致流程中断? 3. 在小程序中使用`web-view`时,如何统一管理多权限(摄像头、定位等)的取消逻辑? > 引用文献: > iOS静默拒绝行为参考实际调试案例[^1],安卓二次弹窗问题源于厂商系统定制(如小米权限管理)[^3],轮询检测法需注意性能损耗[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值