如何使用 Javascript(没有 id 或 class)点击锚标签
How to click anchor tag using Javascript (has no id or class)
我正在创建一个 Javascript 小书签来填写网站上的表格以供测试(我无法修改该网站)。
我似乎无法单击列表项中包含的锚标记。
所以网站结构是这样的:
<Div>
<ul class="exampleClass">
<li class="col-xs-3 col-sm-2" value="8"><a>8th</a></li>
<li class="col-xs-3 col-sm-2" value="9"><a>9th</a></li>
<li class="col-xs-3 col-sm-2" value="10"><a>10th</a></li>
</ul>
</Div>
您会注意到,锚标记没有任何 id 或 class。
我的书签看起来像这样:
javascript:
var newVar = {
formFill: function() {
document.querySelectorAll("#ReasonValue")[0].value='2';
document.find_element_by_xpath(".//a[contains(text(), '10th')]").click();
}
};
newVar.formFill()
我只需要一种方法来click/select其中一个列表项
非常感谢任何帮助。
您必须使用以下程序:
解析ul calss exampleClass中的li,然后解析li的锚标签,然后找到第10个文本并单击它,如下所示:
var newVar = {
formFill: function() {
var c = document.getElementsByClassName('exampleClass')[0].children;
for(var i=0; i<c.length;i++)
{
var x = c[i].children;
for(var j=0; j<x.length;j++)
{
if(x[j].innerHTML == "10th")
{
console.log(x[j]);
x[j].click();
}
}
}
}
};
newVar.formFill()
<div>
<ul class="exampleClass">
<li class="col-xs-3 col-sm-2" value="8"><a>8th</a></li>
<li class="col-xs-3 col-sm-2" value="9"><a>9th</a></li>
<li class="col-xs-3 col-sm-2" value="10"><a>10th</a></li>
</ul>
</div>
但是在 a 标签中添加 href 或其他内容之前,您将看不到任何内容。
更新
添加了点击提醒:
var newVar = {
formFill: function() {
var c = document.getElementsByClassName('exampleClass')[0].children;
for(var i=0; i<c.length;i++)
{
var x = c[i].children;
for(var j=0; j<x.length;j++)
{
if(x[j].innerHTML == "10th")
{
console.log(x[j]);
x[j].click();
}
}
}
}
};
newVar.formFill()
<div>
<ul class="exampleClass">
<li class="col-xs-3 col-sm-2" value="8"><a>8th</a></li>
<li class="col-xs-3 col-sm-2" value="9"><a>9th</a></li>
<li class="col-xs-3 col-sm-2" value="10"><a onclick="javascript:alert('clicked');">10th</a></li>
</ul>
</div>
只使用 jQuery 会更容易,但我会假设无论出于何种原因您不能使用 jQuery,只能使用 JavaScript.
我会尝试这样的事情:
document.querySelector("ul.exampleClass li[value=10] a").click();
简单示例:
选择具有属性值的所有 li-Tag 中的所有 a-Tag,并以编程方式单击它们。您可以更改查询中的 value 属性,这样只有一项是 "clicked".
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js.js"></script>
</head>
<body>
<Div>
<ul class="exampleClass">
<li class="col-xs-3 col-sm-2" value="8"><a onclick="console.log('clicked 8th')">8th</a></li>
<li class="col-xs-3 col-sm-2" value="9"><a onclick="console.log('clicked 9th')">9th</a></li>
<li class="col-xs-3 col-sm-2" value="10"><a onclick="console.log('clicked 10th')">10th</a></li>
</ul>
</Div>
</body>
</html>
Javascript:
var newVar = {
formFill: function() {
let aTags = document.querySelectorAll("li[value] a");
let event = new Event("click", {preventDefault: false});
aTags.forEach((atag) => {
atag.dispatchEvent(event);
// or without events: atag.click();
});
}
};
document.addEventListener("DOMContentLoaded" , newVar.formFill);
我正在创建一个 Javascript 小书签来填写网站上的表格以供测试(我无法修改该网站)。
我似乎无法单击列表项中包含的锚标记。 所以网站结构是这样的:
<Div>
<ul class="exampleClass">
<li class="col-xs-3 col-sm-2" value="8"><a>8th</a></li>
<li class="col-xs-3 col-sm-2" value="9"><a>9th</a></li>
<li class="col-xs-3 col-sm-2" value="10"><a>10th</a></li>
</ul>
</Div>
您会注意到,锚标记没有任何 id 或 class。
我的书签看起来像这样:
javascript:
var newVar = {
formFill: function() {
document.querySelectorAll("#ReasonValue")[0].value='2';
document.find_element_by_xpath(".//a[contains(text(), '10th')]").click();
}
};
newVar.formFill()
我只需要一种方法来click/select其中一个列表项
非常感谢任何帮助。
您必须使用以下程序:
解析ul calss exampleClass中的li,然后解析li的锚标签,然后找到第10个文本并单击它,如下所示:
var newVar = {
formFill: function() {
var c = document.getElementsByClassName('exampleClass')[0].children;
for(var i=0; i<c.length;i++)
{
var x = c[i].children;
for(var j=0; j<x.length;j++)
{
if(x[j].innerHTML == "10th")
{
console.log(x[j]);
x[j].click();
}
}
}
}
};
newVar.formFill()
<div>
<ul class="exampleClass">
<li class="col-xs-3 col-sm-2" value="8"><a>8th</a></li>
<li class="col-xs-3 col-sm-2" value="9"><a>9th</a></li>
<li class="col-xs-3 col-sm-2" value="10"><a>10th</a></li>
</ul>
</div>
但是在 a 标签中添加 href 或其他内容之前,您将看不到任何内容。
更新
添加了点击提醒:
var newVar = {
formFill: function() {
var c = document.getElementsByClassName('exampleClass')[0].children;
for(var i=0; i<c.length;i++)
{
var x = c[i].children;
for(var j=0; j<x.length;j++)
{
if(x[j].innerHTML == "10th")
{
console.log(x[j]);
x[j].click();
}
}
}
}
};
newVar.formFill()
<div>
<ul class="exampleClass">
<li class="col-xs-3 col-sm-2" value="8"><a>8th</a></li>
<li class="col-xs-3 col-sm-2" value="9"><a>9th</a></li>
<li class="col-xs-3 col-sm-2" value="10"><a onclick="javascript:alert('clicked');">10th</a></li>
</ul>
</div>
只使用 jQuery 会更容易,但我会假设无论出于何种原因您不能使用 jQuery,只能使用 JavaScript.
我会尝试这样的事情:
document.querySelector("ul.exampleClass li[value=10] a").click();
简单示例: 选择具有属性值的所有 li-Tag 中的所有 a-Tag,并以编程方式单击它们。您可以更改查询中的 value 属性,这样只有一项是 "clicked".
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js.js"></script>
</head>
<body>
<Div>
<ul class="exampleClass">
<li class="col-xs-3 col-sm-2" value="8"><a onclick="console.log('clicked 8th')">8th</a></li>
<li class="col-xs-3 col-sm-2" value="9"><a onclick="console.log('clicked 9th')">9th</a></li>
<li class="col-xs-3 col-sm-2" value="10"><a onclick="console.log('clicked 10th')">10th</a></li>
</ul>
</Div>
</body>
</html>
Javascript:
var newVar = {
formFill: function() {
let aTags = document.querySelectorAll("li[value] a");
let event = new Event("click", {preventDefault: false});
aTags.forEach((atag) => {
atag.dispatchEvent(event);
// or without events: atag.click();
});
}
};
document.addEventListener("DOMContentLoaded" , newVar.formFill);