使用htmlUnit

时间:2019-01-19 14:22:36

标签: java web-scraping htmlunit

背景

  1. 我正在使用htmlUnit模拟特定页面中的用户行为
  2. 我要进入登录页面,我需要输入用户凭据

问题:

  1. 我想填写详细信息的表格会动态更改,并推送具有随插入的每个字符而更改的值的新输入字段。

  2. 此输入字段具有多个事件监听器,据我从Chrome调试中发现,keypress事件与我最相关,因为这最终会生成更新值

  3. 页面“加载”时出现以下错误: [User1st]提取语言代码TypeError时发生错误:无法调用未定义的方法“ getAttribute”

    4.cghjavascript.StrictErrorReporter:runtimeError:message = [指定了无效或非法的选择器(选择器:'* ,: x',错误:无效的选择器:*:x)。] sourceName = https://???/jquery-1.10.2.min.js]行= [3] lineSource = [null] lineOffset = [0]

一些代码:

 WebClient webClient = new WebClient(BrowserVersion.CHROME);
        webClient.getOptions().setRedirectEnabled(true);
        webClient.getOptions().setUseInsecureSSL(true);
        webClient.getOptions().setJavaScriptEnabled(true);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
        webClient.waitForBackgroundJavaScript(5000);
        final HtmlPage page = webClient.getPage(WEBSITE_URL);
        HtmlForm loginForm = page.getFormByName("login");
        HtmlTextInput userIdField = loginForm.getInputByName("USERID");
        HtmlPasswordInput passwordField = loginForm.getInputByName("USERPASSWORD");
        userIdField.type("ID");
        passwordField.setText("PASSWORD");

我接下来要做的只是简单地迭代表单输入字段并查看其值。

如何确保所有相关的js代码真正得到执行?

1 个答案:

答案 0 :(得分:0)

我不确定这是否有帮助,只是让脚本进入睡眠状态对我有用。这可能会花一些时间来加载所有js脚本。

Thread.sleep(2000);