jpuppeteer
java版本的puppeteer
warning
整个模型为单线程,请不要在future listener或者event listener中放置任何的阻塞代码,请用线程池执行阻塞代码
启动浏览器
Browser browser = new ChromeLauncher("D:\\workspace\\win32-x64\\chrome.exe").launch(args);
默认上下文
BrowserContext context = browser.defaultContext();
创建上下文
Future<BrowserContext> future = browser.createContext();
创建页面
Future<Page> future = context.newPage();
查找节点
Future<Element> future = page.querySelector("body");
事件监听
page.addListener(new AbstractListener<PageLoaded>() {
@Override
public void accept(PageLoaded loadEvent) {
System.out.println("page loaded, duration=" + loadEvent.timestamp());
}
});
DEMO
Browser browser = new ChromeLauncher("D:\\workspace\\win32-x64\\chrome.exe").launch();
Page page = browser.defaultContext().newPage().get();
page.addListener(new AbstractListener<LoadedEvent>() {
@Override
public void accept(LoadedEvent event) {
SeriesFuture
.wrap(page.querySelector("#kw"))
.async(o -> o.input("test"))
.async(o -> page.querySelector("#su"))
.async(o -> {
Element el = (Element) o;
return el.click();
})
.addListener(f -> {
if (f.cause() != null) {
f.cause().printStackTrace();
} else {
System.out.println("OK");
}
});
}
});
page.navigate("https://www.baidu.com/");