mxs 10 місяців тому
батько
коміт
6c2f9504d1

+ 3 - 3
app.go

@@ -6,9 +6,9 @@ import (
 	"log"
 	"os"
 	rt "runtime"
-	bdb "spidercreator/backend/db"
-	bvm "spidercreator/backend/vm"
-	bws "spidercreator/backend/webservice"
+	bdb "spider_creator/backend/db"
+	bvm "spider_creator/backend/vm"
+	bws "spider_creator/backend/webservice"
 )
 
 func getDownloadDir() (string, error) {

+ 1 - 1
backend/ai/ai.go

@@ -4,7 +4,7 @@ import (
 	"errors"
 	"fmt"
 
-	be "spidercreator/backend"
+	be "spider_creator/backend"
 	"strings"
 
 	zhipu "github.com/itcwc/go-zhipu/model_api"

+ 1 - 1
backend/db/db.go

@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"errors"
 	"log"
-	be "spidercreator/backend"
+	be "spider_creator/backend"
 
 	"github.com/boltdb/bolt"
 )

+ 6 - 6
backend/db/spider.go

@@ -7,7 +7,7 @@ import (
 	"log"
 	"os"
 	"sort"
-	be "spidercreator/backend"
+	be "spider_creator/backend"
 	"strconv"
 	"strings"
 
@@ -123,11 +123,11 @@ func (s *SpiderDb) BatchImport(filepath string) error {
 				continue
 			}
 			sc := &be.SpiderConfig{
-				Code:    row[0],
-				Site:    row[1],
-				Channel: row[2],
-				Url:     row[3],
-				Author:  row[4],
+				Code:       row[0],
+				Site:       row[1],
+				Channel:    row[2],
+				Href:       row[3],
+				ModifyUser: row[4],
 			}
 			value, _ := json.Marshal(sc)
 			err = s.db.Update(func(tx *bolt.Tx) error {

+ 54 - 38
backend/types.go

@@ -2,7 +2,7 @@ package backend
 
 import (
 	"container/list"
-	qu "jygit.jydev.jianyu360.cn/data_processing/common_utils"
+	"encoding/json"
 )
 
 const (
@@ -10,13 +10,18 @@ const (
 	JOB_RUNNING_EVENT_DEBUG    = 0
 )
 
+var (
+	DataResults   = map[string]*list.List{}                //调试运行结果
+	VerifyResults = map[string]*SpiderConfigVerifyResult{} //调试验证结果
+)
+
 type (
 	//爬虫配置信息
 	SpiderConfig struct {
 		Site               string `json:"site"`
 		Channel            string `json:"channel"`
-		Author             string `json:"author"`
-		Url                string `json:"url"`
+		ModifyUser         string `json:"modifyuser"`
+		Href               string `json:"href"`
 		Code               string `json:"code"`
 		ListBodyCss        string `json:"listBodyCss"`
 		ListItemCss        string `json:"listItemCss"`
@@ -31,7 +36,12 @@ type (
 		ListJSCode         string `json:"listJs"`
 		ContentJSCode      string `json:"contentJs"`
 		AttachJSCode       string `json:"attachJs"` //无效
-		ListTrunPageJSCode string `json:"listTrunPageJs"`
+		ListTurnPageJSCode string `json:"listTurnPageJs"`
+		MaxPages           int64  `json:"maxPages"`
+		//延时
+		ListDelayTime     int64 `json:"listDelayTime"`
+		ListTurnDelayTime int64 `json:"listTurnDelayTime"`
+		ContentDelayTime  int64 `json:"contentDelayTime"`
 	}
 	//附件链接
 	AttachLink struct {
@@ -157,35 +167,41 @@ func CopyAttribute(dst *string, value1, value2 string) {
 }
 
 // NewSpiderConfig 生成css对象
-func NewSpiderConfig(param map[string]interface{}) *SpiderConfig {
-	param_common := param["param_common"].(map[string]interface{})
-	css_list, _ := param["css_list"].(map[string]interface{})
-	css_content, _ := param["css_content"].(map[string]interface{})
-	js_list, _ := param["js_list"].(map[string]interface{})
-	js_nextpage, _ := param["js_nextpage"].(map[string]interface{})
-	js_content, _ := param["js_content"].(map[string]interface{})
-	sc := &SpiderConfig{
-		Site:               qu.ObjToString(param_common["site"]),
-		Channel:            qu.ObjToString(param_common["channel"]),
-		Author:             qu.ObjToString(param_common["modifyuser"]),
-		Url:                qu.ObjToString(param_common["href"]),
-		Code:               qu.ObjToString(param_common["code"]),
-		ListBodyCss:        qu.ObjToString(css_list["body"]),
-		ListItemCss:        qu.ObjToString(css_list["title"]),
-		ListLinkCss:        qu.ObjToString(css_list["href"]),
-		ListPubtimeCss:     qu.ObjToString(css_list["ptime"]),
-		ListNextPageCss:    qu.ObjToString(css_list["nextpage"]),
-		TitleCss:           qu.ObjToString(css_content["title"]),
-		PublishUnitCss:     qu.ObjToString(css_content["source"]),
-		PublishTimeCss:     qu.ObjToString(css_content["ptime"]),
-		ContentCss:         qu.ObjToString(css_content["content"]),
-		AttachCss:          qu.ObjToString(css_content["file"]),
-		ListJSCode:         qu.ObjToString(js_list["js"]),
-		ContentJSCode:      qu.ObjToString(js_content["js"]),
-		ListTrunPageJSCode: qu.ObjToString(js_nextpage["js"]),
-		//AttachJSCode    :     string `json:"attachJs"` //无效
+func NewSpiderConfig(cssmark map[string]interface{}) (*SpiderConfig, error) {
+	sc := &SpiderConfig{}
+	cssmark_byte, err := json.Marshal(cssmark)
+	if err != nil {
+		return nil, err
 	}
-	return sc
+	err = json.Unmarshal(cssmark_byte, &sc)
+	return sc, err
+	//param_common := param["param_common"].(map[string]interface{})
+	//css_list, _ := param["css_list"].(map[string]interface{})
+	//css_content, _ := param["css_content"].(map[string]interface{})
+	//js_list, _ := param["js_list"].(map[string]interface{})
+	//js_nextpage, _ := param["js_nextpage"].(map[string]interface{})
+	//js_content, _ := param["js_content"].(map[string]interface{})
+	//sc := &SpiderConfig{
+	//	Site:               qu.ObjToString(param_common["site"]),
+	//	Channel:            qu.ObjToString(param_common["channel"]),
+	//	Modifyuser:         qu.ObjToString(param_common["modifyuser"]),
+	//	Href:               qu.ObjToString(param_common["href"]),
+	//	Code:               qu.ObjToString(param_common["code"]),
+	//	ListBodyCss:        qu.ObjToString(css_list["body"]),
+	//	ListItemCss:        qu.ObjToString(css_list["title"]),
+	//	ListLinkCss:        qu.ObjToString(css_list["href"]),
+	//	ListPubtimeCss:     qu.ObjToString(css_list["ptime"]),
+	//	ListNextPageCss:    qu.ObjToString(css_list["nextpage"]),
+	//	TitleCss:           qu.ObjToString(css_content["title"]),
+	//	PublishUnitCss:     qu.ObjToString(css_content["source"]),
+	//	PublishTimeCss:     qu.ObjToString(css_content["ptime"]),
+	//	ContentCss:         qu.ObjToString(css_content["content"]),
+	//	AttachCss:          qu.ObjToString(css_content["file"]),
+	//	ListJSCode:         qu.ObjToString(js_list["js"]),
+	//	ContentJSCode:      qu.ObjToString(js_content["js"]),
+	//	ListTrunPageJSCode: qu.ObjToString(js_nextpage["js"]),
+	//	//AttachJSCode    :     string `json:"attachJs"` //无效
+	//}
 }
 
 // MergeSpiderConfig 合并
@@ -194,8 +210,8 @@ func MergeSpiderConfig(src1, src2 *SpiderConfig) *SpiderConfig {
 	CopyAttribute(&nsc.Code, src2.Code, src1.Code)
 	CopyAttribute(&nsc.Site, src2.Site, src1.Site)
 	CopyAttribute(&nsc.Channel, src2.Channel, src1.Channel)
-	CopyAttribute(&nsc.Url, src2.Url, src1.Url)
-	CopyAttribute(&nsc.Author, src2.Author, src1.Author)
+	CopyAttribute(&nsc.Href, src2.Href, src1.Href)
+	CopyAttribute(&nsc.ModifyUser, src2.ModifyUser, src1.ModifyUser)
 	CopyAttribute(&nsc.ListBodyCss, src2.ListBodyCss, src1.ListBodyCss)
 	CopyAttribute(&nsc.ListItemCss, src2.ListItemCss, src1.ListItemCss)
 	CopyAttribute(&nsc.ListLinkCss, src2.ListLinkCss, src1.ListLinkCss)
@@ -209,7 +225,7 @@ func MergeSpiderConfig(src1, src2 *SpiderConfig) *SpiderConfig {
 	CopyAttribute(&nsc.ListJSCode, src2.ListJSCode, src1.ListJSCode)
 	CopyAttribute(&nsc.ContentJSCode, src2.ContentJSCode, src1.ContentJSCode)
 	CopyAttribute(&nsc.AttachJSCode, src2.AttachJSCode, src1.AttachJSCode)
-	CopyAttribute(&nsc.ListTrunPageJSCode, src2.ListTrunPageJSCode, src1.ListTrunPageJSCode)
+	CopyAttribute(&nsc.ListTurnPageJSCode, src2.ListTurnPageJSCode, src1.ListTurnPageJSCode)
 	return nsc
 }
 
@@ -217,9 +233,9 @@ func MergeSpiderConfig(src1, src2 *SpiderConfig) *SpiderConfig {
 func CopySpiderConfig(src1, src2 *SpiderConfig) {
 	src1.Code = src2.Code
 	src1.Site = src2.Site
-	src1.Author = src2.Author
+	src1.ModifyUser = src2.ModifyUser
 	src1.Channel = src2.Channel
-	src1.Url = src2.Url
+	src1.Href = src2.Href
 	src1.ListBodyCss = src2.ListBodyCss
 	src1.ListItemCss = src2.ListItemCss
 	src1.ListPubtimeCss = src2.ListPubtimeCss
@@ -231,7 +247,7 @@ func CopySpiderConfig(src1, src2 *SpiderConfig) {
 	src1.ContentCss = src2.ContentCss
 	src1.AttachCss = src2.AttachCss
 	src1.ListJSCode = src2.ListJSCode
-	src1.ListTrunPageJSCode = src2.ListTrunPageJSCode
+	src1.ListTurnPageJSCode = src2.ListTurnPageJSCode
 	src1.ContentJSCode = src2.ContentJSCode
 	src1.AttachJSCode = src2.AttachJSCode
 }

+ 16 - 12
backend/vm/check.go

@@ -3,14 +3,15 @@ package vm
 import (
 	"container/list"
 	"log"
-	be "spidercreator/backend"
+	be "spider_creator/backend"
 	"time"
 
 	"github.com/chromedp/chromedp"
 )
 
 // VerifySpiderConfig 验证爬虫配置,支持翻页,列表项数据只提取2条
-func (vm *VM) VerifySpiderConfig(sf *be.SpiderConfig, verifyResult *list.List) (*be.SpiderConfigVerifyResult, error) {
+func (vm *VM) VerifySpiderConfig(sc *be.SpiderConfig) (*be.SpiderConfigVerifyResult, error) {
+	verifyResult := list.New()
 	ret := &be.SpiderConfigVerifyResult{true, true, true, true, true, true, true}
 	_, baseCancelFn, _, _, ctx, incCancelFn := be.NewBrowser(false, false, "")    //列表页使用
 	_, baseCancelFn2, _, _, ctx2, incCancelFn2 := be.NewBrowser(false, false, "") //详情页使用
@@ -21,19 +22,20 @@ func (vm *VM) VerifySpiderConfig(sf *be.SpiderConfig, verifyResult *list.List) (
 		baseCancelFn()
 	}()
 
-	listRunJs, contentRunJs := sf.ListJSCode, sf.ContentJSCode
+	listRunJs, contentRunJs := sc.ListJSCode, sc.ContentJSCode
 	//TODO 2. 执行JS代码,获取列表页信息
 	if listRunJs == "" {
-		listRunJs = renderJavascriptCoder(loadListItemsJS, sf)
+		listRunJs = renderJavascriptCoder(loadListItemsJS, sc)
 	}
 	if contentRunJs == "" {
-		contentRunJs = renderJavascriptCoder(loadContentJS, sf)
+		contentRunJs = renderJavascriptCoder(loadContentJS, sc)
 	}
 	//TODO 3.打开列表,获取条目清单
 	chromedp.Run(ctx, chromedp.Tasks{
-		chromedp.Navigate(sf.Url),
+		chromedp.Navigate(sc.Href),
 		chromedp.WaitReady("document.body", chromedp.ByJSPath),
-		chromedp.Sleep(1000 * time.Millisecond),
+		//chromedp.Sleep(1000 * time.Millisecond),
+		chromedp.Sleep(time.Duration(sc.ListDelayTime) * time.Millisecond),
 	})
 	no := 1
 T:
@@ -55,7 +57,8 @@ T:
 			err = chromedp.Run(ctx2, chromedp.Tasks{
 				chromedp.Navigate(r.Href),
 				chromedp.WaitReady("document.body", chromedp.ByJSPath),
-				chromedp.Sleep(1000 * time.Millisecond),
+				//chromedp.Sleep(1000 * time.Millisecond),
+				chromedp.Sleep(time.Duration(sc.ContentDelayTime) * time.Millisecond),
 			})
 			if err != nil {
 				continue
@@ -67,11 +70,11 @@ T:
 			if err != nil {
 				continue
 			}
-			if sf.AttachCss != "" {
+			if sc.AttachCss != "" {
 				downloadAttaches(r, vm.attachesDir)
 			}
-			r.Site = sf.Site
-			r.Channel = sf.Channel
+			r.Site = sc.Site
+			r.Channel = sc.Channel
 			if r.Title == "" {
 				r.Title = r.ListTitle
 			}
@@ -85,7 +88,8 @@ T:
 		}
 
 		//TODO 6.翻页
-		if err = trunPage(sf, 2000, ctx); err != nil {
+		//if err = trunPage(sc, 2000, ctx); err != nil {
+		if err = trunPage(sc, sc.ListTurnDelayTime, ctx); err != nil {
 			ret.ListTrunPage = false
 			break T
 		}

+ 2 - 2
backend/vm/jobs.go

@@ -9,8 +9,8 @@ import (
 	"errors"
 	"fmt"
 	"log"
-	be "spidercreator/backend"
-	bdb "spidercreator/backend/db"
+	be "spider_creator/backend"
+	bdb "spider_creator/backend/db"
 	"strconv"
 	"time"
 

+ 21 - 17
backend/vm/single.go

@@ -4,13 +4,12 @@ import (
 	"container/list"
 	_ "embed"
 	"fmt"
+	"github.com/chromedp/chromedp"
 	"log"
-	be "spidercreator/backend"
-	ai "spidercreator/backend/ai"
+	be "spider_creator/backend"
+	ai "spider_creator/backend/ai"
 	"strconv"
 	"time"
-
-	"github.com/chromedp/chromedp"
 )
 
 // NewVM
@@ -21,13 +20,16 @@ func NewVM(attachesDir string, dnf be.EventNotifyFace) *VM {
 }
 
 // RunSpider
-func (vm *VM) RunSpider(url string, maxPages int,
-	listDealy int64, contentDelay int64,
-	headless bool, showImage bool,
-	proxyServe string, exit chan bool,
-	currentSpiderConfig *be.SpiderConfig,
-	currentResult *list.List) {
-	sc := be.MergeSpiderConfig(currentSpiderConfig, &be.SpiderConfig{Url: url})
+func (vm *VM) RunSpider(url string, maxPages int, listDealy int64, contentDelay int64, headless bool, showImage bool, proxyServe string, exit chan bool, cssMark map[string]interface{}) {
+	sc, err := be.NewSpiderConfig(cssMark)
+	if err != nil {
+		log.Println("标注信息传输失败!")
+		vm.dnf.Dispatch("debug_event", "标注信息传输失败!")
+		return
+	}
+	if url != "" {
+		sc.Href = url
+	}
 	_, baseCancel, _, _, ctx, cancel := be.NewBrowser(headless, showImage, proxyServe)
 	log.Println("1浏览器打开", *sc)
 	vm.dnf.Dispatch("debug_event", "1 浏览器打开")
@@ -39,9 +41,9 @@ func (vm *VM) RunSpider(url string, maxPages int,
 		close(exit)
 	}()
 	chromedp.Run(ctx, chromedp.Tasks{
-		chromedp.Navigate(sc.Url),
-		chromedp.WaitReady("document.body", chromedp.ByJSPath),
-		chromedp.Sleep(time.Duration(listDealy) * time.Millisecond),
+		chromedp.Navigate(sc.Href),                                  //打开页面
+		chromedp.WaitReady("document.body", chromedp.ByJSPath),      //等待body加载完毕
+		chromedp.Sleep(time.Duration(listDealy) * time.Millisecond), //列表页等待
 	})
 	vm.dnf.Dispatch("debug_event", "2 页面已经打开")
 	log.Println("2页面打开")
@@ -52,7 +54,7 @@ func (vm *VM) RunSpider(url string, maxPages int,
 		runJs = renderJavascriptCoder(loadListItemsJS, sc)
 	}
 	//log.Println("execute list jscode", runJs)
-	err := chromedp.Run(ctx, chromedp.Tasks{
+	err = chromedp.Run(ctx, chromedp.Tasks{
 		chromedp.Evaluate(runJs, &listResult),
 	})
 	if err != nil {
@@ -68,6 +70,8 @@ func (vm *VM) RunSpider(url string, maxPages int,
 	if runJs == "" {
 		runJs = renderJavascriptCoder(loadContentJS, sc)
 	}
+	currentResult := list.New()
+	be.DataResults[sc.Code] = currentResult
 	//log.Println("execute content js", runJs)
 	for _, v := range listResult {
 		select {
@@ -105,7 +109,7 @@ func (vm *VM) RunSpider(url string, maxPages int,
 // CountYestodayArts 统计昨日信息发布量
 func (vm *VM) CountYestodayArts(url string, listDealy int64, trunPageDelay int64,
 	headless bool, showImage bool, exit chan bool, currentSpiderConfig *be.SpiderConfig) (count int) {
-	sc := be.MergeSpiderConfig(currentSpiderConfig, &be.SpiderConfig{Url: url})
+	sc := be.MergeSpiderConfig(currentSpiderConfig, &be.SpiderConfig{Href: url})
 	_, baseCancel, _, _, ctx, cancel := be.NewBrowser(headless, showImage, "")
 	log.Println("1浏览器打开")
 	vm.dnf.Dispatch("debug_event", "1 浏览器打开")
@@ -126,7 +130,7 @@ func (vm *VM) CountYestodayArts(url string, listDealy int64, trunPageDelay int64
 
 	//TODO 1.
 	chromedp.Run(ctx, chromedp.Tasks{
-		chromedp.Navigate(sc.Url),
+		chromedp.Navigate(sc.Href),
 		chromedp.WaitReady("document.body", chromedp.ByJSPath),
 		chromedp.Sleep(time.Duration(listDealy) * time.Millisecond),
 	})

+ 3 - 3
backend/vm/vm.go

@@ -11,7 +11,7 @@ import (
 	"math/rand"
 	"net/http"
 	"os"
-	be "spidercreator/backend"
+	be "spider_creator/backend"
 	"strings"
 	"text/template"
 	"time"
@@ -121,10 +121,10 @@ func downloadAttaches(v *be.ResultItem, attachesDir string) {
 
 // trunPage 翻页,需要作检查
 func trunPage(sc *be.SpiderConfig, delay int64, ctx context.Context) error {
-	if sc.ListBodyCss == "" || (sc.ListNextPageCss == "" && sc.ListTrunPageJSCode == "") {
+	if sc.ListBodyCss == "" || (sc.ListNextPageCss == "" && sc.ListTurnPageJSCode == "") {
 		return errors.New("当前爬虫配置,不具备翻页条件")
 	}
-	var runJs, result string = sc.ListTrunPageJSCode, ""
+	var runJs, result string = sc.ListTurnPageJSCode, ""
 	if runJs == "" {
 		runJs = fmt.Sprintf(`var link=document.querySelector("%s");if(link)link.click();""`, sc.ListNextPageCss)
 	}

+ 18 - 10
backend/vm/worker.go

@@ -4,7 +4,7 @@ import (
 	"container/list"
 	"fmt"
 	"log"
-	be "spidercreator/backend"
+	be "spider_creator/backend"
 	"sync"
 	"time"
 
@@ -63,12 +63,18 @@ func (w *Worker) Run(v *be.ResultItem, ch chan *Worker, wg *sync.WaitGroup) {
 }
 
 // RunSpiderMulThreads
-func (vm *VM) RunSpiderMulThreads(url string, maxPages int, listDealy int64,
-	trunPageDelay int64, contentDelay int64,
-	headless bool, showImage bool, proxyServe string, threads int,
-	exit chan bool,
-	currentSpiderConfig *be.SpiderConfig, currentResult *list.List) {
-	sc := be.MergeSpiderConfig(currentSpiderConfig, &be.SpiderConfig{Url: url})
+func (vm *VM) RunSpiderMulThreads(url string, maxPages int, listDealy int64, trunPageDelay int64, contentDelay int64, headless bool, showImage bool, proxyServe string, threads int, exit chan bool,
+	cssMark map[string]interface{}) {
+	//sc := be.MergeSpiderConfig(currentSpiderConfig, &be.SpiderConfig{Href: url})
+	sc, err := be.NewSpiderConfig(cssMark)
+	if err != nil {
+		log.Println("标注信息传输失败!")
+		vm.dnf.Dispatch("debug_event", "标注信息传输失败!")
+		return
+	}
+	if url != "" {
+		sc.Href = url
+	}
 	_, baseCancel, _, _, ctx, cancel := be.NewBrowser(headless, showImage, proxyServe)
 	log.Println("1浏览器打开")
 	vm.dnf.Dispatch("debug_event", "1 浏览器打开")
@@ -107,12 +113,14 @@ func (vm *VM) RunSpiderMulThreads(url string, maxPages int, listDealy int64,
 	no := 1
 	//TODO 1.翻页操作,需要在外层打开列表页
 	chromedp.Run(ctx, chromedp.Tasks{
-		chromedp.Navigate(sc.Url),
+		chromedp.Navigate(sc.Href),
 		chromedp.WaitReady("document.body", chromedp.ByJSPath),
 		chromedp.Sleep(time.Duration(listDealy) * time.Millisecond),
 	})
 	vm.dnf.Dispatch("debug_event", "2 页面已经打开")
 	log.Println("2页面打开")
+	currentResult := list.New()
+	be.DataResults[sc.Code] = currentResult
 	for i := 0; i < maxPages; i++ {
 		listResult := make(be.ResultItems, 0)
 		//TODO 2. 执行JS代码,获取列表页信息
@@ -142,8 +150,8 @@ func (vm *VM) RunSpiderMulThreads(url string, maxPages int, listDealy int64,
 			}
 		}
 		wg.Wait()
-		vm.dnf.Dispatch("debug_event", "4 当前页采集完成,准备执行翻页逻辑//"+currentSpiderConfig.ListNextPageCss)
-		if err = trunPage(currentSpiderConfig, trunPageDelay, ctx); err != nil {
+		vm.dnf.Dispatch("debug_event", "4 当前页采集完成,准备执行翻页逻辑//"+sc.ListNextPageCss)
+		if err = trunPage(sc, trunPageDelay, ctx); err != nil {
 			log.Println("翻页失败", err.Error())
 			vm.dnf.Dispatch("debug_event", "6 翻页失败: "+err.Error())
 			time.Sleep(3 * time.Second)

+ 2 - 2
backend/webservice/webservice.go

@@ -8,8 +8,8 @@ import (
 	"fmt"
 	"log"
 	"net/http"
-	be "spidercreator/backend"
-	bdb "spidercreator/backend/db"
+	be "spider_creator/backend"
+	bdb "spider_creator/backend/db"
 )
 
 const (

+ 36 - 43
bind4spider.go

@@ -2,26 +2,43 @@
 package main
 
 import (
+	qu "jygit.jydev.jianyu360.cn/data_processing/common_utils"
 	"log"
 	"sort"
-	be "spidercreator/backend"
-	bdb "spidercreator/backend/db"
+	be "spider_creator/backend"
+	bdb "spider_creator/backend/db"
 )
 
 // DebugSpider 调试爬虫
-func (a *App) DebugSpider(url string, maxPages int, listDealy int64, trunPageDelay int64, contentDelay int64, headless bool,
-	showImage bool, proxyServe string, threads int) {
+func (a *App) DebugSpider(url string, proxyServe string, maxPages int, listDealy int64, trunPageDelay int64, contentDelay int64, headless bool,
+	showImage bool, threads int, cssMark map[string]interface{}) {
 	exitCh = make(chan bool, 1)
-	currentResults.Init()
+	qu.Debug(url, proxyServe, maxPages, listDealy, trunPageDelay, contentDelay, headless, showImage, threads)
+	qu.Debug(cssMark)
 	if maxPages == 1 && threads == 1 {
-		vm.RunSpider(url, maxPages, listDealy, contentDelay, headless, showImage, proxyServe, exitCh,
-			currentSpiderConfig, currentResults)
+		vm.RunSpider(url, maxPages, listDealy, contentDelay, headless, showImage, proxyServe, exitCh, cssMark)
 	} else { //多页下载强制使用多线程模式
-		vm.RunSpiderMulThreads(url, maxPages, listDealy, trunPageDelay, contentDelay, headless, showImage, proxyServe, threads, exitCh,
-			currentSpiderConfig, currentResults)
+		vm.RunSpiderMulThreads(url, maxPages, listDealy, trunPageDelay, contentDelay, headless, showImage, proxyServe, threads, exitCh, cssMark)
 	}
 }
 
+// VerifySpiderConfig 验证
+func (a *App) VerifySpiderConfig(cssMark map[string]interface{}) (*be.SpiderConfigVerifyResult, int, string) {
+	var errtype int
+	sc, err := be.NewSpiderConfig(cssMark)
+	if err != nil {
+		qu.Debug("CssMark Marshal Error:", err)
+		return nil, errtype, "验证失败"
+	}
+	ret, err := vm.VerifySpiderConfig(sc) //验证
+	if err != nil {
+		qu.Debug("验证脚本配置失败::", err.Error())
+		return ret, errtype, "验证脚本配置失败"
+	}
+	be.VerifyResults[sc.Code] = ret
+	return ret, 1, "验证脚本配置成功"
+}
+
 // StopDebugSpider 停止调试
 func (a *App) StopDebugSpider() string {
 	defer func() {
@@ -34,16 +51,18 @@ func (a *App) StopDebugSpider() string {
 }
 
 // ViewResultItemAll 查看所有结果,只显示最近的50条
-func (a *App) ViewResultItemAll() be.ResultItems {
+func (a *App) ViewResultItemAll(code string) be.ResultItems {
 	ret := make(be.ResultItems, 0)
 	index := 0
-	for el := currentResults.Back(); el != nil; el = el.Prev() {
-		if index > 50 {
-			break
+	if dataResult := be.DataResults[code]; dataResult != nil {
+		for el := dataResult.Back(); el != nil; el = el.Prev() {
+			if index > 50 {
+				break
+			}
+			index += 1
+			v, _ := el.Value.(*be.ResultItem)
+			ret = append(ret, v)
 		}
-		index += 1
-		v, _ := el.Value.(*be.ResultItem)
-		ret = append(ret, v)
 	}
 	return ret
 }
@@ -62,8 +81,7 @@ func (a *App) ImportSpiderConfigByExcelFile(filepath string) string {
 }
 
 // CountYestodayArts
-func (a *App) CountYestodayArts(url string, listDealy int64,
-	trunPageDelay int64, headless bool, showImage bool) {
+func (a *App) CountYestodayArts(url string, listDealy int64, trunPageDelay int64, headless bool, showImage bool) {
 	exitCh = make(chan bool, 1)
 	vm.CountYestodayArts(url, listDealy, trunPageDelay, headless, showImage, exitCh, currentSpiderConfig)
 }
@@ -128,28 +146,3 @@ func (a *App) ExportJobResult(code string, filePath string) string {
 	vm.ExportJobResult(code, filePath)
 	return "ok"
 }
-
-// VerifySpiderConfig 验证
-func (a *App) VerifySpiderConfig() *be.SpiderConfigVerifyResult {
-	currentResults.Init()
-	ret, err := vm.VerifySpiderConfig(currentSpiderConfig, currentResults)
-	if err != nil {
-		log.Println("验证脚本配置失败::", err.Error())
-	} else {
-		log.Println("验证脚本配置成功")
-	}
-	return ret
-}
-
-// VerifySpiderConfig 验证
-//func (a *App) VerifySpiderConfig(param map[string]interface{}) *be.SpiderConfigVerifyResult {
-//	sc := be.NewSpiderConfig(param)
-//	currentResults.Init()
-//	ret, err := vm.VerifySpiderConfig(sc, currentResults)
-//	if err != nil {
-//		log.Println("验证脚本配置失败::", err.Error())
-//	} else {
-//		log.Println("验证脚本配置成功")
-//	}
-//	return ret
-//}

+ 1 - 1
bind4spidercfg.go

@@ -3,7 +3,7 @@ package main
 
 import (
 	"log"
-	be "spidercreator/backend"
+	be "spider_creator/backend"
 )
 
 // LoadSpiderConfigAll,带分页

+ 5 - 4
main.go

@@ -3,10 +3,10 @@ package main
 import (
 	"container/list"
 	"embed"
-	be "spidercreator/backend"
-	bdb "spidercreator/backend/db"
-	bvm "spidercreator/backend/vm"
-	bws "spidercreator/backend/webservice"
+	be "spider_creator/backend"
+	bdb "spider_creator/backend/db"
+	bvm "spider_creator/backend/vm"
+	bws "spider_creator/backend/webservice"
 
 	"github.com/wailsapp/wails/v2"
 	"github.com/wailsapp/wails/v2/pkg/options"
@@ -14,6 +14,7 @@ import (
 )
 
 var (
+	//go:embed all:frontend/dist
 	assets               embed.FS
 	app                  *App
 	db                   *bdb.SpiderDb