※ 引述《secretfly (☠鬼灭·之喵喵)》之铭言:
: 如题目
: 主要有两个问题 第一个目的是自动登入 填入帐号与密码
: 使用方式是:
: document.querySelector("#Pwd").value="";
: 只是在b站使用这个方法后 按下登入 数值会不见
: 我发现的问题是 必须要在字段中编辑过 里面的value才不会消失
: 想请问其中原理是什么?该如何解决?
经过测试,如果先用 .value 填帐号,接着再手动输入密码,
则帐号的字段会被清空。反之,先密码再帐号也是一样情形。
以下稍微说明我的猜测与解决方式。
我猜他内部有一个 JS 物件,专门用来储存对应的帐号、密码资讯。
当你手动输入并触发输入事件时,他会把字段内的值更新到内部物件。
当你按下登入,或是换字段输入时,他则会把内部物件的值反写回所有字段中。
因此,解决方式其实很单纯,用 .value 填完之后,手动触发一次输入事件,
让内部物件根据当下字段的值进行更新就可以了。
以下是我试过可正确执行的版本。
// 测试网址
// https://passport.bilibili.com/login
const username = document.getElementById('login-username')
const password = document.getElementById('login-passwd')
username.value = '帐号'
password.value = '密码'
// 触发输入事件
username.dispatchEvent(new InputEvent('input'))
password.dispatchEvent(new InputEvent('input'))
: 另外额外问的第二个问题 : 我用右键检查登入按钮 没发现办法可以用JS操作
: onclick不能使用 也没找到能submit的form
: 又是为什么呢
: 谢谢
因为他并没有使用传统的 <form>,而是直接使用 XMLHttpRequest 送出资讯。
你如果在 vendor.{随机码}.js 内搜寻一个叫 7GwW 的 function,
就会看到最后送出资讯的实作方式。
你可以看他的 XMLHttpRequest 里包含了哪些相关资讯,并模仿用一样的方式来提交。