方七佛被迫率軍敗退回杭州,這使起義軍的京城杭州一下子失去屏障,完全暴露在宋軍直接的進攻之下。於宣和三年(公元1121年)二月,宋軍完全包圍了以方臘為首的起義軍政權中心杭州。在這個時候為解杭州之危,方臘若能一下子全部調動百萬大軍在杭州裡應外合與宋軍童貫的十五萬禁軍決一死戰,給童貫造成重創,或者毀滅性的打擊,也會大大改變戰局。可是方臘又一個過失坐失良機,竟然在宋徽宗下詔可以招撫詔安方臘這麼長的時間裡,隻拒絕了詔安,而親自指揮起義軍抵抗外,再沒有任何的調動應對措施。至此由於不能及時打敗擊潰宋軍的進攻,造成城中缺糧,起義軍不得不被迫突圍放棄撤出杭州。
起義軍在被迫缺糧的情況下撤出杭州,方臘又不甘心,備足糧草之後,三月,方臘應該選擇宋軍薄弱的地方予以痛擊,打一次勝仗鼓舞士氣,和震懾宋軍得勝的士氣,應該率軍聯合各地義軍逐個掃除宋軍,以殲滅宋軍的有生力量為目的,及時揭穿童貫取消花石綱和宋庭暫時罷免朱勔的陰謀詭計,及時喚醒被迷惑的百姓,和起義軍官兵,把宋軍置於人民百姓戰爭的(汪)洋大海中,爭取最後的勝利。卻方臘又舍不得杭州一城一地的丟失,隻計較一城一地的得失,匆忙又率領三十萬起義軍再次進攻奪取杭州。
在杭州與童貫的十五萬禁軍和宋軍的地方軍隊決戰,卻又沒有什麼明顯的措施,在起義軍已經把宋軍逼成死敵位置上去的情況下,宋軍合在一起的軍隊也在二十萬以上,起義軍以自己攻城處於劣勢的位置和措施去攻打杭州堅固之城,使起義軍在城牆下傷亡十分慘重。童貫看到該出擊的時候到了,於是下令宋軍全麵出擊,裡外夾擊起義軍,結果起義軍在城外大敗,被王稟率軍瘋狂拚殺,一舉擊潰。至此,宋軍楊可世、劉鎮率軍乘勝夾擊接連攻陷歙州,王稟部又揮師攻陷睦州。
到了此時,起義軍形勢瞬間急轉直下,方臘率軍慘敗,左右各軍聞方臘慘敗,恐慌士氣低落不穩的時候,也都接連被宋軍各個擊破慘敗,在童貫下令全麵出擊的打擊下,起義軍瞬間迅速節節敗退。起義軍接二連三的被各個擊破,睦州、衢州相繼失守後,方臘支持不住卻又帶著慘敗的二十萬起義軍,目標很大的被迫退到了他原來起義的老家青溪縣一個狹小的青山地帶幫源洞,決定憑險固守。
起義軍一路潰敗,宋軍一路自然乘勝追擊,尤其宋軍各路大軍都一心要先擒住方臘,都不約而同的爭先咬住方臘率領的起義軍不放。在知道方臘率領的起義軍退到確切的位置後,童貫便把二十萬宋軍主力(禁軍和地方宋軍)重點兵分兩路進攻。東路軍有王稟率領禁軍和地方宋軍的中軍,為東路軍總指揮。辛興宗統領前軍,楊惟忠、何灌統領後軍,共十萬宋軍,童貫自己和譚棋統率大軍殿後。
東路軍王稟率領十萬宋軍,四月十五日有睦州兵進白沙渡,起義軍近萬將士在白沙渡激戰犧牲,被宋軍奪去糧船一百多艘,丟失大量糧草。四天後,王稟接連率軍攻陷了青溪縣城,殺起義軍將士數萬。
西路軍有劉延慶率領,命劉鎮,楊可世部趕赴宣州。與劉延慶率領的宋軍回合後,也是禁軍加上地方宋軍共計十萬人,從西麵背後逼近包圍幫源洞,便對方臘的起義軍的幫源洞東西前後形成了棋角夾擊之勢。
為了徹底切斷方臘率領的起義軍對外麵的聯係,童貫又命令地方宋軍各自為戰,以此來牽製各地的起義軍對幫源洞方臘起義軍的增援。一切都部署完畢之後,於四月二十四日黎明,童貫便下令東西兩路宋軍對幫源洞的起義軍展開了瘋狂的夾擊進攻。
東西兩路宋軍,縱火為號,前後夾擊。二十四日,先有西路軍劉鎮率領宋軍,從幫源洞背後發起攻擊,劉延慶在後跟進。起義軍雖然憑山堅守,但沒有弓箭和弓箭手,宋軍迅速突破憑險固守在徑崖壁的起義軍防線,並乘勝且戰