【发布时间】:2019-10-12 06:54:33
【问题描述】:
我正在尝试使用 JavaScript 自动执行一些任务。正在生成网站,因此我无法使用 CSS 选择器,因为它们会随着每次网站刷新而改变。它没有在示例中显示,但可以使用其文本内容来操作按钮(遗憾的是,CSS 无法获得)。
我已经弄清楚(感谢 StackOverflow)如何通过其 Xpath 单击 Web 元素,但仍然不知道如何告诉 JS 等到它出现。
点击元素的代码(工作):
var xPathRes = document.evaluate ('//*[@id="tsf"]/div[2]/div/div[3]/center/input[1]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
xPathRes.singleNodeValue.click();
尝试等待元素出现然后单击它(不起作用):
var selector = "//*[@id='tsf']/div[2]/div/div[3]/center/input[1]";
var time = 500;
if(document.evaluate (selector, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)) {
selector.singleNodeValue.click();
return;
}
else {
setTimeout(function() {
waitForElementToDisplay(selector, time);
}, time);
}
如您所见,示例中的代码是 Google.com 搜索按钮。
我一直使用 Python Selenium 来做这些事情,但在这种情况下我真的不能。
附言。从发布的代码中可以看出,我很讨厌 JS。
感谢您的帮助!
编辑:
按照@folo 代码,我写了这样的代码:
var element = '//*[@id="tsf"]/div[2]/div/div[3]/center/input[1]';
(function checkIfElemExists() {
if (!document.evaluate (element, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)) {
console.log('nope')
window.requestAnimationFrame(checkIfElemExists);
} else {
console.log('okay i exist now! lets do something.')
}
})()
问题是它总是返回“好的,我现在存在!)。即使我在不包含此元素的网站上运行它。
【问题讨论】:
-
waitForElementToDisplay是如何定义的? -
我刚刚意识到它不是。感谢您指出这一点,这是从 Stack 复制的代码。
标签: javascript google-chrome browser automation