我要用 selenium-java + phantomjs 爬取某网页上<div class="system-msg-list">下的内容,这个<div>是一个系统消息推送节点,特点如下:
1、打开网页后,这个最初 div节点是空的(应该是通过class做了js事件监听)
2、保持网页不刷新,这个div节点会 不定时 地收到系统消息(不需要本地发送请求,这是被动接收的消息),然后会新增一些子节点<div class="system-msg">
3、一旦刷新网页,这个<div>节点会被清空,会继续等待新的系统消息
我现在用 selenium + phantomjs 尝试捕获这个节点的系统消息,于是就遇到一个问题:
** phantomjs打开网页后,网页会保持在打开那个瞬间的镜像,即使有系统消息推送过来,phantomjs也不会刷新<div>节点。而我一旦刷新网页,网站就会清空<div>节点的内 容。**
贴出我部分代码,这个问题困扰我很久,有没有熟悉selenium的同学给点建议?
WebDriver driver = browserDriver.getWebDriver(); // 我自己封装的类,返回的是 PhantomJS 驱动
driver.get(httpUrl); // 打开网页
while(isStop() == false) {
WebElement chatMsgList = driver.findElement(By.className("system-msg-list"));
// 系统消息: 这个节点一直是空的
List<WebElement> systems = chatMsgList.findElements(By.className("system-msg"));
for(WebElement element : systems) {
WebElement content = element.findElement(By.className("msg-content"));
WebElement link = content.findElement(By.name("a"));
String url = link.getAttribute("herf");
String desc = link.getText();
System.out.println(url + ", " + desc);
}
// 若刷新网页,由于网页机制导致 system-msg-list 一直是空的
// 若不刷新,则PhantomJS加载的网页一直都是同一个镜像,收不到系统推送的消息
// browserDriver.refresh(driver);
// driver.getPageSource();
}