You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在iOS应用中用Swift实现类似Selenium的WebKit自动化?

iOS Swift实现WebKit自动化(类似Selenium效果)

嘿,我之前刚好做过类似的需求,在iOS上用Swift实现WebKit自动化完全没问题!核心思路就是借助WKWebView的JavaScript注入能力——毕竟Selenium能做的DOM操作,本质上都是用JS实现的,我们在iOS里只要调用对应的JS代码就行。

核心原理

Selenium的元素定位(ID/XPath)、输入文本、点击操作,本质都是通过浏览器的DOM API完成的。在iOS的WKWebView中,我们可以通过evaluateJavaScript(_:completionHandler:)方法注入自定义JS代码,直接操作网页DOM,实现和Selenium一样的效果。

具体实现步骤

1. 配置WKWebView

首先需要在项目中集成WKWebView,并确保启用JavaScript(默认是开启的,不过显式配置更稳妥),同时设置导航代理来监听页面加载状态:

import UIKit
import WebKit

class WebAutomationVC: UIViewController, WKNavigationDelegate {
    var webView: WKWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 配置WKWebView
        let webConfig = WKWebViewConfiguration()
        webConfig.preferences.javaScriptEnabled = true
        
        webView = WKWebView(frame: view.bounds, configuration: webConfig)
        webView.navigationDelegate = self
        view.addSubview(webView)
        
        // 加载Google页面
        if let url = URL(string: "https://www.google.com") {
            webView.load(URLRequest(url: url))
        }
    }
}

2. 封装自动化操作方法

我们可以封装几个通用方法,分别处理“通过ID输入文本”、“通过XPath点击元素”等操作,这些方法本质是注入对应的JS代码:

extension WebAutomationVC {
    // 通过ID定位元素并输入文本
    func inputTextById(elementId: String, text: String, completion: ((Error?) -> Void)?) {
        let jsCode = """
            const element = document.getElementById('\(elementId)');
            if (element) {
                element.value = '\(text)';
                true;
            } else {
                false;
            }
        """
        webView.evaluateJavaScript(jsCode) { result, error in
            if let error = error {
                completion?(error)
                return
            }
            if let success = result as? Bool, !success {
                completion?(NSError(domain: "WebAutomation", code: -1, userInfo: [NSLocalizedDescriptionKey: "Element not found"]))
            } else {
                completion?(nil)
            }
        }
    }
    
    // 通过XPath定位元素并触发点击
    func clickElementByXPath(xpath: String, completion: ((Error?) -> Void)?) {
        let jsCode = """
            const element = document.evaluate('\(xpath)', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            if (element) {
                element.click();
                true;
            } else {
                false;
            }
        """
        webView.evaluateJavaScript(jsCode) { result, error in
            if let error = error {
                completion?(error)
                return
            }
            if let success = result as? Bool, !success {
                completion?(NSError(domain: "WebAutomation", code: -1, userInfo: [NSLocalizedDescriptionKey: "Element not found"]))
            } else {
                completion?(nil)
            }
        }
    }
}

3. 执行完整自动化流程

在页面加载完成的回调中,依次执行输入文本和点击操作:

extension WebAutomationVC {
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        // 第一步:在Google搜索框输入内容(搜索框ID是"APjFqb",可通过网页检查工具获取)
        inputTextById(elementId: "APjFqb", text: "iOS WebKit Automation") { [weak self] error in
            guard let self = self, error == nil else {
                print("输入失败:\(error?.localizedDescription ?? "未知错误")")
                return
            }
            print("输入完成")
            
            // 第二步:点击搜索按钮(搜索按钮的XPath可通过网页检查工具获取)
            self.clickElementByXPath(xpath: "//input[@name='btnK']") { error in
                if let error = error {
                    print("点击失败:\(error.localizedDescription)")
                } else {
                    print("点击完成,开始搜索")
                }
            }
        }
    }
}

注意事项

  • 等待页面加载完成:必须在didFinish回调中执行自动化操作,否则网页元素还未渲染,会出现找不到元素的情况。
  • 元素定位符正确性:要确保ID/XPath是正确的,可以通过Chrome的开发者工具查看网页元素来获取。
  • 错误处理:JS执行可能会出错(比如元素不存在),一定要在completionHandler中处理错误,避免崩溃。
  • App Store审核:如果你的应用要上架App Store,需确保这种自动化操作是用户知情且授权的,不能用于恶意或违反苹果规则的场景。

内容的提问来源于stack exchange,提问作者Dante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:36:37