2013-06-26 2 views
1

Я пытаюсь найти ссылку/кнопку для определенного источника. Мне уже удалось назначить кнопку с использованием свойств формы, однако новая кнопка, которую я пытаюсь нажать, не имеет формы. Ниже приведен исходный код HTML для кнопки JavaScript:Htmlunit Javascript Button/Link

<span class="followButtonActions" id=".reactRoot[0].[0].[1].[2].{userprofile0001}.[1].[1]. [1].[1]"> 
    <a class="Button FollowButton followButtonFollow" role="button" href="javascript:;" id=".reactRoot[0].[0].[1].[2].{userprofile0001}.[1].[1].[1].[1].0"> 
     <span id=".reactRoot[0].[0].[1].[2].{userprofile0001}.[1].[1].[1].[1].0.[0]"> 
     <span id=".reactRoot[0].[0].[1].[2].{userprofile0001}.[1].[1].[1].[1].0.[0].[0]">Follow</span> </span> 
    </a> 
</span> 

До сих пор я пытался использовать этот класс для идентификации элемента, однако я не увенчались успехом в поиске кнопки/ссылки на страницы. Я пытался использовать htmlAnchor, однако это не сработало, поэтому я переключился на DOM ELEMENT. Ниже приведен мой текущий код для поиска кнопки/ссылки, результаты которой: java.lang.NullPointerException.

final DomElement myAnchor = page3.getFirstByXPath("//span[@class='followButtonActions']"); 
final HtmlPage newPage = myAnchor.click(); 

Я также пробовал следующее, что приводит к: java.lang.NullPointerException.

final HtmlSubmitInput button = page.getFirstByXPath("//class[@id='.reactRoot[0].[0].[1].[2].{userprofile0001}.[1].[1].[1].[1].0']"); 
    final HtmlPage newPage = button.click(); 

У меня есть точка, где я пытаюсь почти все! В условиях laymans я пытаюсь назначить ссылку javascript на кнопку, которая затем может быть нажата. Мой подход состоял в том, чтобы каким-то образом связать «Button FollowButton followButtonFollow» с кнопкой, которую можно щелкнуть. Любая помощь будет оценена. Спасибо :)

ответ

0

Если вы пытаетесь получить, что якорный тег, вы должны использовать XPath:

//a[@id='.reactRoot[0].[0].[1].[2].{userprofile0001}.[1].[1].[1].[1].0'] 

Проверьте демонстрационный код ниже:

import java.net.URL; 
import com.gargoylesoftware.htmlunit.*; 
import com.gargoylesoftware.htmlunit.html.*; 
public class HtmlUnitAnchorExample { 
    public static void main(String[] args) throws Exception { 
     String html = "<html><head><title>HTMLUNIT TEST</title></head><body>" + 
       "" + 
       "<span class=\"followButtonActions\" id=\".reactRoot[0].[0].[1].[2].{userprofile0001}.[1].[1]. [1].[1]\"> "+ 
       " <a class=\"Button FollowButton followButtonFollow\" role=\"button\" href=\"javascript:;\" id=\".reactRoot[0].[0].[1].[2].{userprofile0001}.[1].[1].[1].[1].0\"> "+ 
       "  <span id=\".reactRoot[0].[0].[1].[2].{userprofile0001}.[1].[1].[1].[1].0.[0]\"> "+ 
       "  <span id=\".reactRoot[0].[0].[1].[2].{userprofile0001}.[1].[1].[1].[1].0.[0].[0]\">Follow</span> </span> "+ 
       " </a> "+ 
       "</span>" + 
       "</body></html>"; 

     WebClient client = new WebClient(); 
     HtmlPage page = HTMLParser.parseHtml(new StringWebResponse(html, new URL("http://example.com")), client.getCurrentWindow()); 
     System.out.println("Page title: "+page.getTitleText()); 

     final HtmlAnchor myAnchor = page.getFirstByXPath("//a[@id='.reactRoot[0].[0].[1].[2].{userprofile0001}.[1].[1].[1].[1].0']"); 
     System.out.println("Anchor found: "+myAnchor); 
     final HtmlPage newPage = myAnchor .click(); 
     System.out.println("newPage: "+newPage); 

     client.closeAllWindows(); 
    } 
} 
+0

Спасибо за ответ. Я применил ваш код, однако мой якорь напечатан как NULL. По какой-то причине, когда я просматриваю источник, я могу просмотреть однако, когда я печатаю страницу с помощью page.asXml(), я не могу просмотреть класс и т. д. Вы могли бы предложить какие-либо идеи? – Stan

+0

Сделайте 'webClient.waitForBackgroundJavaScript (10 * 1000);' перед вызовом 'page.asXml()'. Из того, что вы говорите, исходная страница, кажется, создает эти элементы (вы опубликовано) по javascript. Это так? – acdcjunior