如何解决登录后如何获得Axios维护会话以访问其他页面?
我希望制作一个能够自动登录并发布一些数据的NodeJS搜寻器,但是我正在努力让会话通过axios
库持久化(因为request
现在已弃用) )。
我需要能够登录,然后进入list_page,该列表具有我的用户帐户下的信息列表,但是list_page.data似乎没有显示任何特定于帐户的数据。我想稍后再用JSsoup进行抓取,因此,如果可以避免的话,我宁愿避免使用像Puppeteer这样的东西。
我要去哪里错了?到目前为止,这是我的NodeJS尝试:
const axios = require("axios").default;
const axiosCookieJarSupport = require("axios-cookiejar-support").default;
const tough = require("tough-cookie");
axiosCookieJarSupport(axios);
const login_url = "https://www.1pmobile.com/log-in.taf";
const sim_list_url = "https://www.1pmobile.com/listview.taf";
const payload = {
_action: "login",mobile: "name@mail.com",mypass: "password",};
const instance = axios.create({
jar: new tough.CookieJar(),withCredentials: true,});
axiosCookieJarSupport(instance);
instance.defaults.jar = new tough.CookieJar();
async function testing() {
// const login_page = await instance.get(login_url);
const login = await instance.post(login_url,payload);
const list_page = await instance.get(sim_list_url)
console.log(list_page.data);
}
testing();
出于进一步的考虑,我也使用Python编写了此代码,它工作得很好(不幸的是,Python并不真正适合我的工作堆栈),这就是我想要实现的目标:
from requests_html import HTMLSession
login_url = 'https://...log-in.taf'
sim_list_url = 'https://.../listview.taf'
payload = {"_action": "login","mobile": "email","mypass": "pass"}
def get_sim_info():
with HTMLSession() as session:
login_page = session.get(login_url)
login_page = session.post(login_url,data=payload)
sim_list = session.get(sim_list_url)
sim_table = sim_list.html.find(
'#myTable > tbody:nth-child(2)',first=True)
rows = sim_table.find('tr')
sim_database = {}
for row in rows:
mobile_number = row.find('a')[0].full_text
# absolute_links is a set so convert to list with comprehension to access value directly
activation_page = [link for link in row.find(
'a')[0].absolute_links][0]
sim_iccid = row.find('td')[1].full_text
# Ordering of parameters matters for activation code,sim number first,then mobile
def activation_code(sim_iccid,mobile_number):
return ''.join([a for x,y in zip(sim_iccid[::-1],mobile_number[::-1]) for a in (x,y)])[:6]
sim_database[sim_iccid] = {'mobile': mobile_number,'activation_code': activation_code(sim_iccid,mobile_number),'activation_page': activation_page}
print(f"Grabbed {len(sim_database)} SIM cards from list table")
return sim_database
get_sim_info()
非常感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。