当前位置: 首页 > 知识库问答 >
问题:

运行Javascript函数填充一个表,然后使用Jsoup解析HTML页面

暴德运
2023-03-14

我正在为我的工作做一个项目,该项目允许用户解析给定的HTML页面,该页面提供有关潜在客户的信息。然而,我面临的问题是,该网页在一个表中显示这些潜在客户信息,据我所知,该表是通过Javascript函数填充的,因此当Jsoup解析文档时,它无法找到该表或其任何内容。以下是我特别关注的HTML:

<table class="none" align="center" bgcolor="white" border="0" cellpadding="1" cellspacing="0" width="100%">
    <tbody><tr class="tm_tt_ftr1">
        <td class="typedata1">&nbsp;</td>
        <td class="typedata1" colspan="3">Name</td>
        <td class="typedata1">Phone</td>
        <td class="typedata1x" colspan="2">$$$ Summary&nbsp;</td>
    </tr>
    <tr class="tm_tt_body">
        <td class="typedata1" title="Lookup this name historical"><center>
        <a href="#" onclick="javascript:Pop_Up('X','Testerson',
        'Testerson','Tes','Test');">
            N</a></center></td>
        <td class="typedata1" colspan="3">&nbsp;Testerson, Test           </td>
        <td class="typedata1">
            <b><a href="rtrpt.cgi?DATE_OPT=US_TERSE
            &amp;RT_SCRIPT=mkcnt/cnt_lookup_phone_cgi.rt&amp;JDATE=TODAY
            &amp;DATE1=TODAY&amp;DATE2=TODAY&amp;QSRC=ALL&amp;DETAIL=N
            &amp;QPAC=631&amp;QPRE=384&amp;QPNUM=6191" title="Search phone history this number" target="_new">P1:</a></b>
            <a href="rtrpt.cgi?
            DATE_OPT=X&amp;RT_SCRIPT=mkcnt/lead_phn_cgi.rt
            &amp;LEAD=011876280" title="Additional phone numbers this lead" target="_new">
            <b>222-222-2222</b></a>
        </td>
        <td width="10%">Charge&nbsp;</td>
        <td width="10%">    49.00</td>
    </tr>
    <tr class="tm_tt_body">
        <td class="typedata1" title="Lookup this name historical" colspan="1"><center>
            &nbsp;</center></td>
            <td class="typedata1" colspan="3">&nbsp;</td>
        <td class="typedata1">&nbsp;
            &nbsp;
            <b>               </b>
        </td>
        <td class="fd_tt_body_neg">Paid&nbsp;</td>
        <td class="fd_tt_body_neg" colspan="1">    49.00</td> <!--This is what I am looking to extract -->
    </tr>
    <tr class="tm_tt_body">
        <td>&nbsp;</td>
        <td class="typedata1" colspan="3">9 Daniel Ln&nbsp;</td>
        <td class="typedata1" colspan="1">Email
    <a id="ld_email" href="mailto:testtesterson@gmail.com?subject='L11876280'">
        testtesterson@gmail.com</a>
        </td>
        <td>Due&nbsp;</td>
        <td>     0.00</td>
    </tr>
    <tr class="tm_tt_body">
            <td>&nbsp;</td>
        <td class="typedata1" colspan="3">&nbsp;</td>
        <td class="typedata1" colspan="1">CB  @ -------</td>
        <td class="typedata1" colspan="1">&nbsp;</td>
        <td class="typedata1" colspan="1">1B&nbsp;</td>
    </tr>
    <tr class="tm_tt_body">
        <td class="typedata1"><center> 111</center></td>
        <td class="typedata1" colspan="3">Springfield NY 11953</td>
        <td class="typedata1" colspan="1">Comm:&nbsp;1314379</td>
        <td colspan="2"><center>DC: ., .</center></td>
    </tr>
    <tr class="tm_tt_body">
        <td class="typedata1" colspan="5">&nbsp;</td>
        <td colspan="2">&nbsp;
        </td>
    </tr>
   </tbody></table>

如上所述,Jsoup根本找不到这个表或它的任何内容。包含此表的div具有如下Javascript函数:

<script language="Javascript">
 function UpdateDiv(){
   $.ajax({
    url: "http://flag.60north.net/cgi-bin/rtrpt_tabpanel2G_New.cgi", 
    type: 'POST', 
    async: true, 
    dataType: 'html', 
    data: "RT_SCRIPT=telemkt/prime/leadcgiUpDate_New.rt&DATE_OPT=X&DETAIL=N&LNUM=" + $("input#LNUM").val(), 
    timeout: 90000, 
    success: 
     function(retData){ 
        $(".Lead_Info").html(retData);

     }
  });
}
</script>

根据我的理解,调用这些函数是为了填充表。我想做的是有一种方法来运行这个函数,以便用领导的信息填充页面,然后使用JSoup解析它。从我个人的研究中,我发现Selenium API允许在超文本标记语言文档中执行Javascript函数,然而,我不认为这将解决我的问题。据我所知,无论Selenium运行什么,在连接到url并检索文档时,都不会对JSoup解析超文本标记语言产生影响。显然,如果J汤有能力这样做,我会让J汤运行函数,然后解析,但这不是一个可用的功能。下一个最好的解决方案是什么,以获得这个线索信息显示?

共有1个答案

邹宣
2023-03-14

您可以尝试这种方法

 WebDriver driver = new ChromeDriver();
 driver.get(url);
 JavascriptExecutor js = (JavascriptExecutor) driver;

 js.executeScript("UpdateDiv();");

然后从WebDriver中提取html并传递给JSoup进行解析和其他操作:

String html = driver.getPageSource();
Document doc = Jsoup.parse(html);
 类似资料:
  • 我想解析出这个Nasa页面上的描述,页面底部的文字 我该怎么做?

  • 我需要的是在第二个中获取第二个 的文本,并对表中的每一组 标记执行此操作。

  • 问题内容: 我正在尝试使用jsoup解析HTML。这是我第一次使用jsoup,并且我也阅读了有关它的一些教程。以下是我要解析的HTML表- 如果您看到我的下表,则它现在有3个(我只是为了理解目的将其缩短为3个表行,但总的来说会更多)。现在,我想从我的下表中提取出它的对应信息,例如-我将提取其群集状态及其状态为关闭的所有主机名。 正如你可以看到下面的群集名称,我有两个主机名和其地位,但地位。 因此,

  • 正如您在下面看到的集群名称,我有两个主机名和,其中状态为,但状态为。 因此,我将打印作为集群名,并打印作为主机名,因为它已关闭。使用JSOUP可以做到这一点吗? 到目前为止,我能够使用jsoup提取整个HTML表,但不确定如何提取集群名和主机名- 更新:- 表中可能有两个集群名称,如下所示- 现在,如果您看到上面,我有两个集群名称--一个是,另一个是,所以我想找到所有仅为集群名称关闭的计算机。

  • 我知道在解析HTML表方面有很多问题。然而,在做了一些研究并研究了Jsoup之后,我有点被它难倒了。 我有时间表 我想解析以取出标记的文本,但要保持某种格式。 我更愿意将数据分割成可管理的块。也许我可以做一个? 但是,这意味着没有演讲时间。除非不需要计算空格和计算时间,假设每个空格是15分钟。

  • 问题内容: 这是我必须从中提取值5390.85,5428.15,5376.15和5413.85的HTML源。我想使用jsoup做到这一点。但是我对jsoup比较陌生(今天我开始使用它)。那我该怎么办呢? 我已经使用jsoup提取了网站的内容。但是如何提取我需要的值?提前致谢 问题答案: 尝试这样的事情: 这是打印输出:-