网页上一个按钮的点击,如何用 js 判断为真人点击?

2022-02-08 09:43:49 +08:00
 kisshere
我尝试用 js 来追踪鼠标移动的规律来判断,但是移动端没鼠标轨迹咋判断?有没有 PC 和移动端都支持的 js 方法判断真人?
11995 次点击
所在节点    程序员
71 条回复
eason1874
2022-02-08 10:33:20 +08:00
@musi #19 不可以。Event.isTrusted 根据网页内 dispatchEvent 判断,无头浏览器的操作并不依赖网页事件。不信你试试
musi
2022-02-08 10:34:26 +08:00
@eason1874 看清楚我回的问题 “这个无头浏览器能模拟出来吗?” “是可以的”
Zy143L
2022-02-08 10:34:51 +08:00
你能判断了 就没有验证码什么事了
eason1874
2022-02-08 10:36:01 +08:00
@musi #22 哦,那没事了,我理解错了
daliusu
2022-02-08 10:39:25 +08:00
@InDom 这个东西有个限制啊,这是浏览器给的,意味着如果有个浏览器是被篡改的第三方浏览器,这个 api 应该是可以随意更改的,它只要给所有的事件里的都改成 true 就可以绕过了
mekingname
2022-02-08 10:39:45 +08:00
移动端环境不太清楚,但是在网页上,你可以通过 js 来劫持模拟浏览器的 find_element_by_xxx 方法,当爬虫使用 Selenium/Puppeteer/PlayWright 通过 find_element_by_xxx 定位到某个按钮的时候,你就能知道。
ganbuliao
2022-02-08 10:41:20 +08:00
只能通过 recaptcha 获取评分了
monetto
2022-02-08 10:43:42 +08:00
可不可以通过点击位置来进行判断?点击的时候获取点击位置。
tonywangcn
2022-02-08 10:58:16 +08:00
Event.isTrusted 并不可靠,puppeteer 即可破防 https://github.com/puppeteer/puppeteer

`
Q: What’s the difference between a “trusted" and "untrusted" input event?
In browsers, input events could be divided into two big groups: trusted vs. untrusted.

Trusted events: events generated by users interacting with the page, e.g. using a mouse or keyboard.
Untrusted event: events generated by Web APIs, e.g. document.createEvent or element.click() methods.
Websites can distinguish between these two groups:

using an Event.isTrusted event flag
sniffing for accompanying events. For example, every trusted 'click' event is preceded by 'mousedown' and 'mouseup' events.
For automation purposes it’s important to generate trusted events. All input events generated with Puppeteer are trusted and fire proper accompanying events. If, for some reason, one needs an untrusted event, it’s always possible to hop into a page context with page.evaluate and generate a fake event:

await page.evaluate(() => {
document.querySelector('button[type=submit]').click();
});

`
iColdCat
2022-02-08 11:01:50 +08:00
@nba2k9 我看刑 很可拷
allengu2pgyer
2022-02-08 11:03:42 +08:00
@pathletboy 哈哈哈,真相了
InDom
2022-02-08 11:30:12 +08:00
调用支付宝 /微信支付吧,能付款的就是真人。

相当于间接使用了 支付宝 微信 的风控识别系统,比自己实现强多了。
iqoo
2022-02-08 11:30:44 +08:00
@musi 没用的。这种只能识别注入脚本调用 button.click()
jones2000
2022-02-08 13:01:00 +08:00
手机点击的时候判断手指温度, 温度不正常的都是假人。
makelove
2022-02-08 13:47:13 +08:00
用验证码无非是为了防止别人天量 0 成本提交,如果能做到提交效率和对方真人手工操作差不多,那是不是可解了?
比如提交时要 CPU 挖够半分钟矿(假设真人提交一次要半分钟),这样就限制了对方速度。当然这个也挡不住对方有海量机器。
Buges
2022-02-08 13:47:29 +08:00
有必要就上验证码。
其实我担心 invisible recaptcha 普及,导致从“有必要就上”变成“没必要就不去掉”,这样让自动化寸步难行。
Features
2022-02-08 14:08:55 +08:00
如果不是很严格的判断是可以的
谷歌 2007 年就开始的项目,通过键盘敲击,鼠标轨迹,点击频率判断是否为机器人
如果是机器人就弹出验证码
所以谷歌验证码在弹出之前,会有个加载动画,是依据之前收集的数据判断机器人,如果数据太少了或者判断为机器人,就会要求输入验证码
miaomiaoweiwei
2022-02-08 14:40:50 +08:00
安全从业来告诉你,这是个伪命题,这压根不是你一个需求能做到的事情,是综合各种行为和结果联合判定的
这个判定也不是非黑即白的,很多灰色无法判定
建议看一看人机识别的文章啥的,这就不是一个方法搞定的事情
RickyC
2022-02-08 15:05:59 +08:00
真人移动鼠标会哆嗦吧
机器轨迹和人的轨迹,比较一下?
wangtian2020
2022-02-08 15:17:35 +08:00
@RickyC 禁止罗技鼠标开启平滑移动功能是吧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/832362

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX