2016-10-08 3 views
1

Моя цель - получить доступ к этому URL-адресу http://eaacorp.com/find-a-dealer и заполнить форму с помощью java. Чтобы сделать это, я попытался найти все тег формы:Попытка заполнить форму сайта с помощью java, но тег формы встроен в тег iframe

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"); 
    } 

} 

Однако Формула возвращает пустой, потому что форма тег вложен в http://www.eaacorp.com/dealer/searchdealer.php HTML в IFrame теге (фрагмент источника страницы):

<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(); 
} 

ответ

0

Там нет необходимости для собственного getSrcString метода, тем более, что подстрока подход сломается минимальные изменения в теге.

Использование .attr("abs:src") на элементе с атрибутом 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> 
0

Я обнаружил, что вы могли бы на самом деле сделать свой собственный метод, который может получить 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(); 
Смежные вопросы