前言:
此刻朋友们对“html支付成功界面源码”可能比较看重,咱们都想要知道一些“html支付成功界面源码”的相关知识。那么小编在网摘上收集了一些有关“html支付成功界面源码””的相关文章,希望兄弟们能喜欢,姐妹们一起来学习一下吧!Java中解析HTML框架之Jsoup
场景是这样的,本来是想申请一个第三方支付接口判断用户支付是否成功,后来发现不需要申请接口也可以通过订单号查询页面获取支付结果,这样就可以直接解析html来判断支付结果了,这就引入了本文的主题,Jsoup解析html
当然jsoup不只有上面的应用场景,它还有一个应用场景,就是爬虫!
题外话:上面场景中,使用支付接口其实才是最稳当的办法,但是支付接口申请周期长,而且一些情况下并不是免费的,再者一些支付接口只支持一种语言,可能和本项目不是一个语言(比如项目是Java的,但是人家提供的支付接口只支持PHP),这样增加了系统复杂度,如果业务量大且要求准确的场景下应当使用支付接口,否则可以取巧解析html,解析html有一个不好的地方就是如果html结构变化了,那么接口就得重写,都有优缺点,看场景选择。
Jsoup简介与使用
官网:
jsoup 提供了简便的API,使用了HTML5 DOM方法和CSS选择器用来解析HTML。其实现了WHATWG HTML5 规范,像浏览器一样解析HTML。
从文件,URL,字符串抓取和解析HTML使用DOM遍历或者CSS选择器来查找和提取数据操作HTML元素,属性和文字清除用户提交的安全白名单以外的内容,以防止XSS攻击美化HTML引入依赖
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.11.2</version></dependency>解析HTML从字符串解析
String html = "<html><head><title>First parse</title></head>" + "<body><p>Parsed HTML into a doc.</p></body></html>";Document doc = Jsoup.parse(html);从URL解析
// 简洁版Document doc = Jsoup.connect(";).get();String title = doc.title();//完整版doc = Jsoup.connect(";) .data("query", "Java") .userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36") .cookie("auth", "token") .timeout(3000) .post();从文件解析
File input = new File("/tmp/input.html");Document doc = Jsoup.parse(input, "UTF-8", ";);提取HTML遍历HTML
File input = new File("/tmp/input.html");Document doc = Jsoup.parse(input, "UTF-8", ";);Element content = doc.getElementById("content");Elements links = content.getElementsByTag("a");for (Element link : links) { String linkHref = link.attr("href"); String linkText = link.text();}提取数据
String html = "<p>An <a href=';><b>example</b></a> link.</p>";Document doc = Jsoup.parse(html);Element link = doc.select("a").first();String text = doc.body().text(); // "An example link"String linkHref = link.attr("href"); // ";String linkText = link.text(); // "example""String linkOuterH = link.outerHtml(); // "<a href=";><b>example</b></a>"String linkInnerH = link.html(); // "<b>example</b>"相对路径转换成绝对路径,一些a标签使用的是相对路径,下面的代码可以将其转换成绝对路径
Document doc = Jsoup.connect(";).get();Element link = doc.select("a").first();String relHref = link.attr("href"); // == "/"String absHref = link.attr("abs:href"); // ";CSS选择器
Jsoup支持CSS选择器,用的是 Element.select(String selector)方法
File input = new File("/tmp/input.html");Document doc = Jsoup.parse(input, "UTF-8", ";);Elements links = doc.select("a[href]"); // a with hrefElements pngs = doc.select("img[src$=.png]"); // img with src ending .pngElement masthead = doc.select("div.masthead").first(); // div with class=mastheadElements resultLinks = doc.select("h3.r > a"); // direct a after h3
如何快速定位页面上元素的内容?答案是打开Chrome,按F12打开开发者工具,定位到想要的DOM节点,右键,copy,选择Copy selector,即可生成CSS选择器,类似于body > div > div.content > div.col2 > div > h3:nth-child(10)
遗憾的是Jsoup不支持Xpath选择器,但是早就有人意识到这个问题了,所以诞生了JsoupXpath
JsoupXpath 是一款纯Java开发的使用xpath解析提取html数据的解析器,针对html解析完全重新实现了W3C XPATH 1.0标准语法,xpath的Lexer和Parser基于Antlr4构建,html的DOM树生成采用Jsoup,故命名为JsoupXpath. 为了在java里也享受xpath的强大与方便但又苦于找不到一款足够好用的xpath解析器,故开发了JsoupXpath。JsoupXpath的实现逻辑清晰,扩展方便, 支持完备的W3C XPATH 1.0标准语法,W3C规范: ,JsoupXpath语法描述文件Xpath.g4
项目地址:
感兴趣的可以看一下测试用例:里面包含了大量的使用场景:
操作HTML
jsoup可以在插入、删除、提取HTML,直接看例子代码
设置属性
//设置属性doc.select("div.comments a").attr("rel", "nofollow");doc.select("div.masthead").attr("title", "jsoup").addClass("round-box");插入html
//插入htmlElement div = doc.select("div").first(); // <div></div>div.html("<p>lorem ipsum</p>"); // <div><p>lorem ipsum</p></div>div.prepend("<p>First</p>");div.append("<p>Last</p>");// now: <div><p>First</p><p>lorem ipsum</p><p>Last</p></div>Element span = doc.select("span").first(); // <span>One</span>span.wrap("<li><a href=';></a></li>");// now: <li><a href=";><span>One</span></a></li>设置文本
//设置文本Element div = doc.select("div").first(); // <div></div>div.text("five > four"); // <div>five > four</div>div.prepend("First ");div.append(" Last");// now: <div>First five > four Last</div>避免XSS攻击( cross-site scripting )
String unsafe = "<p><a href='; onclick='stealCookies()'>Link</a></p>";String safe = Jsoup.clean(unsafe, Whitelist.basic());// now: <p><a href="; rel="nofollow">Link</a></p>参考
标签: #html支付成功界面源码 #jsoupjava #java读html #javacss路径 #htmlselectdom