Javascript 发送点击至;“生成的源代码/计算的html”;通过Chrome开发工具控制台的按钮
我必须在一个网页上回顾大量的视频(下面的截图)。视频部分隐藏。要查看每个视频,我必须逐个单击Javascript 发送点击至;“生成的源代码/计算的html”;通过Chrome开发工具控制台的按钮,javascript,google-chrome-devtools,google-chrome-console,Javascript,Google Chrome Devtools,Google Chrome Console,我必须在一个网页上回顾大量的视频(下面的截图)。视频部分隐藏。要查看每个视频,我必须逐个单击more按钮(如下图所示)。 每页通常有40个视频。不断滚动并反复点击more按钮是乏味的,如果我继续这样做,我想我会有重复性的压力伤害 因此,我想我应该使用Chrome开发工具的控制台来识别按钮,并在一个批处理过程中发送它们 我可以使用Chrome开发工具中的inspect工具找到more按钮,如下所示: more按钮的DOM树面包屑通过inspect(请单击放大,下面有两个图像部分): mor
more
按钮(如下图所示)。
每页通常有40个视频。不断滚动并反复点击more
按钮是乏味的,如果我继续这样做,我想我会有重复性的压力伤害
因此,我想我应该使用Chrome开发工具的控制台来识别按钮,并在一个批处理过程中发送它们
我可以使用Chrome开发工具中的inspect
工具找到more
按钮,如下所示:
more
按钮的DOM树面包屑通过inspect
(请单击放大,下面有两个图像部分):
more
按钮标记代码如下所示:
<button class="d2l-label-text" type="button">
<d2l-icon class="d2l-button-subtle-icon" icon="d2l-tier1:chevron-down" dir="ltr"></d2l-icon>
<span class="d2l-button-subtle-content"><!---->more<!----></span>
<slot></slot>
</button>
然而,事实证明,document.getElementsByClassName(“d2l标签文本”)
并没有抓取任何内容。结果数组的长度为0
我试着使用一些其他选择器,发现控制台
并不是从生成的源代码/计算html
中抓取,而是只抓取源代码
中的标记/元素(可以通过右键单击,查看源代码
获得原始源代码)
我的问题:我做错了什么?如何让
控制台
获取生成的源代码/计算html
更多
按钮?您知道您试图获取的内容是否在页面内的iframe中吗
如果是这样,我相信您需要先获得iframe,然后再使用
theiframe.getElementsByClassName()
您知道您试图获取的内容是否在页面的iframe中吗 如果是这样,我相信您需要先获得iframe,然后再使用
theiframe.getElementsByClassName()
从屏幕截图中可以看出,元素位于内部,这意味着无法从主
文档中直接访问它
要找到这样的元素,您必须递归地访问ShadowRoot链。
在您的案例中,此链中有两个元素
for (const more of document.querySelectorAll('d2l-more-less')) {
for (const buttonSubtle of more.shadowRoot.querySelectorAll('d2l-button-subtle')) {
const btn = buttonSubtle.shadowRoot.querySelector('button');
if (btn) btn.dispatchEvent(new MouseEvent('click', {bubbles: true}));
}
}
如果shadowRoot是由页面在“关闭”模式下创建的,您可能需要在中钩住元素.prototype.attachShadow,如屏幕截图所示,元素位于a中,这意味着无法直接从主文档访问它
要找到这样的元素,您必须递归地访问ShadowRoot链。
在您的案例中,此链中有两个元素
for (const more of document.querySelectorAll('d2l-more-less')) {
for (const buttonSubtle of more.shadowRoot.querySelectorAll('d2l-button-subtle')) {
const btn = buttonSubtle.shadowRoot.querySelector('button');
if (btn) btn.dispatchEvent(new MouseEvent('click', {bubbles: true}));
}
}
如果shadowRoot是由页面在'closed'
模式下创建的,您可能必须在中钩住元素.prototype.attachShadow内容不在iframe
中。谢谢你的建议。我看到了一些关于iframe
是如何导致这种行为的参考资料。@提前谢谢,然后我想多看看html会有所帮助。一个非常基本的测试工作。table=document.getElementsByTagName(“表”)[0];table.appendChild(document.createElement('tr'))---然后在控制台中--var rows=document.getElementsByTagName('tr');console.log(rows.length);谢谢你帮我做这个,菠萝。你的基本测试对我来说很有效(我将代码放在一个新的.htm
文件中并运行了该代码,它成功了。我已经将HTML DOM树的面包屑添加到我的原始问题中,请看一下(它们在两个屏幕截图中)。内容不在iframe
中。感谢您的有用建议。我看到了一些关于iframe
如何导致此类行为的参考资料。@事先谢谢,然后我认为查看更多html会有所帮助。非常基本的测试有效。table=document.getElementsByTagName(“table”)[0];table.appendChild(document.createElement('tr'));然后在控制台中--var rows=document.getElementsByTagName('tr');console.log(rows.length);感谢您在这方面的帮助,菠萝。您的基本测试对我很有用(我将该代码放在一个新的.htm
文件中并运行了该代码,它成功了。我已将HTML DOM树的面包屑添加到我的原始问题中,请看一看(它们在两个屏幕截图中)。您是否有指向问题页面的链接,或者您是否可以创建一个复制问题的沙盒?您是否有指向问题页面的链接,或者您是否可以创建一个复制问题的沙盒?谢谢您的建议。我直接在控制台中尝试了您的代码,但它不起作用。因此,我将尝试Element.prototype、 稍后再附上建议。特别感谢您如此精美地记录了您的回复(带有链接)。我已经向上投票了您,如果attachShadow
建议有效,我会将其标记为正确答案。首先在devtools中验证ShadowRoot的状态:谢谢。两个ShadowRoots
都是打开的,这里的screencap:这意味着这个答案中的方法会起作用,但您需要适当地调整它。例如,那些不是但是元素标记名,我现在才从新的screencap中了解到。此外,元素可能使用了不同的事件监听器,如mousedown
,您可以在devtools的“事件监听器”中看到子面板。无论如何,我不知道如何在不亲自尝试页面的情况下进一步提供帮助。这是因为事件侦听器被附加到.d2l标签文本
,而不是按钮
。显然,感谢您的建议。我直接在控制台中尝试了您的代码,但它不起作用。因此我将尝试元素.prototype.attachShadow
稍后再提建议。特别感谢您将您的回复记录得如此精美(带有链接