获取JavaScript对象

获取JavaScript对象,javascript,Javascript,我在无法编辑的网页上进行客户端工作 我想使用JS来单击特定的按钮,但它没有唯一的标识符 我知道该类,也知道innerHTML中可以匹配的(唯一)字符串,因此我使用while循环遍历(不同数量的)按钮以查找字符串: var theResult = ''; var buttonNum = 0; var searchString = '720p'; while (theResult.indexOf(searchString) == -1 { theResult = eval(\"document.

我在无法编辑的网页上进行客户端工作

我想使用JS来单击特定的按钮,但它没有唯一的标识符

我知道该类,也知道innerHTML中可以匹配的(唯一)字符串,因此我使用while循环遍历(不同数量的)按钮以查找字符串:

var theResult = '';
var buttonNum = 0;
var searchString = '720p';
while (theResult.indexOf(searchString) == -1
{
  theResult = eval(\"document.getElementsByClassName('streamButton')[\" + buttonNum + \"].innerHTML\");
  buttonNum++;
}
现在我应该知道按钮数组中的正确位置(我想是buttonNum-1),但是我如何引用它呢?我试过:

eval(\"document.getElementsByClassName('streamButton')[\" + buttonNum-1 + \"].click()")

以及()在eval中位置的变化,但我无法让它工作。

我会在这里远离eval,如果按钮上的文本是恶意javaScript怎么办

你会使用jQuery吗?如果是,请查看。您可以这样使用它:

$(".streamButton:contains('720p')")

我想在这里远离eval,如果按钮上的文本是恶意javaScript怎么办

你会使用jQuery吗?如果是,请查看。您可以这样使用它:

$(".streamButton:contains('720p')")

您可以尝试以下方法:

var searchStr = '720p',
    // Grab all buttons that have the class 'streambutton'.
    buttons = Array.prototype.slice.call(document.querySelectorAll('button.streamButton')),
    // Filter all the buttons and select the first one that has the sreachStr in its innerHTML.
    buttonToClick = buttons.filter(function( button ) {
        return button.innerHTML.indexOf(searchStr) !== -1;
    })[0];

您可以尝试以下方法:

var searchStr = '720p',
    // Grab all buttons that have the class 'streambutton'.
    buttons = Array.prototype.slice.call(document.querySelectorAll('button.streamButton')),
    // Filter all the buttons and select the first one that has the sreachStr in its innerHTML.
    buttonToClick = buttons.filter(function( button ) {
        return button.innerHTML.indexOf(searchStr) !== -1;
    })[0];

您不需要评估,但您可以逐个检查所有按钮,找到按钮后立即单击按钮,这样就不必再次查找

它不像@Shilly建议的那样优雅,但如果您不熟悉javascript,可能更容易理解

var searchString='720p';
var buttons=document.getElementsByClassName(“streamButton”);//查找所有流按钮
如果(按钮)
{
//搜索所有流按钮,直到找到正确的一个
对于(变量i=0;i
10
30
720便士

bao zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi

它不像@Shilly建议的那样优雅,但如果您不熟悉javascript,可能更容易理解

var searchString='720p';
var buttons=document.getElementsByClassName(“streamButton”);//查找所有流按钮
如果(按钮)
{
//搜索所有流按钮,直到找到正确的一个
对于(变量i=0;i
10
30
720便士


abcd
我不确定你投了什么反对票,这似乎是一个很有道理的问题。虽然我对一些事情不确定。你说你无法编辑页面,你只是在浏览器控制台中运行这个javascript吗?您需要这样做是有原因的吗?是的,我正在本地运行它,这是因为我试图通过单击此按钮获取仅在加载的页面上可用的某些数据。为什么要使用eval?因为我认为我需要这样做才能解释连接的字符串。通常,避免使用
eval()
除非所有其他可能性都已用尽。我不确定你投了什么反对票,这似乎是一个相当合理的问题。虽然我对一些事情不确定。你说你无法编辑页面,你只是在浏览器控制台中运行这个javascript吗?您需要这样做是有原因的吗?是的,我正在本地运行它,这是因为我试图通过单击此按钮获取仅在加载的页面上可用的某些数据。为什么要使用eval?因为我认为我需要这样做才能解释连接的字符串。通常,避免使用
eval()
除非所有其他可能性都已用尽。谢谢,但我需要使用标准的JS。谢谢,但我需要使用标准的JS。你能添加一些代码来实际单击按钮吗?只需在末尾添加
buttonoclick.click()
,谢谢。我选择了另一种解决方案,因为它对我的JS水平更为清晰,但我会研究你的代码以确保我“理解”。你能添加实际上也会单击按钮的代码吗?只需在末尾添加
buttonoclick.click()
,谢谢。我选择了另一个解决方案,因为它对我的JS水平更为清晰,但我会研究你的代码以确保我“明白”。我想我会比你建议的其他答案更明白这一点(因为我是JS新手)。我有几个问题:行:var button=document.getElementsByClassName('streamButton')[“+buttonNum+”]"; 似乎对连接有点困惑。你打算这样写吗?另外,searchString包含在innerHTML中,因此长度与它不一样,所以我已经处理了该检查。@Lorccan你说得对,我一定是在发布javascript之前弄坏了它。我已经更新了它来修复它(并且删除了精确的匹配检查,因为它不是您想要的)。如果这是你的答案,请接受它。:)如果我还遗漏了什么,请告诉我@Lorccan实际上,我又看了一遍答案,并将其修改为使用一个简单的
for
循环。上次我无缘无故地把所有的钮扣都拿了过来。谢谢。这是有效的,我明白发生了什么!我想我会得到比其他答案更多的答案,因为你建议的原因(因为我是JS新手)。我有几个问题:行:var button=document.getElementsByClassName('streamButton')[“+buttonNum+”]”似乎对连接有点困惑。您是这样写的吗?另外,searchString包含在innerHTML中,因此长度与它不一样,因此我必须处理它