首页 > 解决方案 > 使用 javascript 和 java 自动登录

问题描述

我想在java中使用javascript登录网页。登录表单只需要一个邮政编码,但使用以下代码时无法进入下一页:

package blog.article2;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.MalformedURLException;

import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class Authenticator {

public static void main(String[] args) {

    String baseUrl = "https://www.miweb.com/producto/?productID=6007020" ;
    String loginUrl = "https://www.miweb.com/" ; 

    try {
        System.out.println("Starting autoLogin on " + loginUrl);
        WebClient client = autoLogin(loginUrl);
        HtmlPage page = client.getPage(baseUrl) ;

        String originalHtml = page.getWebResponse().getContentAsString();
        writeFile(originalHtml, "original.html");
        System.out.println(originalHtml);
        if(originalHtml.contains("'price': '"))
        {
            String precio = originalHtml.split("'price': '")[1].split("'")[0];
            System.out.println(originalHtml);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}


public static WebClient autoLogin(String loginUrl) throws FailingHttpStatusCodeException, MalformedURLException, IOException{
    WebClient client = new WebClient();
    client.getOptions().setCssEnabled(false);
    client.getOptions().setJavaScriptEnabled(true);
    client.getOptions().setThrowExceptionOnScriptError(false);

    HtmlPage page = client.getPage(loginUrl);

    page.executeJavaScript("javascript: {" +
            "document.getElementById(\"form_postalcode\").innerHTML = \"<select id='cl_postal_code' class='postalCodesSelect form-control form_field select2-hidden-accessible' data-validation-engine='validate[required]' title='' data-toggle='tooltip' data-placeholder='Código Postal' tabindex='-1' data-original-title='Por favor, selecciona un código postal' aria-hidden='true'><option></option><option value='15001'>15001</option><option value='15002'>15002</option><option value='15003'>15003</option><option value='15004'>15004</option><option value='15005'>15005</option><option value='15006'>15006</option><option value='15007'>15007</option><option value='15008'>15008</option><option value='15009'>15009</option><option value='24100'>24100</option><option value='24110'>24110</option><option value='24111'>24111</option><option value='24112'>24112</option><option value='24113'>24113</option><option value='24114'>24114</option><option value='47012'>47012</option><option value='47013'>47013</option><option value='47014'>47014</option><option value='47015'>47015</option><option value='47016'>47016</option><option value='47130'>47130</option><option value='47140'>47140</option><option value='47151'>47151</option><option value='47155'>47155</option><option value='47193'>47193</option><option value='47194'>47194</option><option value='47195'>47195</option><option value='47220'>47220</option><option value='47400'>47400</option><option value='47450'>47450</option><option value='47454'>47454</option><option value='47460'>47460</option><option value='47463'>47463</option><option value='47465'>47465</option><option value='47490'>47490</option><option value='47491'>47491</option><option value='47492'>47492</option><option value='47493'>47493</option><option value='47494'>47494</option><option value='47500'>47500</option><option value='47509'>47509</option><option value='47610'>47610</option></select><span class='select2 select2-container select2-container--default select2-container--above select2-container--open' dir='ltr' style='width: 210px;'><span class='selection'><span class='select2-selection select2-selection--single' role='combobox' aria-autocomplete='list' aria-haspopup='true' aria-expanded='true' title='' tabindex='5' aria-labelledby='select2-cl_postal_code-container' data-toggle='tooltip' data-original-title='Por favor, selecciona un código postal' aria-owns='select2-cl_postal_code-results'><span class='select2-selection__rendered' id='select2-cl_postal_code-container' aria-label='NUEVO CLIENTE. Por favor, selecciona un código postal' title='15002'>15002</span><span class='select2-selection__arrow' role='presentation'><b role='presentation'></b></span></span></span><span class='dropdown-wrapper' aria-hidden='true'></span></span>\";" + 
            " };");

    client.waitForBackgroundJavaScript(30 * 1000);

    page.executeJavaScript("javascript: {" +
            "document.getElementById(\"cl_postal_code\").value = \"15002\";" +
            "$('.btn_new_client').click(); " +
            " };");
    client.waitForBackgroundJavaScript(30 * 1000);

    return client;
}

我已经直接在我想登录的网络上尝试了我的javascript代码并将我正确重定向到下一页(所有带有'executeJavascript'的行)。它不会给我 javascript 执行错误。

我可能做错了什么?

提前致谢。

标签: javascriptjavawebautologin

解决方案


推荐阅读