admin管理员组文章数量:1178539
In an HTML
page, I want to pick the value of a javascript
variable.
Below is the snippet of HTML
page:
<input id="hidval" value="" type="hidden">
<form method="post" style="padding: 0px;margin: 0px;" name="profile" autocomplete="off">
<input name="pqRjnA" id="pqRjnA" value="" type="hidden">
<script type="text/javascript">
key="pqRjnA";
</script>
My aim is to read the value of variable key
from this page using jsoup
.
Is it possible with jsoup
? If yes then how?
In an HTML
page, I want to pick the value of a javascript
variable.
Below is the snippet of HTML
page:
<input id="hidval" value="" type="hidden">
<form method="post" style="padding: 0px;margin: 0px;" name="profile" autocomplete="off">
<input name="pqRjnA" id="pqRjnA" value="" type="hidden">
<script type="text/javascript">
key="pqRjnA";
</script>
My aim is to read the value of variable key
from this page using jsoup
.
Is it possible with jsoup
? If yes then how?
2 Answers
Reset to default 35Since jsoup isn't a javascript library you have two ways to solve this:
A. Use a javascript library
Pro:
- Full Javascript support
Con:
- Additional libraray / dependencies
B. Use Jsoup + manual parsing
Pro:
- No extra libraries required
- Enough for simple tasks
Con:
- Not as flexible as a javascript library
Here's an example how to get the key
with jsoupand some "manual" code:
Document doc = ...
Element script = doc.select("script").first(); // Get the script part
Pattern p = Pattern.compile("(?is)key=\"(.+?)\""); // Regex for the value of the key
Matcher m = p.matcher(script.html()); // you have to use html here and NOT text! Text will drop the 'key' part
while( m.find() )
{
System.out.println(m.group()); // the whole key ('key = value')
System.out.println(m.group(1)); // value only
}
Output (using your html part):
key="pqRjnA"
pqRjnA
The Kotlin question is marked as duplicate and is directed to this question.
So, here is how I did that with Kotlin:
val (key, value) = document
.select("script")
.map(Element::data)
.first { "key" in it } // OR single { "key" in it }
.split("=")
.map(String::trim)
val pureValue = value.replace(Regex("""["';]"""), "")
println("$key::$pureValue") // key::pqRjnA
Another version:
val (key, value) = document
.select("script")
.first { Regex("""key\s*=\s*["'].*["'];""") in it.data() }
.data()
.split("=")
.map { it.replace(Regex("""[\s"';]"""), "") }
println("$key::$value") // key::pqRjnA
Footnote
To get the document you can do this:
- From a file:
val input = File("my-document.html") val document = Jsoup.parse(input, "UTF-8")
- From a server:
val document = Jsoup.connect("the/target/url") .userAgent("Mozilla") .get()
本文标签: javaParse JavaScript with jsoupStack Overflow
版权声明:本文标题:java - Parse JavaScript with jsoup - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1738079121a2060115.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
key
. – ravi Commented Feb 15, 2013 at 23:19