我正在尝试使用JSoup登录网站,我的目标是从网站中抓取一些数据,但是登录/导航时遇到一些问题。
有关当前代码的外观,请参见下面的代码。
BelongsToMany::make('Pending Users', 'pendingUsers', 'App\Nova\User'),
我也尝试添加
try {
Connection.Response response = Jsoup.connect("https://app.northpass.com/login")
.method(Connection.Method.GET)
.execute();
response = Jsoup.connect("https://app.northpass.com/login")
.data("educator[email]", "email123")
.data("educator[password]", "password123")
.cookies(response.cookies())
.method(Connection.Method.POST)
.execute();
// Go to new page
Document coursePage = Jsoup.connect("https://app.northpass.com/course")
.cookies(response.cookies())
.get();
System.out.println(groupPage.title());
} catch (IOException e) {
e.printStackTrace();
}
和
.data("commit", "Log in")
没有成功。
我得到的错误如下:
.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
根据我在其他线程上阅读的内容,人们建议使用userAgent(如上所述,我已经尝试过)。预先感谢您的帮助。
答案 0 :(得分:0)
如果尝试在浏览器中尝试登录时查看网络流量,则会看到发送了其他数据:authenticity_token
。这是表单中的隐藏字段。
然后,您需要从初始响应中提取该请求,并与POST请求一起发送:
try {
Connection.Response response = Jsoup.connect("https://app.northpass.com/login")
.method(Connection.Method.GET)
.execute();
//I can't test this but will be something like
//see https://jsoup.org/cookbook/extracting-data/selector-syntax
Document document = response.parse();
String token = document.select("input[hidden]").first().val();
response = Jsoup.connect("https://app.northpass.com/login")
.data("educator[email]", "email123")
.data("educator[password]", "password123")
.data("authenticity_token", token)
.cookies(response.cookies())
.method(Connection.Method.POST)
.execute();
// Go to new page
Document coursePage = Jsoup.connect("https://app.northpass.com/course")
.cookies(response.cookies())
.get();
System.out.println(groupPage.title());
} catch (IOException e) {
e.printStackTrace();
}