刚开始的思路是,通过文章的字段进行findElementBy(id/class),但通过解析前端代码,发现文本字段没有id/class,难以直接获取
通过向上折叠发现有class/id字段
于是通过jsoup获取
Document preDocument = Jsoup.parse(driver.getPageSource());
WebElement element = driver.findElement(By.xpath("//div[@id='js_content']"));
Element preList = preDocument.getElementById("js_content");
然后通过编写正则表达式获取文本
import java.util.regex.Pattern;
public class Html2TextUtil {
//从html中提取纯文本
public static String Html2Text(String inputString) {
String htmlStr = inputString; // 含html标签的字符串
String textStr = "";
java.util.regex.Pattern p_script;
java.util.regex.Matcher m_script;
java.util.regex.Pattern p_style;
java.util.regex.Matcher m_style;
java.util.regex.Pattern p_html;
java.util.regex.Matcher m_html;
try {
String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>"; // 定义script的正则表达式{或<script[^>]*?>[\\s\\S]*?<\\/script>
String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>"; // 定义style的正则表达式{或<style[^>]*?>[\\s\\S]*?<\\/style>
String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式
p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
m_script = p_script.matcher(htmlStr);
htmlStr = m_script.replaceAll(""); // 过滤script标签
p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
m_style = p_style.matcher(htmlStr);
htmlStr = m_style.replaceAll(""); // 过滤style标签
p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
m_html = p_html.matcher(htmlStr);
htmlStr = m_html.replaceAll(""); // 过滤html标签
textStr = htmlStr;
} catch (Exception e) {System.err.println("Html2Text: " + e.getMessage()); }
//剔除空格行
textStr=textStr.replaceAll("[ ]+", " ");
textStr=textStr.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
return textStr;// 返回文本字符串
}
}
摘取:Java实现从Html文本中提取纯文本_fjssharpsword的博客-CSDN博客
但现在就出现了一个问题:prelist 是 element 格式,无法直接进行正则
尝试了网上的svg转String
失败!
决定尝试下最简单的toString()
String s = preList.toString();
String s1 = Html2TextUtil.Html2Text(s);
System.out.println(s1);
解决