注入JavaScript以点击html按钮

时间:2019-05-05 19:11:20

标签: javascript swift

我试图将javascript注入WKWebView,以便将商品添加到网站上的购物车中。

我有一个按钮:

<input type="submit" name="commit" value="add to cart" class="button">

这是我的代码:

    webView.evaluateJavaScript("document.querySelector('[value=\"add to cart\"]').click();") { (result, error) in
        if error != nil {
            print("Error: ", result)
        }
    }
//do something

运行此代码时,我收到nil错误。我还尝试插入类型submit作为选择器,但仍然导致nil。 DOM是否可能尚未加载?我尝试通过在评估javascript之前添加一个临时sleep(3)来解决此问题,但仍然没有解决任何问题。

3 个答案:

答案 0 :(得分:0)

您可以按名称获取它,然后向其添加一个点击侦听器。

  document.getElementsByName(“ commit”)[0] .addEventListener('click',myFunction,false);

函数myFunction(){
       //您的代码在这里
}
 

答案 1 :(得分:0)

您几乎明白了。但是,您要在HTML元素上调用click(),然后再为该元素附加事件侦听器。您应该先添加一个eventListener,然后调用click事件。

尝试一下:

  1. 添加事件侦听器:
webView.evaluateJavaScript("document.getElementsByName(\"commit\"]')[0].addEventListener('click', event => { <YOUR CODE GOES HERE> });") { (result, error) in
    if error != nil {
        print("Error: ", result)
    }
}

<YOUR CODE GOES HERE>替换为单击时要执行的操作,或将event => {}回调函数替换为先前定义的函数的名称。

  1. 调用click事件:
webView.evaluateJavaScript("document.getElementsByName('[name=\"commit\"]')[0].click()") { (result, error) in
    if error != nil {
        print("Error: ", result)
    }
}

请记住,document.getElementsByName返回与查询匹配的元素数组,因此返回[0]。如果您输入其他名称为 commit

的输入,可能会造成麻烦

答案 2 :(得分:-1)

<script>
    function testing() {
       //your code here
    }
</script>

<!-- add onclick to yours html button -->

<input type="button" value = "Test" onclick="testing();">