尝试使用 java 填写网站表单,但表单标签嵌入到 iframe 标签中
Trying to fill out a website form using java, but form tag is embedded in iframe tag
我的目标是访问此 url http://eaacorp.com/find-a-dealer 并使用 java 填写表格。为此,我试图找到所有表单标签:
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class HttpUrlConnectionExample{
public static void main(String[] args) throws IOException{
Document document = Jsoup.connect("http://eaacorp.com/find-a-dealer").get();
String page = document.toString();//this is the whole page's html
Elements formEl = document.getElementsByTag("form");
}
}
但是 formEl returns 为空,因为表单标签嵌入在 iframe 标签(页面源代码片段)的 http://www.eaacorp.com/dealer/searchdealer.php html 中:
<iframe id="blockrandom" name="iframe" src="http://www.eaacorp.com/dealer/searchdealer.php" width="100%" height="500" scrolling="auto" frameborder="1" class="wrapper"></iframe>
因此,有没有办法在 iframe 标签中访问表单标签?类似于:
if(formEl.isEmpty()){
//find iframe
Elements iframeEl = document.getElementsByTag("iframe");
System.out.println(iframeEl);
String embedURL = iframeEl.getSrc();//DOES NOT COMPILE, getSrc() is not a method
Document embedDoc = Jsoup.connect(embedURL).get();
}
我发现您实际上可以创建自己的方法来使用子字符串获取 src url,然后仅使用该字符串获取文档连接:
public static String getSrcString(String html){
String construct = "";
for (int i = 0; i < html.length() - 5;i++){
if (html.substring(i, i + 5).equals("src=\"")){
i += 5;
while(!html.substring(i, i + 1).equals("\"")){
construct += html.substring(i, i + 1);
i++;
}
}
}
return construct;
}
然后主要是:
String embedURL = getSrcString(iframeEl.toString());
Document embedDoc = Jsoup.connect(embedURL).get();
不需要您自己的 getSrcString
方法,尤其是因为子字符串方法会因标记中的最小更改而中断。
在具有 src
属性的元素上使用 .attr("abs:src")
(比较:https://jsoup.org/cookbook/extracting-data/working-with-urls)
示例代码
Document document = Jsoup.connect("http://eaacorp.com/find-a-dealer").get();
Element iframeEl = document.select("iframe").first();
String embedURL = iframeEl.attr("abs:src");
Document embedDoc = Jsoup.connect(embedURL).get();
System.out.println(embedDoc.select("form").first());
截断输出
<form action="findit.php" method="post" name="dlrsrchfrm" target="_blank">
<div style="padding: 15px;">
[...]
</form>
我的目标是访问此 url http://eaacorp.com/find-a-dealer 并使用 java 填写表格。为此,我试图找到所有表单标签:
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class HttpUrlConnectionExample{
public static void main(String[] args) throws IOException{
Document document = Jsoup.connect("http://eaacorp.com/find-a-dealer").get();
String page = document.toString();//this is the whole page's html
Elements formEl = document.getElementsByTag("form");
}
}
但是 formEl returns 为空,因为表单标签嵌入在 iframe 标签(页面源代码片段)的 http://www.eaacorp.com/dealer/searchdealer.php html 中:
<iframe id="blockrandom" name="iframe" src="http://www.eaacorp.com/dealer/searchdealer.php" width="100%" height="500" scrolling="auto" frameborder="1" class="wrapper"></iframe>
因此,有没有办法在 iframe 标签中访问表单标签?类似于:
if(formEl.isEmpty()){
//find iframe
Elements iframeEl = document.getElementsByTag("iframe");
System.out.println(iframeEl);
String embedURL = iframeEl.getSrc();//DOES NOT COMPILE, getSrc() is not a method
Document embedDoc = Jsoup.connect(embedURL).get();
}
我发现您实际上可以创建自己的方法来使用子字符串获取 src url,然后仅使用该字符串获取文档连接:
public static String getSrcString(String html){
String construct = "";
for (int i = 0; i < html.length() - 5;i++){
if (html.substring(i, i + 5).equals("src=\"")){
i += 5;
while(!html.substring(i, i + 1).equals("\"")){
construct += html.substring(i, i + 1);
i++;
}
}
}
return construct;
}
然后主要是:
String embedURL = getSrcString(iframeEl.toString());
Document embedDoc = Jsoup.connect(embedURL).get();
不需要您自己的 getSrcString
方法,尤其是因为子字符串方法会因标记中的最小更改而中断。
在具有 src
属性的元素上使用 .attr("abs:src")
(比较:https://jsoup.org/cookbook/extracting-data/working-with-urls)
示例代码
Document document = Jsoup.connect("http://eaacorp.com/find-a-dealer").get();
Element iframeEl = document.select("iframe").first();
String embedURL = iframeEl.attr("abs:src");
Document embedDoc = Jsoup.connect(embedURL).get();
System.out.println(embedDoc.select("form").first());
截断输出
<form action="findit.php" method="post" name="dlrsrchfrm" target="_blank">
<div style="padding: 15px;">
[...]
</form>