【问题标题】:access elements created by JavaScript at runtime (document.write)访问 JavaScript 在运行时创建的元素 (document.write)
【发布时间】:2011-10-28 16:35:40
【问题描述】:

我正在制作一个从 web 获取数据的 iphone 应用程序,我使用 HPPLE 来解析 html,一切正常,但在同样的情况下,我无法访问由 html 网页中的 JavaScript (document.write) 动态创建的元素。这是我的 html 网络源代码page source

<table dir = "rtl .......">
<tbody>
<script src = "get.aspx?type=js&file=ajax&rev=3"......>
<script language = "JavaScript" src = "get.aspx?type=js&file=mc&rev=6"></script>
<script>..</script>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>
<script>..</script>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>

我可以使用 safari 浏览器的开发工具查看所有标记为

的元素,但是当我尝试下载 html 代码时,我得到的源代码不包含我想要的 html 标签。对不起我的英语不好。我希望有人能帮助我。

【问题讨论】:

    标签: javascript iphone html html-parsing


    【解决方案1】:

    获得 JavaScript 支持的最简单解决方案是使用UIWebView。它不需要添加到视图层次结构中。

    UIWebView *webView = [[UIWebView alloc] init];
    NSString *url = @"http://www.google.com";
    webView.delegate = self;
    frames = 0; // NSUInteger instance variable to track frame loads
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];    
    

    UIWebViewDelegate 方法

    - (void)webViewDidStartLoad:(UIWebView *)webView {
        frames++;
    }
    
    - (void)webViewDidFinishLoad:(UIWebView *)webView {
        frames--;
        if (frames > 0) return;
    
        NSString *document = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
    
        // Use HPPLE to parse
    }
    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
        // Handle error
    }
    

    现在您有了 document 文本,您可以将其传递给 HPPLE

    【讨论】:

    • 感谢 Jason,webViewDidFinishLoad 怎么样:这个方法调用了多个。
    • 该方法在页面上每帧调用一次。如果您知道该页面不会有框架集/iframe,那么您可以假设它只会被调用一次
    【解决方案2】:

    您可以使用浏览器的开发者工具获得这样的 HTML。右键单击那里的&lt;html&gt; 标签并选择“编辑为 Html”。复制此代码并将其粘贴到某个 html 文件中。

    您也可以复制部分代码。在这种情况下,您需要右键单击包含您需要的代码的特定标签(包装标签)。

    【讨论】:

    • 但我想下载 html 数据而不是复制和过去
    • 比你有麻烦了,我的朋友。 “wget”之类的工具将无法为您提供帮助。您需要下载 javascript 并重现其操作。
    • 它不仅仅是 html 解析。它解析和执行javascript。我从来没有做过那样的事情。如果我需要这样做 - 我将从谷歌搜索主题开始:“浏览器框架”
    【解决方案3】:

    我自己从未使用过 hpple,但看描述,它没有说明解析和执行 javascript。

    您在 Safari 浏览器工具中看到的是 DOM 的可视化表示。这是浏览器从 HTML 生成的内容。加载初始 HTML 后,可以使用 Javascript 对其进行修改。

    hpple 旨在解析原始 HTML,但不会包含任何使用 javascript 创建的 DOM 元素。所以你卡在那里。希望这里有人知道一个可以解析 javascript 的工具,这样你就可以做你想做的事了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-21
      • 2012-06-14
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多