java - 如何使用HTMLUnit登录vbulletin论坛?

标签 java web-scraping htmlunit vbulletin

我是 HTMLUnit 的新手,正在尝试抓取 vbulletin 网络论坛。我无法让它输入用户/密码并实际登录。

这是我到目前为止的代码:

package scraper;

import java.io.IOException;
import java.net.UnknownHostException;

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

public class Scraper {

    public static void main(String[] args) {
        try {
            Scraper ocau = new Scraper("http://forums.overclockers.com.au/forumdisplay.php?f=15&order=desc");
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

    public Scraper(String url) throws UnknownHostException {
        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);
        webClient.getOptions().setJavaScriptEnabled(false);
        webClient.getOptions().setCssEnabled(false);

        HtmlPage page;
        try {
            page = webClient.getPage(url);


            HtmlForm login = page.getForms().get(0);
            System.out.println(login);

        } catch (FailingHttpStatusCodeException | IOException e) {
            e.printStackTrace();
        }

        webClient.closeAllWindows();
    }
}

它的输出只是登录表单(我认为):

HtmlForm[<form action="login.php?do=login" method="post" onsubmit="md5hash(vb_login_password, vb_login_md5password, vb_login_md5password_utf, 0)">]

页面上的脚本/表单:

<script type="text/javascript" src="clientscript/vbulletin_md5.js?v=384"></script>
<form action="login.php?do=login" method="post" onsubmit="md5hash(vb_login_password, vb_login_md5password, vb_login_md5password_utf, 0)">
<input type="hidden" name="do" value="login" />
<input type="hidden" name="url" value="/forumdisplay.php?f=15&amp;order=desc" />
<input type="hidden" name="vb_login_md5password" />
<input type="hidden" name="vb_login_md5password_utf" />
<input type="hidden" name="s" value="" />
<input type="hidden" name="securitytoken" value="guest" />

我不太确定从这里到哪里实际输入用户名/密码并单击提交。我读过this answer这就是说我需要设置 vb_login_md5passwordvb_login_md5password_utf,它们是页面上的隐藏输入,但我不知道如何引用或设置它们。 html 中引用了一个 javascript md5 脚本 src="clientscript/vbulletin_md5.js?v=384"

任何帮助将不胜感激。

编辑:感谢 arya,它现在可以工作了,我必须使用此代码登录并打印页面:

    ((HtmlElement) page.getFirstByXPath("//fieldset/table/tbody/tr/td/input")).type("secretusername");
    ((HtmlElement) page.getFirstByXPath("//fieldset/table/tbody/tr[2]/td/input")).type("secretpassword");
    HtmlPage loggedin = ((HtmlElement) page.getFirstByXPath("//tr[4]/td/input")).click();           
    System.out.println(loggedin.asXml());

最佳答案

尝试使用 xpath 输入值并查看是否有效。

page.getFirstByXPath("//fieldset/table/tbody/tr/td/input").type("yourid") //this needs to be casted to htmlelement I think, eclipse should take of that

page.getFirstByXPath("//fieldset/table/tbody/tr[2]/td/input").type("yourpass") //also needs to be casted

page.getFirstByXPath("//tr[4]/td/input").click(); //also needs to be casted!

如果上面的解决方案不起作用,您必须使用 Fiddler 之类的工具捕获流量并使用 HTMLUnit 进行模拟,如果它不起作用,请告诉我,以便我可以编辑我的答案。

关于java - 如何使用HTMLUnit登录vbulletin论坛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27182080/

相关文章:

python - Xpath 获取具有特定字符串的标签及其所有后续兄弟,直到另一个特定字符串在标签中

javascript - 获取 HtmlUnit HtmlElement 中的原始 HTML?

java - HTMLUnit Java 浏览器太旧

java - 为什么像素是 float 的?

java - RFC 2965 : effective host name does not domain-match domain attribute

用于从 oracle 数据库检索多个 doc 文件的 Java 程序

python - 如何限制scrapy请求对象?

vba - VBA 的网络爬虫

java - 如何用htmlunit解决Java堆空间问题

Java - 如果用户未输入内容,则生成随机用户名