Aar*_*sau 0 html javascript java parsing html-parsing
我想知道是否有可能在Java中检测HTML文件是否会在浏览器中打开时打开警告对话框.优选无头.例如,解析了具有以下内容的文件,它将返回true.
<html><script>alert("hey")</script></html>
Run Code Online (Sandbox Code Playgroud)
而且下面的内容也会返回
<html><iframe src="javascript:alert(1)" onload="alert(2)"></iframe></html>
Run Code Online (Sandbox Code Playgroud)
但是下面会返回false,因为如果在浏览器中打开它就不会打开一个警告对话框(因为没有一个代码在语法上是正确的,而且那个部分不在标签中).
<html><script>alert;,(123w)</script>alert(1)</html>
Run Code Online (Sandbox Code Playgroud)
我想到了解决这个问题的方法,但它存在缺陷.基本上,您可以看到字符串alert(1)是否在文件中,等等.这个问题是,如果代码不在脚本标记或使其执行的标记内,它将无法工作.它不起作用的一个例子是:即使实际上不打开弹出窗口,下面的内容也会返回true <html>alert(1)</html>.
顺便说一句,这不是Android.感谢您的帮助!
您不仅需要验证Alert函数是否存在,还要检查JavaScript函数是否运行.例如,如果在一个永不运行的函数中有一个带有Alert函数的脚本.警报功能会在那里但它永远不会运行.这会产生误报.因此,在最好的情况下,您应该以某种方式运行JavaScript来验证代码并查看函数是否会运行.
正如路易斯在评论中指出的那样,选项2在这种情况下更好,因为你需要考虑DOM和JavaScript的行为,因为如果Alert函数运行以及它如何运行,两者都会改变.
选项1:使用脚本引擎运行JavaScript
你需要某种方法将HTML与JavaScript分开,但是一旦你拥有了它,你就可以使用这种方法.
您可以使用Java运行JavaScript ScriptEngine.https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/api.html
如果您阅读API,则可以创建变量并在Java程序和正在运行的JavaScript之间进行通信.
要捕获警报的上下文,您可以创建一个覆盖警报功能的自定义JavaScript函数.在这个自定义函数中,您可以将函数的参数发送回Java程序.
选项2:无头浏览器
你也可以尝试使用像JBrowserDriver这样的无头浏览器,你可以看到你有一个带有getText作为函数的Alert接口.对于异步问题,无头浏览器有一个等待脚本完成的默认时间.如果此默认值不够,则可以使用setScriptTimeout来处理它. http://machinepublishers.github.io/jBrowserDriver/
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |