Войти с помощью java jsoup не работает на сайте rotowire - PullRequest
1 голос
/ 17 февраля 2020

Попробовав несколько уроков и прочитав много постов, я все равно не могу получить доступ к сайту Rotowire. Это мой код.

public static void main(String[] args) {

    final String USER_AGENT = "Mozilla/5.0";
    String loginFormUrl = "https://www.rotowire.com/users/login.php";
            String loginActionUrl = "https://www.rotowire.com/users/login.php";
    HashMap<String, String> cookies = new HashMap<String, String>();
    HashMap<String, String> formData = new HashMap<String, String>();

    try {

                Connection.Response loginForm = Jsoup.connect(loginFormUrl)

                        .method(Connection.Method.GET)
                        .userAgent(USER_AGENT)
                        .timeout(10 * 1000)
                        .followRedirects(true)
                        .execute();
                cookies.putAll(loginForm.cookies()); 
                String username = "****";
                String password = "****";
                formData.put("username",username);
                formData.put("password",password);
                formData.put("landingPage", "/");

                Connection.Response homePage = Jsoup.connect(loginActionUrl)
                        .cookies(cookies)
                        .data(formData)
                        .method(Connection.Method.POST)
                        .userAgent(USER_AGENT)
                        .timeout(10 * 1000)
                        .followRedirects(true)
                        .execute();
                Document doc = Jsoup.connect(loginFormUrl).cookies(homePage.cookies()).get();
                System.out.println(doc.html());
    } catch (IOException e) {
                // TODO Auto-generated catch block
                enter code heree.printStackTrace();
            }
}

1 Ответ

0 голосов
/ 18 февраля 2020

Обычно я не использую JSoup для действий при входе в систему, поскольку он не обрабатывает javascript. Возможно, вам следует перейти к HtmlUnit или Selenium для достижения sh того, что вам нужно.

РЕДАКТИРОВАТЬ: Добавление примера с использованием HtmlUnit

public void Login(String pass, String user) {
        try {
            HtmlPage p = navegador.getPage("https://www.somewebsite.com"); //The login webpage
            HtmlForm form = p.getFormByName("form-login"); //The login form name
            form.getInputByName("UserName").setValueAttribute(user);  //Setting username to the form
            form.getInputByName("Password").setValueAttribute(pass);  //Setting password to the form
            p = form.getInputByValue("Go").click(); //Clicking the form button by its input value and getting the next page
            System.out.println(p.asText()); //printing the page after being logged in
        }catch (FailingHttpStatusCodeException | IOException e) {
            e.printStackTrace();
        }
    }

navegador объект является экземпляром WebClient, который можно создать, выполнив что-то вроде:

WebClient navegador = new WebClient(BrowserVersion.CHROME);
...