summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2018-01-16 05:37:32 -0500
committerbill-auger <mr.j.spam.me@gmail.com>2018-02-13 13:29:34 -0500
commit729eb56815dbd9b3c9d397b3d78f0e3ca58ed219 (patch)
tree4ccc834f02ccd103eb67188658ed6a94bc5a451e
parent6e0f034eab324be87c993127dca1b821c28c2f1b (diff)
stash
-rw-r--r--post_fsd_wiki.phantomjs178
1 files changed, 102 insertions, 76 deletions
diff --git a/post_fsd_wiki.phantomjs b/post_fsd_wiki.phantomjs
index a9a7a33..97eaf1f 100644
--- a/post_fsd_wiki.phantomjs
+++ b/post_fsd_wiki.phantomjs
@@ -1,142 +1,158 @@
-var WIKI_BASE_URL = 'http://localhost/mediawiki/index.php' ;
+var WIKI_BASE_URL = 'http://localhost/mediawiki/index.php' ;
// var WIKI_BASE_URL = 'https://directory.fsf.org/wiki?title=' ;
// var LOGIN_URL = WIKI_URL + '/index.php?title=Special:Userlogin&action=submitlogin' ;
-var LOGIN_URL = WIKI_BASE_URL + '?title=Special:UserLogin' ;
-var EDIT_URL = WIKI_BASE_URL + '?title=_TITLE_&action=edit&redlink=1' ;
-var TITLE_URL_REGEX = '/_TITLE_/' ;
-var USAGE_MSG = "USAGE: phantomjs ./post_fsd_wiki.phantomjs <WIKI_LOGIN> <WIKI_PASS>" ;
-var LOGIN_IMPUT_ID = 'wpName1' ;
-var PASS_IMPUT_ID = 'wpPassword1' ;
-var SUBMIT_IMPUT_ID = 'wpLoginAttempt' ;
-var USERNAME_LI_ID = 'pt-userpage' ;
-var CONTENT_INPUT_ID = 'wpTextbox1' ;
-var EDIT_FORM_ID = 'editform' ;
-
+var LOGIN_URL = WIKI_BASE_URL + '?title=Special:UserLogin' ;
+var EDIT_URL = WIKI_BASE_URL + '?title=_TITLE_&action=edit&redlink=1' ;
+var TITLE_URL_REGEX = '/_TITLE_/' ;
+var USAGE_MSG = "USAGE: phantomjs ./post_fsd_wiki.phantomjs <WIKI_LOGIN> <WIKI_PASS>" ;
+var LOGIN_IMPUT_ID = 'wpName1' ;
+var PASS_IMPUT_ID = 'wpPassword1' ;
+var SUBMIT_IMPUT_ID = 'wpLoginAttempt' ;
+var USERNAME_LI_ID = 'pt-userpage' ;
+var CONTENT_INPUT_ID = 'wpTextbox1' ;
+var EDIT_FORM_ID = 'editform' ;
+var STEP_FUNCTION_KEY = 'step-finction' ;
+var PAGELOAD_WAIT_KEY = 'wait-for-pageload' ;
var System = require('system') ;
var Args = System.args ;
var Page = require('webpage').create() ;
var WIKI_LOGIN = Args[1] || '' ;
var WIKI_PASS = Args[2] || '' ;
+var Steps = [] ;
+var Step = {} ;
+var StepN = 0 ;
var IsLoading = false ;
var ShouldQuit = false ;
-var StepN = 0 ;
+var MainIvl ;
if (WIKI_LOGIN == '' || WIKI_PASS == '') { DBG(USAGE_MSG) ; phantom.exit() ; }
-var Steps =
-[
- function prepare()
- {
- var title = 'a title' ;
- var page_title = JSON.encode(title.eplace(' ' , '_')) ;
- } ,
+/* steps */
- function login()
- {
+function prepare()
+{
+ var title = 'a title' ;
+ var page_title = JSON.encode(title.eplace(' ' , '_')) ;
+}
+
+function login()
+{
DBG("in") ;
- // Page.settings.userAgent = 'SpecialAgent';
+ // Page.settings.userAgent = 'SpecialAgent';
- OpenUrl(LOGIN_URL , function()
- {
+ OpenUrl(LOGIN_URL , function()
+ {
DBG("login() open in") ;
-// console.log("login() Page.content=" + Page.content) ;
- QuitOnErr(Page.evaluate(function(login_input_id , pass_input_id , submit_input_id ,
- wiki_login , wiki_pass )
- {
+ QuitOnErr(Page.evaluate(function(login_input_id , pass_input_id , submit_input_id ,
+ wiki_login , wiki_pass )
+ {
console.log("login() eval in" + login_input_id) ;
- var login_input = document.getElementById(login_input_id ) ;
- var pass_input = document.getElementById(pass_input_id ) ;
- var submit_input = document.getElementById(submit_input_id) ;
+ var login_input = document.getElementById(login_input_id ) ;
+ var pass_input = document.getElementById(pass_input_id ) ;
+ var submit_input = document.getElementById(submit_input_id) ;
+ var submit_form = submit_input.form ;
console.log("login_input=" + ((!!login_input) ? login_input : 'NFG')) ;
console.log("submit_input=" + ((!!submit_input) ? submit_input : 'NFG')) ;
- if (login_input === 'undefined' || login_input === 'undefined' ||
- submit_input === 'undefined' || submit_input.form === 'undefined' )
- return "invalid login page" ;
+ if (!login_input || !login_input || !submit_input || !submit_form)
+ return "invalid login page" ;
- login_input.value = wiki_login ;
- pass_input.value = wiki_pass ;
+ login_input.value = wiki_login ;
+ pass_input.value = wiki_pass ;
console.log("login() login_input.value=" + login_input.value) ;
console.log("login() pass_input.value=" + pass_input.value) ;
console.log("login() submit_input.value=" + submit_input.value) ;
- submit_input.form.submit() ; IsLoading = true ;
+ submit_form.submit() ;
console.log("login() eval out") ;
- } , LOGIN_IMPUT_ID , PASS_IMPUT_ID , SUBMIT_IMPUT_ID , WIKI_LOGIN , WIKI_PASS)) ;
+ } , LOGIN_IMPUT_ID , PASS_IMPUT_ID , SUBMIT_IMPUT_ID , WIKI_LOGIN , WIKI_PASS)) ;
DBG("login() open out") ;
- }) ;
+ }) ;
DBG("out") ;
- } ,
+}
- function verifyLogin()
- {
+function verifyLogin()
+{
DBG("in") ;
+// console.log("verifyLogin() Page.content=" + Page.content) ;
- QuitOnErr(Page.evaluate(function(username_li_id , wiki_login)
- {
- var username_li = document.getElementById(username_li_id) ;
+ QuitOnErr(Page.evaluate(function(username_li_id , wiki_login)
+ {
+ var username_li = document.getElementById(username_li_id) ;
-console.log("verifyLogin() username_li.textContent=" + username_li.textContent ) ;
+ if (!username_li || username_li.textContent.lowercase != wiki_login.lowercase)
+ return "login failed" ;
- if (username_li === 'undefined' || username_li.textContent.lowercase != wiki_login.lowercase)
- return "login failed" ;
- } , USERNAME_LI_ID , WIKI_LOGIN)) ;
+ console.info("signed in as: " + username_li.textContent) ;
+ } , USERNAME_LI_ID , WIKI_LOGIN)) ;
DBG("out") ;
- } ,
+}
- function fetchEditPage()
- {
+function submitEditPage()
+{
DBG("in") ;
- var page_title = 'New Page' ;
+ var page_title = 'New Page' ;
- OpenUrl(EDIT_URL.replace(TITLE_URL_REGEX , page_title) , function()
+ OpenUrl(EDIT_URL.replace(TITLE_URL_REGEX , page_title) , function()
+ {
+ QuitOnErr(Page.evaluate(function(content_input_id , edit_form_id , content_text)
{
- QuitOnErr(Page.evaluate(function(content_input_id , edit_form_id , content_text)
- {
- var content_input = document.getElementById(content_input_id) ;
- var edit_form = document.getElementById(edit_form_id ) ;
+ var content_input = document.getElementById(content_input_id) ;
+ var edit_form = content_input.form ;
+ var existing_content = content_input.textContent ;
-console.log("(fetchEditPage() edit_form == content_input.form)=" + (edit_form == content_input.form)) ;
-console.log("fetchEditPage() content_input.textContent=" + content_input.textContent ) ;
+console.log("submitEditPage() content_input.textContent=" + existing_content) ;
- if (content_input === 'undefined') return "invalid edit page" ;
- } , CONTENT_INPUT_ID , EDIT_FORM_ID , content_text)) ;
- }) ;
+ if (!content_input || !edit_form) return "invalid edit page" ;
+ } , CONTENT_INPUT_ID , EDIT_FORM_ID)) ;
+ }) ;
DBG("out") ;
- }
-] ;
+}
/* main loop */
-var MainIvl = setInterval(function()
+function DefineStep(step_function , should_wait_for_pageload)
+{
+ var step_data = {} ;
+ step_data[STEP_FUNCTION_KEY] = step_function ;
+ step_data[PAGELOAD_WAIT_KEY] = should_wait_for_pageload ;
+ Steps.push(step_data) ;
+}
+
+function MainLoop()
{
if (IsLoading) return ;
-DBG("test");
+ var step_data = Steps[StepN] ;
+ var step = step_data && step_data[STEP_FUNCTION_KEY] ;
+ var wait = step_data && step_data[PAGELOAD_WAIT_KEY] ;
- if (typeof Steps[StepN] !== 'function') ShouldQuit = true ;
+ if (ShouldQuit) LOG("forced quit") ;
+ if (typeof step === 'function') ++StepN ; else ShouldQuit = true ;
- if (ShouldQuit) { clearInterval(MainIvl) ; phantom.exit() ; }
- else { LOG("Step " + StepN + ": " + Steps[StepN].name) ; Steps[StepN++]() ; }
-}) ;
+ if (ShouldQuit) { clearInterval(MainIvl) ; LOG("done") ; phantom.exit() ; }
+ else { LOG("Step " + StepN + ": " + step.name) ; step() ; }
+}
/* helpers */
function OpenUrl(url , callback)
{
- Page.open(LOGIN_URL , function(status)
+DBG("url=" + url) ;
+
+ Page.open(url , function(status)
{
if (status != 'success') { ERR("status: " + status) ; ShouldQuit = true ; }
else { callback() ; }
@@ -148,16 +164,16 @@ function QuitOnErr(err) { if (!!err) { ERR(err) ; ShouldQuit = true ; } }
/* event hendlers */
-Page.onLoadStarted = function() { IsLoading = true ; ARGS.apply("Page.onLoadStarted" , arguments) ; } ;
+Page.onLoadStarted = function() { IsLoading = true ; ARGS.apply("Page.onLoadStarted" , arguments) ; } ;
Page.onLoadFinished = function() { IsLoading = false ; ARGS.apply("Page.onLoadFinished " + Page.url , arguments) ; } ;
-Page.onUrlChanged = function() { ARGS.apply("Page.onUrlChanged" , arguments) ; } ;
+Page.onUrlChanged = function() { ARGS.apply("Page.onUrlChanged" , arguments) ; } ;
/* logging */
-Page.onConsoleMessage = function(msg) { DBG(msg) ; } ;
+Page.onConsoleMessage = function(msg) { LOG(msg) ; } ;
function LOG(log , color) { console.log((color || '\033[01;34m') + log + '\033[00m' ) ; }
function ERR(err) { LOG("ERROR: " + err , '\033[00;31m') ; }
@@ -165,3 +181,13 @@ function DBG(dbg) { var fn_name = (!!DBG.caller.name) ? DBG.caller.name
LOG("DEBUG: " + fn_name + dbg , '\033[00;32m') ; }
function ARGS() { LOG("EVENT: " + this) ; for (arg in arguments) LOG(" arg: " + JSON.stringify(arguments[arg])) ; }
+
+
+/* main entry */
+
+DefineStep(prepare , false) ;
+DefineStep(login , true ) ;
+DefineStep(verifyLogin , false) ;
+DefineStep(submitEditPage , true ) ;
+
+MainIvl = setInterval(MainLoop , 250) ;