【问题标题】:HtmlUnit webscraping Anchor tag with dropdown link that has JavaScript带有 JavaScript 的下拉链接的 HtmlUnit webscraping Anchor 标记
【发布时间】:2012-12-21 12:28:19
【问题描述】:

当您将鼠标悬停在初始链接上时,当该链接具有链接下拉列表时,是否可以使用 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 代码的 sn-p。

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 函数和锚点建立密切联系的原因。

【问题讨论】:

  • 一般来说,JavaScript 对于 HtmlUnit 来说是没有问题的(除非你禁用了 javascript)。在您的特殊情况下,问题是如何触发鼠标悬停事件。

标签: java javascript html web-scraping htmlunit


【解决方案1】:

数据已经在页面上,所以为什么不从 JavaScript 函数本身抓取它。只是解析文本的问题 - 比尝试强制加载要容易得多。

【讨论】:

  • 我在 JavaScript 函数和我感兴趣的锚点之间建立连接时遇到问题。因为 stackoverflow 限制了我的 cmets 的大小。请看我的问题,我已经编辑过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多