【发布时间】:2017-11-20 20:41:26
【问题描述】:
我正在尝试做以下练习。我想从 Chrome 开发控制台循环浏览属于一个类的所有按钮并单击每个按钮。 在我不知道来源的页面上,这是一个类似于脚本的机器人。可能这是一个糟糕的问题……请不要踢我太多。
代码如下,但点击只在第一个元素上执行:
Clicker();
function Clicker ()
{
var buttons = document.getElementsByClassName('myclass');
for (var i = 0; i <= buttons.length; i++) {
if(buttons[i])
{
if(buttons[i].firstChild.nodeValue)
{
if(!buttons[i].disabled)
{
buttons[i].click();
}
}
}
}
return 'execution complete';
}
按钮的写法如下:
<button class="myclass" data-action="perfom_job.perform_job">
Perform Some Job
</button>
<button class="myclass" data-action="perfom_job.perform_job">
Perform Some Job
</button>
<button class="myclass" data-action="perfom_job.perform_job">
Perform Some Job
</button>
<button class="myclass" data-action="perfom_job.perform_job">
Perform Some Job
</button>
如果我将按钮 [i] 插入到 console.log() 中,则会在元素检查器中查看右键。 可能是什么问题?
点击的按钮变成
<button class="myclass" disabled="">
Perform Some Job
</button>
更新 1
我也尝试过这样的功能
Clicker();
function Clicker ()
{
var buttons = document.getElementsByClassName('myclass');
var enabled_buttons = [];
for (var i = 0; i < buttons.length; i++) {
if(buttons[i])
{
if(buttons[i].firstChild.nodeValue)
{
if(!buttons[i].disabled)
{
enabled_buttons.push(buttons[i]);
}
}
}
}
console.log(enabled_buttons.length);
if(enabled_buttons.length > 0)
{
enabled_buttons[0].click();
Clicker();
}
}
导致递归访问函数时进入无限循环,点击后看不到启用较少的元素。
更新 2
我使用 Selenium 和我的 Visual Studio Community 2017 进行了一些设置,并尝试使用 Microsoft Edge 自动化进行相同的设置,以便更清楚地获取错误!
using (IWebDriver driver = new EdgeDriver())
{
driver.Url = txtUrl.Text;
IReadOnlyCollection<IWebElement> query = driver.FindElements(By.ClassName("myclass"));
foreach(IWebElement elem in query)
{
elem.Click();
}
}
循环中的第一个元素没问题,我得到的第二个元素:
System.InvalidOperationException: 'Element is obscured'
更新 3
这种错误是由于浏览器无法正确导航到元素的问题引起的。请参阅我的回复,了解我是如何解决的
【问题讨论】:
-
你如何确定只有第一个被点击?
-
我在页面上看到它的按钮更改为禁用
-
请添加minimal, complete, and verifiable example,因为您的脚本可以正常工作(即使“越界”
for条件):jsfiddle.net/Lwohsk4s -
您显示的代码并未显示您禁用按钮,即您没有类似
buttons[i].disabled=true -
我不知道背后的代码的问题。我只需要使用脚本进行测试。
标签: javascript google-chrome loops button click