首页 > 解决方案 > 如何使用 xpath 自动单击链接

问题描述

我正在寻找一种在页面加载时自动单击按钮或链接的方法。目前,Xpath 方法对我来说似乎是一个不错的选择。我试过的是,

document.evaluate('/html/body/div/div[4]/div[2]/form/p/input', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();

我正在尝试在ezgif 网站上自动单击此按钮。我也尝试使用按钮的 X 和 Y 坐标单击,但它也不起作用。我知道我做错了什么,因为我几乎没有编码经验。有人可以让我朝着正确的方向前进。

在此处输入图像描述 在此处输入图像描述

标签: javascriptjquerybuttonxpathclick

解决方案


如果你检查你的值singleNodeValue,你会发现它是null。这是因为您的 XPath 错误。

正确的完整 XPath 是:/html/body/div[2]/div[4]/div[2]/form/fieldset/p[4]/input

但是,这条路径在未来很可能会中断,因为它依赖于<div>s 和<p>s 位于特定位置。您可以制作一个更“宽松”的 XPath,它仍然可以找到正确的元素。实际上,您可以在 Google Chrome 中轻松地执行此操作,方法是右键单击该按钮,单击 Inspect,然后右键单击 DOM 元素并选择 Copy Xpath。

结果代码将是:

document.evaluate('//*[@id="tool-submit-button"]/input', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();

如果您想在页面加载时使用它,您应该首先检查视频是否已经转换。您可能还需要等待按钮加载:

var checkTimer = setInterval(function() {
    var button = document.evaluate('//*[@id="tool-submit-button"]/input', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    if (button) {
        clearInterval(checkTimer);

        // Only convert if the gif hasn't already been converted
        if (!document.getElementsByTagName("video")[0])
            button.click();
    }
}, 50);

推荐阅读