0.1.4 • Published 7 years ago
form-reader v0.1.4
Form-parser
form-reader is a part of a bigger project aiming to support Unofficial Facebook Graph. It allows you to submit your custom data to every facebook form.
Installation
npm i form-readerUsage
You can login facebook with your own account get a valid cookie for later use. Notice: won't work with 2-factor authen accounts.
const FormReader = require('form-reader')
const formReader = new FormReader({
willSendRequest: {
headers: {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
},
},
})
const loginURL = 'https://mbasic.facebook.com/'
const { headers } = await this.formReader.pipeline([
{
formAt: 0,
willSubmit: (requiredFields, submitFields) => ({
...requiredFields,
login: submitFields.login,
email: <YOUR_USER_NAME>,
pass: <YOUR PASSWORD>,
}),
},
]).startWith(loginURL)
const cookie = headers['set-cookie'].map(c => c.split(';')[0]).join(';')After having a valid cookie, you can do lots of awesome stuff. for example post a message to your facebook
const FormReader = require('form-reader')
const formReader = new FormReader({
willSendRequest: {
headers: {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
cookie: <YOUR_VALID_COOKIE>
},
},
})
await this.formReader.pipeline([
{
formAt: 1,
willSubmit: (requiredFields, submitFields) => ({
...requiredFields,
xc_message: <YOUR_MESSAGE>,
view_post: submitFields.view_post,
}),
},
]).startWith('https://mbasic.facebook.com/')Initialize
const formReader = new FormReader(options)options is an object, it contains properties:
useCache- use yoururlto cache http request (type:bool,default:false)willSendRequest- pass to option of request (type:<object|function>,default:{})
Pipeline
You can create a sequence of form submits by using pipeline
formReader.pipeline([stage1, stage2, ...]).start(URL)a stage must contains properties
formAt- position of form (type:int,default:0)willSubmit- provide all fields of form inrequiredFieldsand posible submit actions insubmitFieldswillSendRequest- provideresponsefrom previous request, which help you to decideurl,headers, ... of next stagenextURL- provideresponsefrom previous request, has to return aurlfor next step
Transpoter
If you want to keep the same headers of a previous step to crawle data from other page then using
const transporter = formReader.getTransporter(URL)
const response = await transporter.get()