使用Javascript单击所有Google Chrome“;“显示密码”;图标
在Chrome浏览器中,在设置>管理密码中: chrome://settings/passwords 存在“显示密码”图标 我必须手动单击输入字段的每个“眼睛”图标,从只读的使用Javascript单击所有Google Chrome“;“显示密码”;图标,javascript,google-chrome,Javascript,Google Chrome,在Chrome浏览器中,在设置>管理密码中: chrome://settings/passwords 存在“显示密码”图标 我必须手动单击输入字段的每个“眼睛”图标,从只读的type=“password”更改为type=“text”,并显示密码 我很好奇如何使用javascript单击所有图标,一次显示每个站点保存的所有密码 <div class="password-column"> <input id="password" aria-label="Password" c
type=“password”
更改为type=“text”
,并显示密码
我很好奇如何使用javascript单击所有图标,一次显示每个站点保存的所有密码
<div class="password-column">
<input id="password" aria-label="Password" class="password-field" readonly=""
type="password" disabled="">
<paper-icon-button-light id="showPasswordButtonContainer" class="icon-visibility">
<button id="showPasswordButton" focus-row-control="" focus-type="showPassword"
title="Show password" tabindex="0">
<paper-ripple class="circle"></paper-ripple>
</button>
</paper-icon-button-light>
<template is="dom-if"></template>
<span class="password-field text-elide" id="federated" hidden=""></span>
</div>
变量按钮
为null
对我来说,这更像是一个好奇的问题。我目前是一名具有良好Python背景的Javascript初学者。您不能选择这些元素,因为它们位于阴影DOM中 您可以尝试阴影穿透子体combinator
/deep/
,尽管它的命运不确定,因为它是V0的一部分,而不是V1阴影DOM的一部分。(例如,您只能从querySelector
中使用它,而不能从样式表中使用。)不过,Chrome暂时支持它
> document.querySelectorAll('* /deep/ button#showPasswordButton[title="Show password"]')
NodeList(41)
(过滤掉标题为“隐藏密码”的人)
通过devtoolsapi,我们还可以访问Chrome的queryObjects
函数,该函数将在内存中查找特定类型的所有实例
> queryObjects(HTMLButtonElement)
undefined
Array(122)
<> > <代码> QueObjs<代码>有点奇怪,(中间的<代码>未定义< /代码>是一个线索),所以我们必须右击>存储为全局变量,将其绑定到一个名称(代码< > TEMP1和<代码> $< /COD>,方便)。
您可能会注意到按钮的数量远小于列表的实际大小,因为当您滚动浏览时,Polymer会动态渲染它们。您可以在单击此按钮时暂停计算以发现底层数据模型,也可以在调试器或源代码中四处查看以发现它在做什么,但我将在此处留下几个表达式供您使用:
> passwordManager = document.querySelector('* /deep/ passwords-section').passwordManager_
PasswordManagerImpl {}
> await new Promise(resolve => passwordManager.getPlaintextPassword(0, resolve))
{index: 0, plaintextPassword: "cisco"}
或者queryObjects(PasswordManagerImpl)
,再次绕过DOM,更自由地在堆中查找对象
如果
/deep/
没有任何替换,我们可以尝试使用TreeWalker/NodeIterator接口依次递归地打开每个shadowRoot
。您无法选择这些元素,因为它们位于shadow DOM中
您可以尝试阴影穿透子体combinator/deep/
,尽管它的命运不确定,因为它是V0的一部分,而不是V1阴影DOM的一部分。(例如,您只能从querySelector
中使用它,而不能从样式表中使用。)不过,Chrome暂时支持它
> document.querySelectorAll('* /deep/ button#showPasswordButton[title="Show password"]')
NodeList(41)
(过滤掉标题为“隐藏密码”的人)
通过devtoolsapi,我们还可以访问Chrome的queryObjects
函数,该函数将在内存中查找特定类型的所有实例
> queryObjects(HTMLButtonElement)
undefined
Array(122)
<> > <代码> QueObjs<代码>有点奇怪,(中间的<代码>未定义< /代码>是一个线索),所以我们必须右击>存储为全局变量,将其绑定到一个名称(代码< > TEMP1和<代码> $< /COD>,方便)。
您可能会注意到按钮的数量远小于列表的实际大小,因为当您滚动浏览时,Polymer会动态渲染它们。您可以在单击此按钮时暂停计算以发现底层数据模型,也可以在调试器或源代码中四处查看以发现它在做什么,但我将在此处留下几个表达式供您使用:
> passwordManager = document.querySelector('* /deep/ passwords-section').passwordManager_
PasswordManagerImpl {}
> await new Promise(resolve => passwordManager.getPlaintextPassword(0, resolve))
{index: 0, plaintextPassword: "cisco"}
或者queryObjects(PasswordManagerImpl)
,再次绕过DOM,更自由地在堆中查找对象
如果
/deep/
没有任何替换,我们可以尝试使用TreeWalker/NodeIterator接口依次递归打开每个shadowRoot
。您不能这样选择它们,因为它们位于shadow DOM中。如果您不知道,Chrome在页面上有一个导出密码的按钮:)@JoshLee我其实不知道。谢谢你指出这一点。三个代表菜单的垂直点对我来说并不明显。你不能这样选择它们,因为它们在阴影DOM中。如果你不知道,Chrome在该页面上有一个导出密码按钮:)@JoshLee我其实不知道。谢谢你指出这一点。三个代表菜单的垂直点对我来说并不明显。太酷了!难以置信的学习机会。非常感谢你!太酷了!难以置信的学习机会。非常感谢你!