首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >getByXpath()不能在帧内工作

getByXpath()不能在帧内工作
EN

Stack Overflow用户
提问于 2014-07-30 07:09:55
回答 2查看 304关注 0票数 0

我是一个新的Htmlunit单位,并试图从一个网站的http://capitaline.com/new/index.asp提取数据。我已经成功地登录了这个网站。当我们登录到网站时,有三个框架。

  1. 一个在上面寻找公司(如ACC有限公司)我们正在提取数据。
  2. 第二帧有一棵树,它提供我们想要查看的各种数据的链接。
  3. 第三帧有结果的数据结果的基础上,你点击的帧。

我设法得到了我需要的框架如下:

代码语言:javascript
运行
复制
HtmlPage companyAtGlanceTopWindow =(HtmlPage)companyAtGlanceLink.click().getEnclosingWindow().getTopWindow().getEnclosedPage();
HtmlPage companyAtGlanceFrame = (HtmlPage)companyAtGlanceTopWindow.getFrameByName("mid2").getEnclosedPage();
System.out.println(companyAtGlanceFrame.toString()); // This line returns the frame URL as i can see in my browser. 

打印语句的输出是

代码语言:javascript
运行
复制
HtmlPage(http://capitaline.com/user/companyatglance.asp?id=CGO&cocode=6)@1194282974

现在,我想让我的代码导航到这个框架内的表,为此我使用了getByXPath(),但是它给了我nullPointerException。这是密码。

代码语言:javascript
运行
复制
HtmlTable companyGlanceTable1 = companyAtGlanceFrame.getFirstByXPath("/html/body/table[4]/tbody/tr/td/table/tbody/tr/td[1]/table");

我试图从其中提取表的当前网页(单击链接后)的XPath似乎是正确的,因为它是从铬元素检查中复制的。请提出一些方法来提取这张桌子。我以前做过这种提取,但是我有桌子的id,所以我用了它。

以下是网页中表的HTML代码。

代码语言:javascript
运行
复制
<table width="100%" class = "tablelines" border = "0" >
EN

回答 2

Stack Overflow用户

发布于 2014-07-31 07:15:30

我想知道,您能在控制台(打印asXml())中看到每个iframes的内部内容吗?它们是否嵌套iframes?那就试试这个

代码语言:javascript
运行
复制
   List<WebWindow> windows = webClient.getWebWindows();
   for(WebWindow w : windows){
     HtmlPage hpage = (HtmlPage) w.getEnclosedPage();
     System.out.println(hpage.asXml());
   }

一旦你能看到内容,

代码语言:javascript
运行
复制
   HtmlPage hpage = (HtmlPage)webClient.getWebWindowByName(some_name).getEnclosedPage();

然后使用xpath获取表内容(确保xpath是正确的)。它会成功的。(为我工作)

票数 0
EN

Stack Overflow用户

发布于 2014-07-31 14:02:17

感谢RDD的反馈。我解决了问题。实际上,问题不是与框架,而是与XPath提供的铬。铬提供的XPath是:

代码语言:javascript
运行
复制
/html/body/**table[4]**/tbody/tr/td/table/tbody/tr/td[1]/table

但XPath对我的作用是:

代码语言:javascript
运行
复制
 /html/body/**table[3]**/tbody/tr/td/table/tbody/tr/td[1]/table

看起来,当路径中有一个表时,chrome提供的XPath有一些故障(或者可能是some单元本身的一些错误)。我做了很多实验,发现chrome总是将../../table[row+1]/..作为XPath,而为htmlunit单元工作的XPath是../../table[row]/..

所以,这段代码对我来说很好

代码语言:javascript
运行
复制
HtmlTable companyGlanceTable1 = companyAtGlanceFrame.getFirstByXPath("/html/body/table[3]/tbody/tr/td/table/tbody/tr/td[1]/table");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25030724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档