programing

UI WebView에서 HTML 컨텐츠 읽기

newsource 2023. 6. 4. 10:33

UI WebView에서 HTML 컨텐츠 읽기

로드된 웹 페이지의 원시 HTML 내용을 읽을 수 있습니까?UIWebView?

그렇지 않은 경우 iPhone SDK의 웹 페이지에서 원시 HTML 컨텐츠를 가져올 수 있는 다른 방법이 있습니까(예: .NET과 동등한 것).WebClient::openRead)?

두 번째 질문은 사실 대답하기가 더 쉽습니다.NSString 방법을 확인합니다. 이 방법을 사용하면 URL을 NSURL의 인스턴스로 전달하고(NSString에서 쉽게 인스턴스화할 수 있음) 해당 URL에 페이지의 전체 내용이 포함된 문자열을 반환할 수 있습니다.예:

NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL 
                                                encoding:NSASCIIStringEncoding
                                                   error:&error];

이 코드를 실행한 후,googlePagewww.google.com 용 HTML을 포함합니다.error가져오기에서 발생한 모든 오류를 포함합니다. (사용자는 의 내용을 확인해야 합니다.error가져오기 후.)

(UI WebView에서) 반대 방향으로 가는 것은 조금 더 까다롭지만 기본적으로 같은 개념입니다.보기에서 요청을 가져온 다음 이전과 같이 가져오기를 수행해야 합니다.

NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL 
                                          encoding:NSASCIIStringEncoding
                                             error:&error];

편집: 그러나 두 가지 방법 모두 요청을 두 번 수행하므로 성능이 저하됩니다.현재 로드된 UI WebView에서 다음을 사용하여 컨텐츠를 가져와 이 문제를 해결할 수 있습니다.stringByEvaluatingJavascriptFromString:다음과 같은 방법:

NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString: 
                                         @"document.body.innerHTML"];

이렇게 하면 문서 개체 모델을 사용하여 보기의 현재 HTML 내용을 가져오고 JavaScript를 구문 분석한 다음 HTML의 NSString*으로 제공됩니다.

다른 방법은 먼저 요청을 프로그래밍 방식으로 수행한 다음 요청한 내용에서 UI WebView를 로드하는 것입니다.위의 두 번째 예를 예로 들어 보겠습니다.NSString *page에의 방문의 결과로stringWithContentsOfURL:encoding:error:그런 다음 다음 다음을 사용하여 해당 문자열을 웹 보기로 밀어넣을 수 있습니다.loadHTMLString:baseURL:요청한 NSURL도 보유하고 있다고 가정합니다.

[yourWebView loadHTMLString:page baseURL:requestURL];

그러나 로드하는 페이지에서 발견된 JavaScript를 실행할 수 있을지는 잘 모르겠습니다(메소드 이름,loadHTMLString다소 모호하고, 문서에서는 이에 대해 별로 언급하지 않습니다.)

자세한 정보:

이미 로드된 UI WebView의 내용을 추출하려면 -stringByJavaScriptFromString을 사용합니다.예:

NSString  *html = [webView stringByEvaluatingJavaScriptFromString: @"document.body.innerHTML"];

전체 HTML 원시 데이터를 가져오려면 다음을 사용합니다.<head>그리고.<body>):

NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];

내용이 다음과 같은 NS 문자열에 주의하십시오.URL은 동일한 요청을 하는 UI WebView와 전혀 다른 사용자-에이전트 문자열을 보고합니다.따라서 서버가 사용자-에이전트를 인식하고 요청하는 사용자에 따라 다른 html을 다시 발송하는 경우 올바른 결과를 얻지 못할 수 있습니다.

한참고는 다음과 .@"document.body.innerHTML"위에서 언급한 내용은 본문 태그에만 표시됩니다.사용하는 경우@"document.all[0].innerHTML"당신은 머리와 몸을 둘 다 갖게 될 것입니다.태그를 더 doctype 또는 html 태그를 반환하지 않기 때문에 UI WebView의 완전한 내용은 아니지만 훨씬 더 가깝습니다.

읽기:-

NSString *html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent"];
NSLog(html);    

수정하는 방법:-

html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent=''"];

Swift v3의 경우:

let doc = webView.stringByEvaluatingJavaScript(from: "document.documentElement.outerHTML")

(Xcode 5 iOS 7) iOS 7 및 Xcode 5용 범용 앱의 예.SimpleWebView 링크(Project Zip 소스 코드 예제)에 있는 오픈 소스 프로젝트입니다.

나는 다음과 같은 빠른 확장을 사용합니다.

extension UIWebView {
    var htmlContent:String? {
        return self.stringByEvaluatingJavaScript(from: "document.documentElement.outerHTML")
    }

}

당신은 이것을 시도해야 합니다.

document.documentElement.outerHTML

UI 웹 보기

UIWebView에서 HTML 가져오기'

let content = uiWebView.stringByEvaluatingJavaScript(from: "document.body.innerHTML")

HTML을 UI로 설정WebView

//Do not forget to extend a class from `UIWebViewDelegate` and nil the delegate

func someFunction() {

    let uiWebView = UIWebView()
    uiWebView.loadHTMLString("<html><body></body></html>", baseURL: nil)
    uiWebView.delegate = self as? UIWebViewDelegate
}

func webViewDidFinishLoad(_ webView: UIWebView) {
    //ready to be processed
}

[WKWebView에서 HTML 가져오기/설정]

언급URL : https://stackoverflow.com/questions/992348/reading-html-content-from-a-uiwebview