簡體   English   中英

從BR​​標簽提取文本

[英]Extract Text from BR tags

我以前已經可以使用Selenium提取文本,但是僅提取<BR>標記之間的數字時遇到了麻煩。 這是html代碼的示例。

<DIV class="pagebodydiv">
    <TABLE  CLASS="datadisplaytable" SUMMARY="This table will display needed information." WIDTH="100%">
<TR>
<TD CLASS="nttitle" scope="colgroup" >Working Title</A></TD>
</TR>
<TR>
<TD CLASS="ntdefault">
 Further information on subject
<BR>
    3.000
<BR>
    2.000  
<BR>
<BR>
<BR>
<BR>
<BR>
More information
<BR>
<BR>
</TABLE>

到目前為止,我已經嘗試使用:

WebElement creditinfo = driver.findElement(By.xpath("//div[@class='pagebodydiv']/text()[preceding-sibling::br]

Elements numInfo = doc.select("br");

但是,我一直遇到NoSuchElementException錯誤,InvalidSelectorException錯誤,或者它什么都不返回。 關於如何獲取信息的任何想法?

實際上,您可以選擇<BR>標記之間的文本節點。 在HTML(不是XHTML)中,它們充當自動關閉標簽(如<br/> )。 根據該行為,您可以使用以下命令選擇所有帶有<BR>標記的文本節點:

//TABLE[@CLASS='datadisplaytable']/TR/TD[@CLASS="ntdefault"]
/text()[preceding-sibling::node()[1][self::BR] 
        and following-sibling::node()[1][self::BR]]

那還將選擇空白行和不是數字的字符文本。

您可以刪除在表達式末尾添加[normalize-space(.) != '']的空白節點(現在將僅返回三個節點)。 並且可以選擇使用的位置謂詞在表達式的端節點( [1]來選擇所述第一節點。

下面的表達式選擇包含值2.000的文本節點:

//TABLE[@CLASS='datadisplaytable']/TR/TD[@CLASS="ntdefault"]
/text()[preceding-sibling::node()[1][self::BR] 
        and following-sibling::node()[1][self::BR]][normalize-space(.) != ''][2]

注意:我假設您的源實際上具有標記名,因為在XPath中<TD><td> 我不確定在解析HTML時Selenium對此有多寬容。

這可能會有所幫助:

  WebElement table =driver.findElement(By.xpath("//table[@class='datadisplaytable']"));
   WebElement tbody=table.findElement(By.tagName("tbody"));
   List<WebElement> rows=tbody.findElements(By.tagName("tr"));
   System.out.println("Row  size:"+rows.size());
   ArrayList<String> list=new ArrayList<>();

   for(int i=0;i<rows.size();i++)
   {
     WebElement column = tbody.findElement(By.xpath("//table[@class='datadisplaytable']/tbody/tr[2]/td"));
     if(column.getText().trim().contains("."))
     {
        System.out.println("text : "+column.getText().trim());
        list.add(column.getText().trim());
     }

   }

我認為BR不被視為封閉標簽,因此您將無法提取“封閉文本”。 您可能必須提取TD CLASS="ntdefault"包含的文本,在此所有BR都將被翻譯成換行符。 然后,您將必須執行字符串操作以僅提取您感興趣的部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM