我希望通过网页抓取从此网站获取数据。 http://myservices.ect.nl/tracing/objectstatus/Pages/Overview.aspx:
之前我使用过JSoup来获取更多静态HTML网站,但是这个更加困难,因为在我获取网站上的HTML表之前必须单击一个按钮,我不知道是否可以使用JSoup来操作按钮
单击此按钮后,我得到一个HTML表格,我想只获取数据是Barge的数据。
感谢您提示使用Firefox,现在我有了一些其他页面信息。你能告诉我怎样才能获得表格信息?我得到的输出如下:
答案 0 :(得分:3)
您必须使用Selenium
HTML单元驱动程序。
这是完整的工作example
。它会访问website
,click
按钮,然后您就可以从该页面获取data
。
编辑:仅获取表格值
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class GetData {
public static void main(String args[]) throws InterruptedException {
WebDriver driver = new FirefoxDriver();
driver.get("http://myservices.ect.nl/tracing/objectstatus/Pages/Overview.aspx");
Thread.sleep(5000);
// select barge
new Select(driver.findElement(By.id("ctl00_ctl15_g_ce17bd4b_3803_47f6_822a_2b8dd10fc67d_ctl00_dlModality"))).selectByVisibleText("Barge");
// click button
Thread.sleep(3000);
driver.findElement(By.className("button80")).click();
Thread.sleep(5000);
//get only table text
WebElement findElement = driver.findElement(By.className("grid-view"));
String htmlTableText = findElement.getText();
// do whatever you want now, These are raw table values.
System.out.println(htmlTableText);
driver.close();
driver.quit();
}
}
答案 1 :(得分:2)
每次“点击”(或该类型的任何交互)都是对服务器的请求和对浏览器的响应。因此,一个可能的解决方案是不要将JSoup用于初始页面,而是用于结果页面。例如,打开返回表的页面的POST,传递负责返回模态Barge
的参数。您可以使用Firebug(适用于Firefox)或Chrome开发者工具等工具来检查对话(请求/响应),以便您可以使用自己的代码进行模拟。
答案 2 :(得分:0)
也许java的浏览器模拟器对你的问题很有用 - 请考虑这个 - HtmlUnit。
它为HTML文档建模并提供允许您调用的API 页面,填写表格,点击链接等...就像你在你的 “普通”浏览器。