我尝试了几种等待JS脚本完成的方法,但都无济于事。点击按钮加载更多新闻或触发他们的事件似乎也没有帮助。
我的工作假设是,在JS脚本完成后,我不需要重新分配page
实例。对吗?
我也看到HTMLUnit的JS引擎在一些网站上不太好用。是这里的情况还是我只是漏掉了什么?
下面是我的代码:
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlButton;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlInput;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import java.io.IOException;
import java.util.List;
import org.junit.Assert;
public class ProblemDemo {
public static void main(String[] args) throws IOException, InterruptedException {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setTimeout(10000);
webClient.setJavaScriptTimeout(10000);
webClient.getOptions().setJavaScriptEnabled(true);
// Login procedure
HtmlPage page = webClient.getPage("https://login.xing.com/login");
final HtmlForm form = (HtmlForm) page.getElementById("login-form");
final HtmlInput userID = form.getInputByName("login_form[username]");
final HtmlInput password = form.getInputByName("login_form[password]");
final HtmlButton submit = form.getButtonByName("button");
final HtmlInput remember = form.getInputByName("login_form[perm]");
userID.setValueAttribute("user");
password.setValueAttribute("pass");
remember.setChecked(true);
page = submit.click();
Assert.assertEquals("Start | XING", page.getTitleText());
//Navigate to page to be scraped
page = webClient.getPage(
"https://www.xing.com/companies/deutschepostag/updates");
webClient.waitForBackgroundJavaScript(10*1000);
System.out.println(page.getUrl().toString());
System.out.println(page.asXml());
//Print number of employees (works, not dynamic)
HtmlElement result = page.getFirstByXPath("//div[@id='profile-nav-tabs']"
+ "/ul/li[@id='employees-tab']/a");
System.out.println("Employees: " + result.getTextContent());
//Print news (doesn't work)
String news;
List<HtmlElement> results = (List<HtmlElement>) page.getByXPath("//div"
+ "[@id='company-updates']/ul[@id='news-feed']/li/div"
+ "[@class='activity-content']");
System.out.println("News found: " + results.size());
for(HtmlElement item : results){
news = "";
System.out.println(" NEW ITEM");
System.out.println(item.getTextContent());
}
}
}
还有,下面的警告是否相关?由于HtmlUnit生成大量的JS警告,我不确定哪些是重要的,哪些不重要。
WARNING: Obsolete content type encountered: 'text/javascript'.
将setthrowexceptiononscriptorar
设置为false
可防止看到错误。
编辑:最新快照包含性能修复程序。navigation.redirectcount
请尝试并恢复
问题内容: 在我的index.html页面中,我想在加载应用程序时加载一个单独的Ajax页面,最好的方法是什么?这是我的索引代码: 在这里加载ajax子页面..... 子页面就是: 内容.............. 谢谢。 问题答案: 使用JavaScript可以做到这一点。您必须在页面加载时执行此操作。这是jQuery中的示例。
好的,首先,我将告诉这应该如何工作:我有一个页面的图片链接下侧,点击一个图片,该链接的信息出现在另一个div。我使用jQuery/Ajax将链接id发布到一个php文件中,并将该数据返回到所选的div。链接应该分页,以便一次显示4个。 这是正在发生的事情:post部分是ok的,当我单击一个链接时,正确的数据将显示在所选的div中。我不知道如何使链接div分页虽然。我需要他们分页时,页面加载,现在当
问题内容: 我在这个小组中搜索并在Google周围搜索,但仍然没有运气,我也看到有些问题,但是线程并没有帮助,所以我在这里 这个问题很简单,为了帮助您,我在.zip文件中打包了可以测试的文件 http://www.ivanhalen.com/fancyproblem.zip 我有一些链接的主页(index.php) 单击它们将加载通过AJAX的摘要(page.php) 在代码段中,有一个或多个链接
问题内容: 我们正在发出多个ajax请求,以“保存” Web应用程序中的数据,然后重新加载页面。我们遇到了这样一种情况:(由于请求是异步发出的)在ajax调用完成时或之前重新加载页面。一种简单的解决方案是使用“ async”:false选项启用ajax调用,从而强制进行同步调用。这似乎可行,但是在执行任何调用之前运行的对话框代码会延迟运行。 任何意见是极大的赞赏! 还应注意,在重新加载之前放置al
问题内容: 我有一个PHP include,它需要一段时间才能加载,因为PHP必须获取很多数据。我不想放慢整个网页的加载,以等待包含此内容,那么如何使用ajax加载该包含内容呢?我不希望通过单击按钮来触发Ajax,而只是希望它在页面加载时加载包含,因此,如果您查看下面的示例,则会在显示内含代码的同时显示“更多HTML内容”。 php仍在加载中。 问题答案: 如果您使用的是jQuery,则可以使用他