HtmlUnit webscrapping具有JavaScript的下拉链接的锚标记

时间:2013-01-07 18:17:14

标签: java javascript html web-scraping htmlunit

当您将鼠标悬停在初始链接上时,该链接具有链接下拉列表时,是否可以使用HtmlUnit单击链接。如果单击初始链接,则除了获得鼠标悬停时链接列表之外没有任何反应。我想单击其中一个下拉链接并获取与该链接关联的网页。

问题似乎是Anchor有JavaScript,它也是一个下拉列表。如果Anchor没有JavaScript并且下载那么我就不会有任何问题。

以下是相关的JavaScript代码:

<script language='JavaScript' type='text/javascript'>
<!--
function mmLoadMenus(){
 window.mm_menu_0805151542_0 = new Menu("root",211,23,"Arial, Helvetica, sans-serif",11,"#FFFFFF","#FFFFFF","#056CB9","#014D98","left","middle",3,0,1000,-5,7,true,false,true,2,true,false);
  mm_menu_0805151542_0.addMenuItem("View&nbsp;Tax&nbsp;Sales","window.open('TCTaxSaleBrief.asp', '_blank','width=800,height=580,scrollbars=1,resizable=yes,top=50,left=100');");
  mm_menu_0805151542_0.addMenuItem("Registration&nbsp;Renewal&nbsp;Reprint","window.open('vrRenewal.asp', '_blank','width=800,height=580,scrollbars=1,resizable=yes,top=50,left=100');");
  mm_menu_0805151542_0.addMenuItem("Drivers&nbsp;License","window.open('http://www.dds.ga.gov/', '_blank');");
  mm_menu_0805151542_0.addMenuItem("Online&nbsp;Tag&nbsp;Renewals","location='../TaxCommissioner/TagRenewal.html'");
   mm_menu_0805151542_0.hideOnMouseOut=true;
   mm_menu_0805151542_0.bgColor='#CCCCCC';
   mm_menu_0805151542_0.menuBorder=0;
   mm_menu_0805151542_0.menuLiteBgColor='#FFFFFF';
   mm_menu_0805151542_0.menuBorderBgColor='#015BA7';

</script>

以下是相关的主持人:

<a href="#" name="link11" class="nav" id="link10" onmouseover="MM_showMenu(window.mm_menu_0805151542_0,104,0,null,'link11')" onmouseout="MM_startTimeout();">Online Services</a><br />

以下是我用来实现这项工作的Java代码片段。

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_10);
    String webPage="http://website.html";
    try {
        HtmlPage taxComPage = webClient.getPage(webPage);
        HtmlElement htmlElement = taxComPage.getDocumentElement();
            //HtmlAnchor anchor = taxComPage.getAnchorByText("View Tax Sales");
        //HtmlAnchor htmlAnchor = taxComPage.getHtmlElementById("link10");
        HtmlAnchor anchor = taxComPage.getAnchorByText("Online Services"); 

        HtmlPage page = anchor.click();
    }catch

如果HtmlUnit无法使用JavaScript,请告诉我们!

谢谢

据我所知,这个函数名为:mmLoadMenus(),它有鼠标悬停时显示的文字,但是我对这个函数如何与锚点关联有疑问。在锚中有一些叫做MM_showMenu的东西。什么是创建它的MM_showMenu,这是一个JavaScript关键字,我不认为它是在任何地方定义的。我搜索了整个页面,唯一提到的地方是锚。它似乎是某种类型的函数,参数为:window.mm_menu_0805151542_0,104,0,null,'link11'被传递给它。我可以在函数mmLoadMenus()和锚点之间建立的唯一连接是锚点中包含mm_menu_0805151542_0。我不是那么精通JavaScript,也许这就是为什么我没有与JavaScript函数和锚点建立强大的联系。

1 个答案:

答案 0 :(得分:0)

数据已经在页面上,所以为什么不从JavaScript函数本身中删除它。只需要解析文本 - 比试图加载它更容易。