我是一个新的Htmlunit单位,并试图从一个网站的http://capitaline.com/new/index.asp提取数据。我已经成功地登录了这个网站。当我们登录到网站时,有三个框架。
我设法得到了我需要的框架如下:
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. 打印语句的输出是
HtmlPage(http://capitaline.com/user/companyatglance.asp?id=CGO&cocode=6)@1194282974现在,我想让我的代码导航到这个框架内的表,为此我使用了getByXPath(),但是它给了我nullPointerException。这是密码。
HtmlTable companyGlanceTable1 = companyAtGlanceFrame.getFirstByXPath("/html/body/table[4]/tbody/tr/td/table/tbody/tr/td[1]/table");我试图从其中提取表的当前网页(单击链接后)的XPath似乎是正确的,因为它是从铬元素检查中复制的。请提出一些方法来提取这张桌子。我以前做过这种提取,但是我有桌子的id,所以我用了它。
以下是网页中表的HTML代码。
<table width="100%" class = "tablelines" border = "0" >发布于 2014-07-31 07:15:30
我想知道,您能在控制台(打印asXml())中看到每个iframes的内部内容吗?它们是否嵌套iframes?那就试试这个
List<WebWindow> windows = webClient.getWebWindows();
for(WebWindow w : windows){
HtmlPage hpage = (HtmlPage) w.getEnclosedPage();
System.out.println(hpage.asXml());
}一旦你能看到内容,
HtmlPage hpage = (HtmlPage)webClient.getWebWindowByName(some_name).getEnclosedPage();然后使用xpath获取表内容(确保xpath是正确的)。它会成功的。(为我工作)
发布于 2014-07-31 14:02:17
感谢RDD的反馈。我解决了问题。实际上,问题不是与框架,而是与XPath提供的铬。铬提供的XPath是:
/html/body/**table[4]**/tbody/tr/td/table/tbody/tr/td[1]/table但XPath对我的作用是:
/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]/..。
所以,这段代码对我来说很好
HtmlTable companyGlanceTable1 = companyAtGlanceFrame.getFirstByXPath("/html/body/table[3]/tbody/tr/td/table/tbody/tr/td[1]/table");https://stackoverflow.com/questions/25030724
复制相似问题