gkd-kit / selector

一个类似 css 选择器的高级选择器 | An advanced selector similar to a CSS selector.
43 stars 20 forks source link

[question] 选择不感兴趣后如何阻止继续检测控件 #2

Closed Snoopy1866 closed 1 year ago

Snoopy1866 commented 1 year ago

信息流广告快照:https://gkd-kit.gitee.io/import/12639751 反馈理由快照:https://gkd-kit.gitee.io/import/12639752 反馈后快照:https://gkd-kit.gitee.io/import/12639757

我书写的规则如下:

import { defineAppConfig } from '../types';

export default defineAppConfig({
  id: 'com.netease.newsreader.activity',
  name: '网易新闻',
  groups: [
    {
      enable: false,
      key: 0,
      name: '首页信息流广告',
      desc: '点击广告卡片x关闭按钮-关闭反馈理由弹窗',
      activityIds: 'com.netease.nr.phone.main.MainActivity',
      rules: [
        {
          preKeys: [1],
          name: '首页信息流广告-反馈理由',
          matches:
            '[text="不感兴趣"]',
          snapshotUrls: 'https://gkd-kit.gitee.io/import/12639752',
        },
        {
          key: 1,
          matches: 'TextView[text="广告"] +(2) ImageView',
          snapshotUrls: 'https://gkd-kit.gitee.io/import/12639751',
        },
      ],
    },
  ],
});

上述规则会自动点击信息流广告的×,并指定点击“不敢兴趣”,但这个 App 并不会直接关掉广告,而是告知反馈成功,导致原本的×还保留在界面中,造成反复触发规则。如何才能在点击“不敢兴趣”后,出现“反馈成功”,停止对界面进行检测。

Snoopy1866 commented 1 year ago

我找到了 excludeMatches 参数,将代码修改如下:

import { defineAppConfig } from '../types';

export default defineAppConfig({
  id: 'com.netease.newsreader.activity',
  name: '网易新闻',
  groups: [
    {
      enable: false,
      key: 0,
      name: '首页信息流广告',
      desc: '点击广告卡片x关闭按钮-关闭反馈理由弹窗',
      activityIds: 'com.netease.nr.phone.main.MainActivity',
      rules: [
        {
          preKeys: [1],
          name: '首页信息流广告-反馈理由',
          matches: '[text="不感兴趣"]',
          snapshotUrls: 'https://gkd-kit.gitee.io/import/12639752',
        },
        {
          key: 1,
          matches: 'TextView[text="广告"] +(2) ImageView',
          excludeMatches:
          '[text="反馈成功"] - ImageView < LinearLayout + [text="将减少此类内容的推荐"]',
          snapshotUrls: 'https://gkd-kit.gitee.io/import/12639751',
        },
      ],
    },
  ],
});

实测可行,不知道有没有什么潜在的问题

lisonge commented 1 year ago

实测可行,不知道有没有什么潜在的问题

如果页面节点上同时存在两个广告卡片,这个规则点击第一个广告卡片后第二个广告卡片就不能继续点击了

可以使用

FrameLayout[childCount=1] >5 TextView[text="广告"] +2 ImageView[clickable=true]

来判断,因为出现 反馈成功后,这个小区域的节点结构会发生变化,导致多出来一部分节点,从而导致父节点的 childCount=2

image