标签: jsoup

对于所见即所得的编辑器来说,jsoup Whitelist放松模式太严格了

我正在尝试使用jsoup来清理从我的客户端中的一个wysiwyg发布的html(当它发生时)

松弛模式看起来不够宽松,因为默认情况下它会剥离span元素和任何样式属性.

例如

String text = "<p style="color: #ff0000;">foobar</p>";

   Jsoup.clean(text, Whitelist.relaxed());
Run Code Online (Sandbox Code Playgroud)

会输出

<p>foobar</p>
Run Code Online (Sandbox Code Playgroud)

<span>foobar</span>
Run Code Online (Sandbox Code Playgroud)

将完全删除.

有没有人有任何使用Jsoup消除XSS攻击可能性的经验,仍然允许上述元素和属性通过?

编辑:我已经使用以下内容了.任何人都可以建议这是多么脆弱吗?

Jsoup.clean(pitch, Whitelist.relaxed().addTags("span").addAttributes(":all","style"));
Run Code Online (Sandbox Code Playgroud)

编辑2:是否有人在生产中使用了owasp库.它看起来正确消毒,同时保留正确的样式.OWASP

java security xss wysiwyg jsoup

8
推荐指数
1
解决办法
4149
查看次数

如何使用jsoup来整理html

我正在使用jsoup,整理一些html非常好,但我有一个无效的html如下:

<p>The recurrence, in close succession <ul><li>list item 1</li><li>list item 2</li></ul> second part of thisssss
Run Code Online (Sandbox Code Playgroud)

我想得到的是:

<p>The recurrence, in close succession </p><ul><li>list item 1</li><li>list item 2</li></ul> <p>second part of thisssss</p>
Run Code Online (Sandbox Code Playgroud)

那么jsoup能够整理html并返回这个输出吗?

谢谢

jsoup

8
推荐指数
1
解决办法
4083
查看次数

如何使用jsoup替换带span标签的单词?

假设我有以下html:

<html>
<head>
</head>
<body>
    <div id="wrapper" >
         <div class="s2">I am going <a title="some title" href="">by flying</a>
           <p>mr tt</p>
         </div> 
    </div>
</body>    
</html>
Run Code Online (Sandbox Code Playgroud)

文本节点中任何等于或大于4个字符的单词,例如单词"going"将替换<span>going<span>为原始html中的html内容(不是文本)而不更改任何其他内容.

如果我尝试做像element.html(替换)这样的事情,问题是如果让当前元素<div class="s2">也将擦除<a title="some title"

screen-scraping jsoup

7
推荐指数
1
解决办法
5392
查看次数

Jsoup:在无CSS的HTML中提取两个块之间的所有HTML

使用Jsoup在符合此模式的两个块之间提取所有HTML(字符串,文档或元素)的最佳方法是什么:

<strong>
 {any HTML could appear here, except for a <strong> pair}
</strong>

 ...
 {This is the HTML I need to extract. 
  any HTML could appear here, except for a <strong> pair}
 ... 

<strong>
 {any HTML could appear here, except for a <strong> pair}
</strong>
Run Code Online (Sandbox Code Playgroud)

使用正则表达式可能很简单,如果我将它应用于整个body.html():

(<strong>.+</strong>)(.+)(<strong>.+</strong>)
                       ^
                       +----- There I have my HTML content
Run Code Online (Sandbox Code Playgroud)

但是,当我从类似的挑战中学习时,如果我使用已经解析过Jsoup的DOM,性能可以得到改善(即使代码稍长) - 除了这次既不能Element.nextSibling()也不能解决问题Element.nextElementSibling().

例如,我在Jsoup中搜索了类似jQuery的nextUntil,但是找不到类似的东西.

是否有可能提出比上述基于正则表达式的方法更好的东西?

java html-parsing jsoup

7
推荐指数
1
解决办法
1707
查看次数

可以jsoup处理元刷新重定向

我有一个问题,使用jsoup,我想要做的是从网址获取一个文件,它会重定向到另一个基于元刷新网址的网址,这是无法正常工作,清楚地解释我是否输入了一个名为http://的网站网址www.amerisourcebergendrug.com将根据元刷新网址自动重定向到http://www.amerisourcebergendrug.com/abcdrug/但我的jsoup仍然坚持http://www.amerisourcebergendrug.com而不是重定向和取自http://www.amerisourcebergendrug.com/abcdrug/

Document doc = Jsoup.connect("http://www.amerisourcebergendrug.com").get();
Run Code Online (Sandbox Code Playgroud)

我也试过用,

Document doc = Jsoup.connect("http://www.amerisourcebergendrug.com").followRedirects(true).get();
Run Code Online (Sandbox Code Playgroud)

但两者都不起作用

有什么解决方法吗?

更新: 页面可能使用元刷新重定向方法

java jsoup

7
推荐指数
1
解决办法
5379
查看次数

Jsoup 获取页面中的所有链接

我正在实施一个网络机器人,它必须从页面中获取所有链接并选择所需的链接。除了我遇到一个链接在“表”或“跨度”标签内的问题外,我一切都在工作。这是我的代码片段:

Document doc = Jsoup.connect(url)
    .timeout(TIMEOUT * 1000)
    .get();
Elements elts = doc.getElementsByTag("a");
Run Code Online (Sandbox Code Playgroud)

这是示例 HTML:

<table>
  <tr><td><a href="www.example.com"></a></td></tr>
</table>
Run Code Online (Sandbox Code Playgroud)

我的代码不会获取此类链接。使用 doc.select 也无济于事。我的问题是,如何从页面中获取所有链接?

编辑:我想我知道问题出在哪里。我遇到问题的页面写得很糟糕,HTML 验证器抛出了大量错误。这会导致问题吗?

hyperlink jsoup

7
推荐指数
1
解决办法
1万
查看次数

jsoup线程安全

Jsoup parse(String html)并不是线程安全的.如何同时使用Jsoup解析多个文档?谢谢

java jsoup

7
推荐指数
2
解决办法
2670
查看次数

在Java中查找嵌套匹配的HTML标记

我在Java中使用有效的HTML字符串(使用jsoup解析,因此所有标签都有结束标记并且形成良好),我需要查找给定标记名称的内容,例如,使用以下内容串:

<p> hi! </p>
<p> hi again! </p>
<h1> foo </h1>
<p> bye! </p>
Run Code Online (Sandbox Code Playgroud)

鉴于标签'p',我期望的结果是:

1)<p> hi! </p>
2)<p> hi again! </p>
3)<p> bye! </p>
Run Code Online (Sandbox Code Playgroud)

我通过简单地使用apache.commons.lang库和StringUtils.substringsBetween(String html,String"opentag",String"endtag")方法来完成这一点,该方法将返回一个具有所需结果的String数组.但是,当我搜索嵌套了完全相同标签的标签时(常见的例子是div)我会得到错误的结果(我理解为什么)

例如,使用...

<div>
 <p> hey there </p>
 <div>  
  <div>
   <p> asd </p>
  </div>
 </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我期待3个结果:1)

<div>
 <p> hey there </p>
 <div>  
  <div>
   <p> asd </p>
  </div>
 </div>
</div>
Run Code Online (Sandbox Code Playgroud)

2)

<div>  
 <div>
  <p> asd </p>
 </div>
</div>
Run Code Online (Sandbox Code Playgroud)

3)

<div>
 <p> asd </p>
</div>
Run Code Online (Sandbox Code Playgroud)

但是我得到一个(我知道它是因为标签出现在String中的方式)我只是不知道如何解决它.我现在已经苦苦挣扎了两个星期了,我已经尝试过使用正则表达式而没有任何成功,我也尝试将html字符串拆分为一系列行,但也失败了.

你会如何解决这个问题?我已经知道有很多库使用jsoup的getAllElementsByTag(tagName)等方法为你做这件事,但我想自己做.任何提示都表示赞赏!

html java tags jsoup

7
推荐指数
1
解决办法
2832
查看次数

使用FileOutputStream时拒绝访问

我有一个问题让这个工作.它包含一个由多条信息组成的字符串.但是,当我尝试将String写入文件以便跟踪程序随时间的变化时,我收到一个拒绝访问错误:

 void writeToFile(String input) throws Exception{
            File file = new File("C:\\WeatherExports\\export.txt");
            if(!file.exists()){
                    file.createNewFile();
            }
            BufferedWriter inFile = new BufferedWriter(new FileWriter(file,true));
            try{
                    inFile.append(input);
                    inFile.newLine();
            } catch(Exception e){
                    e.printStackTrace();
            }
            inFile.close();
    }
Run Code Online (Sandbox Code Playgroud)

STACKTRACE YEILDS:

java.io.FileNotFoundException: C:\WeatherExports\export.txt (Access is denied)
Run Code Online (Sandbox Code Playgroud)

完整Stacktrace:

java.io.FileNotFoundException: C:\WeatherExports\export.txt (Access is denied)
at java.io.FileOutputStream.openAppend(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileWriter.<init>(Unknown Source)
at org.weatheralert.InfoManipMethods.writeToFile(InfoManipMethods.java:58)
at org.weatheralert.Form.actionPerformed(Form.java:108)
at javax.swing.JTextField.fireActionPerformed(Unknown Source)
at javax.swing.JTextField.postActionEvent(Unknown Source)
at javax.swing.JTextField$NotifyAction.actionPerformed(Unknown Source)
at javax.swing.SwingUtilities.notifyAction(Unknown Source)
at javax.swing.JComponent.processKeyBinding(Unknown Source)
at javax.swing.JComponent.processKeyBindings(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)

java filenotfoundexception access-denied bufferedwriter jsoup

7
推荐指数
2
解决办法
3万
查看次数

使用重定向Java/Jsoup登录安全网站

我如何阅读和定位我需要在jsoup中输入登录信息的位置才能访问VPN上的网络?我对所涉及的步骤/主题的解释以及使用java的编程方法感兴趣(基本上如何使用jsoup在java中编写代码). 注意:对于所有重定向,我很难理解在jsoup-login中发生了什么以及如何/何时/在哪里编码.

到目前为止,这是我的工作流程:

我有一个目标页面,如下所示

[debug] status code 302 : https://centrale.landingnetwork.com/gp/stores/www.landingnetwork.com/gp/home/
Run Code Online (Sandbox Code Playgroud)

相应的标题:

{Server=Server, Date=Fri, 02 Mar 2018 04:36:49 GMT, Content-Type=text/html; charset=UTF-8, Transfer-Encoding=chunked, Connection=keep-alive, x-REQUESTNAME-id-1=ZZZAAA3YYYBBB9CCC999, x-frame-options=SAMEORIGIN, x-REQUESTNAME-id-2=123aaaWww1111iiiiix7777yyyzzzqqqhhhiiiE/wPUx/IaHiw6hfs7Y7/Gwa1X0, Location=https://centrale.landingnetwork.com/gp/stores/www.landingnetwork.com/gp/signin/gi-signin.html/123-1234567-1234567?ie=UTF8&landat=%2Fgp%2Fstores%2Fwww.landingnetwork.com%2Fgp%2Fhome%2F123-1234567-1234567&ort=1122334455.98765&rrt=1112223334.12121, Vary=Accept-Encoding,User-Agent, Content-Encoding=gzip, Set-cookie=session-id-scsus=123-1234567-1234567; path=/; domain=.landingnetwork.com; expires=Tue, 01-Jan-2036 00:00:01 GMT}
Run Code Online (Sandbox Code Playgroud)

当我在java/jsoup中导航到这个URL时,我得到了各种重定向.这是我的重定向的踪迹:(接下来的顺序)

[debug] status code 302 : https://centrale.landingnetwork.com/gp/stores/www.landingnetwork.com/gp/signin/gi-signin.html/123-1234567-1234567?ie=UTF8&landat=%2Fgp%2Fstores%2Fwww.landingnetwork.com%2Fgp%2Fhome%2F123-1234567-1234567&ort=1122334455.98765&rrt=1112223334.12121
Run Code Online (Sandbox Code Playgroud)

相应的标题:

{Server=Server, Date=Fri, 02 Mar 2018 04:36:49 GMT, Content-Type=text/html; charset=UTF-8, Transfer-Encoding=chunked, Connection=keep-alive, x-REQUESTNAME-id-1=ZZZAAA3YYYBBB9CCC999, x-frame-options=SAMEORIGIN, x-REQUESTNAME-id-2=123aaaWww1111iiiiix7777yyyzzzqqqhhhiiiEwwPwwwIaHiw6hfs7Y7vvva1X0, Location=https://wa.secureallnetwork.com/login?clienteId=Centrale-prod-wa&nonce=867:5309:867:5309:867:5309:867:5309:867:53099&redirect_uri=https%3A%2F%2Fcentrale.landingnetwork.com%3A443%2Fgp%2Fstores%2Fwww.landingnetwork.com%2Fgp%2Fsignin%2Fgi-landat.html%2F123-1234567-1234567%3Flandat%3D%2Fgp%2Fstores%2Fwww.landingnetwork.com%2Fgp%2Fhome%2F123-1234567-1234567&ort=1122334455.98765&rrt=1112223334.12121, Vary=Accept-Encoding,User-Agent, Content-Encoding=gzip, Set-cookie=session-id-scsus=123-1234567-1234567; path=/; domain=.landingnetwork.com; expires=Tue, 01-Jan-2036 00:00:01 GMT}
Run Code Online (Sandbox Code Playgroud)

以及链接路径中的下一个链接:

[debug] status code 200 : https://wa.secureallnetwork.com/login?clienteId=Centrale-prod-wa&nonce=867:5309:867:5309:867:5309:867:5309:867:53099&redirect_uri=https%3A%2F%2Fcentrale.landingnetwork.com%3A443%2Fgp%2Fstores%2Fwww.landingnetwork.com%2Fgp%2Fsignin%2Fgi-landat.html%2F123-1234567-1234567%3Flandat%3D%2Fgp%2Fstores%2Fwww.landingnetwork.com%2Fgp%2Fhome%2F123-1234567-1234567&ort=1122334455.98765&rrt=1112223334.12121
Run Code Online (Sandbox Code Playgroud)

相应的标题:

{Server=Server, Date=Fri, 02 Mar 2018 …
Run Code Online (Sandbox Code Playgroud)

java automation jsoup web

7
推荐指数
0
解决办法
268
查看次数