【问题标题】:How do I ignore integers in a bookmarklet?如何忽略小书签中的整数?
【发布时间】:2022-12-05 21:10:12
【问题描述】:

每当我刷新我使用的网站时,密码框的值都会改变。如果我访问该网站,密码框的值会生成一个从ember000ember999 的随机数。每当我设置自动填充书签时,它都会尝试将密码输入ember123密码框,或任何组合,当密码框的值为ember321时,或任何组合.

小书签的格式化代码

/* FormFiller v0.2.0 */
var d = document;

function i(a) {
  return d.getElementById(a)
}

function n(a) {
  return d.getElementsByName(a)[0]
}

function e(a) {
  t = 'change';
  if (window.navigator.userAgent.match(/Trident|MSIEs/g) != null) {
    x = d.createEvent('Events');
    x.initEvent(t, 1, 0);
  } else {
    x = new Event(t);
  }
  a.dispatchEvent(x);
}

function v(a, v) {
  a.value = v;
  e(a)
}

function c(a) {
  a.checked = true;
  e(a)
}
v(i("identification"), "Website Username");
v(i("ember479"), "Website Password");
void(0);

缩小版:

javascript:/* FormFiller v0.2.0 */var d=document;function i(a){return d.getElementById(a)}function n(a){return d.getElementsByName(a)[0]}function e(a){t='change';if(window.navigator.userAgent.match(/Trident|MSIEs/g)!=null){x=d.createEvent('Events');x.initEvent(t,1,0);}else{x=new Event(t);}a.dispatchEvent(x);}function v(a,v){a.value=v;e(a)}function c(a){a.checked=true;e(a)}v(i("identification"),"Website Username");v(i("ember479"),"Website Password");void(0);

【问题讨论】:

  • 如果它是页面上唯一的密码字段,那么您可以简单地搜索密码类型的输入。但如果不是,它是唯一一个有数字 ID 的吗?因为您可以匹配 ID 以“ember”开头的任何位置,但它可能匹配另一个元素。很难推荐一个正常工作的解决方案。如果用户名是静态的,也许只找到用户名,然后输入随之而来的密码。
  • 页面上只有 2 个输入;用户名和密码。我将如何将您的评论实施到我的代码中?

标签: javascript bookmarklet


【解决方案1】:

要忽略密码框值中的整数,您可以使用正则表达式仅匹配值的“ember”部分,并忽略后面的数字。为此,您可以使用 replace 方法并指定一个匹配值末尾数字的正则表达式。

下面是一个示例,说明如何更新代码以使用正则表达式来匹配密码框值的“ember”部分并忽略后面的数字:

/* FormFiller v0.2.0 */
var d = document;

function i(a) {
return d.getElementById(a)
}

function n(a) {
return d.getElementsByName(a)[0]
}

function e(a) {
t = 'change';
if (window.navigator.userAgent.match(/Trident|MSIEs/g) != null) {
x = d.createEvent('Events');
x.initEvent(t, 1, 0);
} else {
x = new Event(t);
}
a.dispatchEvent(x);
}

function v(a, v) {
a.value = v;
e(a)
}

function c(a) {
a.checked = true;
e(a)
}

// Use a regular expression to match the "ember" part of the password box's value
// and ignore the numbers that follow it
var passwordBoxValue = i("ember479").value.replace(/emberd+/i, "ember");

v(i("identification"), "Website Username");
v(i("ember479"), "Website Password");

void(0);

上面代码中的 /emberd+/i 正则表达式将匹配密码框值的“ember”部分,并忽略后面的数字。 d 字符类匹配任何数字 (0-9),+ 量词指定应匹配一个或多个数字。正则表达式末尾的 i 标志使匹配不区分大小写,因此无论是大写还是小写,它都会匹配“ember”。

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 2018-07-18
    • 1970-01-01
    • 2018-07-26
    • 2012-08-30
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    相关资源
    最近更新 更多