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-readerYou can login facebook with your own account get a valid cookie for later use. Notice: won't work with 2-factor authen accounts.
constFormReader=require('form-reader')constformReader=newFormReader({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',},},})constloginURL='https://mbasic.facebook.com/'const{ headers }=awaitthis.formReader.pipeline([{formAt: 0,willSubmit: (requiredFields,submitFields)=>({
...requiredFields,login: submitFields.login,email: <YOUR_USER_NAME>,
pass: <YOURPASSWORD>,
}),},]).startWith(loginURL)constcookie=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
constFormReader=require('form-reader')constformReader=newFormReader({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>},},})awaitthis.formReader.pipeline([{formAt: 1,willSubmit: (requiredFields,submitFields)=>({
...requiredFields,xc_message: <YOUR_MESSAGE>,
view_post: submitFields.view_post,
}),},]).startWith('https://mbasic.facebook.com/')constformReader=newFormReader(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:{})
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
If you want to keep the same headers of a previous step to crawle data from other page then using
consttransporter=formReader.getTransporter(URL)constresponse=awaittransporter.get()