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.
npm i form-reader
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/')
const formReader = new FormReader(options)
options
is an object, it contains properties:
useCache
- use yoururl
to cache http request (type
:bool
,default
:false
)willSendRequest
- pass to option of request (type
:<object|function>
,default
:{}
)
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 inrequiredFields
and posible submit actions insubmitFields
willSendRequest
- provideresponse
from previous request, which help you to decideurl
,headers
, ... of next stagenextURL
- provideresponse
from previous request, has to return aurl
for next step
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()