From aa4247ebde249112ef1e13bb08e7e4cf33f6bb6f Mon Sep 17 00:00:00 2001 From: Easy Date: Thu, 25 Aug 2022 14:08:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=A9=E5=B1=95selector=E8=AF=AD=E6=B3=95,?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=8E=B7=E5=8F=96=E5=85=83=E7=B4=A0=E5=B1=9E?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 ++++-- README.tpl.md | 7 ++++ build.txt | 2 +- ckc.zip | Bin 8886637 -> 8886682 bytes docker.txt | 2 +- docker/api/func.js | 37 +++++++++++++----- .../_locales/en/messages.json | 2 +- docker/src/chrome_extension/background.js | 9 +++-- docker/src/chrome_extension/manifest.json | 2 +- index.html | 9 +++-- readme.html | 9 +++-- 11 files changed, 66 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 04407bb..a414a75 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ ## 最新版本 -- 插件·Chrome/Edge:2022.08.23.13.11 [下载](ckc.zip) ([Github下载地址,无需注册](https://github.com/easychen/checkchan-dist/raw/master/ckc.zip)) -- Docker镜像(云端+远程桌面二合一):2022.08.23.12.59 [Docker Hub](https://hub.docker.com/repository/docker/easychen/checkchan) -- 文档:2022.08.23.13.11 +- 插件·Chrome/Edge:2022.08.25.14.08 [下载](ckc.zip) ([Github下载地址,无需注册](https://github.com/easychen/checkchan-dist/raw/master/ckc.zip)) +- Docker镜像(云端+远程桌面二合一):2022.08.25.13.48 [Docker Hub](https://hub.docker.com/repository/docker/easychen/checkchan) +- 文档:2022.08.25.14.08 - 更新日志:[GitHub](https://github.com/easychen/checkchan-dist/commits/main) - 生态:RSSHub浏览器插件整合版([源码](https://github.com/easychen/RSSHub-Radar-with-checkchan) | [下载](https://github.com/easychen/RSSHub-Radar-with-checkchan/releases/download/main/1.7.0.with-checkchan.zip)) @@ -170,10 +170,17 @@ checkchan://title=Server%E9%85%B1%E5%AE%98%E6%96%B9%E7%BD%91%E7%AB%99%E7%8A%B6%E ### Selector 扩展语法 +#### 通过@指定数组元素 + 最新的版本支持了一个Selector扩展语法:由于底层通过 `document.querySelectorAll` 实现,因此会返回匹配的全部元素于一个数组。当这些元素属于同一个父节点我们可以用 `:nth-of-type(1)` 或者 `:nth-child(1)`来指定数组中的某一项。 但如果这些元素不属于同一个父节点,那么以上方法会失效。这里添加了一个 selector@n 的语法,让我们可以从 Selector 返回的数组中指定某一个元素。如 `.booklist .item@0` 将返回 `document.querySelectorAll(.booklist .item)[0]` 。 +#### 通过%获得元素属性 + +Selector的最下一级返回一个元素,但有时候我们需要监测这个元素的某个属性值。比如监测一个链接的`href`。为了解决这个问题,我们扩展了 selector 语法,让用户可以通过 element%attribute 的方式来获取元素的某个属性值。如:`article#post-180 > div > div > p > a%href`。当 `%` 和 `@` 同时使用时, `%` 应紧跟元素后,如:`article#post-180 > div > div > p > a%href@0`。 + + ### 日志查看和错误定位 为了更清楚的了解定时任务的执行情况,你可以打开「开发者工具」(F12)在 `Console` 标签页中可以看到任务产生的日志。 diff --git a/README.tpl.md b/README.tpl.md index 41ebd50..71e76f3 100644 --- a/README.tpl.md +++ b/README.tpl.md @@ -170,10 +170,17 @@ checkchan://title=Server%E9%85%B1%E5%AE%98%E6%96%B9%E7%BD%91%E7%AB%99%E7%8A%B6%E ### Selector 扩展语法 +#### 通过@指定数组元素 + 最新的版本支持了一个Selector扩展语法:由于底层通过 `document.querySelectorAll` 实现,因此会返回匹配的全部元素于一个数组。当这些元素属于同一个父节点我们可以用 `:nth-of-type(1)` 或者 `:nth-child(1)`来指定数组中的某一项。 但如果这些元素不属于同一个父节点,那么以上方法会失效。这里添加了一个 selector@n 的语法,让我们可以从 Selector 返回的数组中指定某一个元素。如 `.booklist .item@0` 将返回 `document.querySelectorAll(.booklist .item)[0]` 。 +#### 通过%获得元素属性 + +Selector的最下一级返回一个元素,但有时候我们需要监测这个元素的某个属性值。比如监测一个链接的`href`。为了解决这个问题,我们扩展了 selector 语法,让用户可以通过 element%attribute 的方式来获取元素的某个属性值。如:`article#post-180 > div > div > p > a%href`。当 `%` 和 `@` 同时使用时, `%` 应紧跟元素后,如:`article#post-180 > div > div > p > a%href@0`。 + + ### 日志查看和错误定位 为了更清楚的了解定时任务的执行情况,你可以打开「开发者工具」(F12)在 `Console` 标签页中可以看到任务产生的日志。 diff --git a/build.txt b/build.txt index 7aea4d5..6d2d646 100644 --- a/build.txt +++ b/build.txt @@ -1 +1 @@ -"2022.08.23.13.11" \ No newline at end of file +"2022.08.25.14.08" \ No newline at end of file diff --git a/ckc.zip b/ckc.zip index 0e3a49549c832e613dee7095f211cade1e40fafc..0466bd302e5604e042c2628a97795f4b70a413ae 100644 GIT binary patch delta 9910 zcmZXa2RzjO|GGD21oS(h@4qU`KZl2FLV zNW}kh=bK;O@4v_6d5_1vKJV9jzuxc9dB0n&$s@|H%_E9H6QBvvP&5&m7)^pEMU$b) z(G+M(G!>c}O@pRI)1m3nr_c;&Ml=(e8O?$|jb=r&)xo?y1c`65nnV8jM-E|!*m-y( z96X$TMa|8~A<%AmQp5;7De%by#t7K*u#rGP9iZL=#z*?sBQ{1#(2~{F%T(V%Yi9@` zpdEGyz!i$&pahM825?3YfH5yy3`)BsB=)RYY&y-$Eyf4oT3N(=S$o0y7Wx+h&WFl4 z|E|q@os^zV7&DjNkv=r{hC11@b1(QJ|288NOSE-$J1_j%?st_6PsSF#2 z{3=^oAN}Qp#mfyXu310*)IVnA{;-o;3xA4wnHZz2wtXpuu-gi9$pA{k2!W75$RJ>} zfVvkEm^>v%?u|m} zRz2p>Tap3Le9cvRf7@jHjB(2w*XsSczIFT}iqzqMSz0k){=gSycws~2r(e#Mqu-ey z3#(+hTH7yQ79~6?Ta*D{=oIh3+-Ej?k{CUT#ET1wFI+Rs$GnLv{AYs)sTJGSK6Fb) z*P@I>X2x4W`?EErGDbgg=D-g2kTu)g-*-_44IlJmTBlo3s=>>Xvor_I&jVMdn%^C5 z?~-0oQ)^36Q4hF*3bV*b6(0O4+m}FzAgnbt4X7WtBou!1L3uWOaNF(r^SWBjx}{n# zMvXO#fffHU&M}9MQso5BBK|RBIfH&hxcjxdWzlQqk|kQ1+mB@3F z0+L3rzB(!ii37BgG+!OFde*FyW49lk?; zMP4OV(%D$}vM36IfF>4yppKSvCE>_2YwqzKDz(+zttvv=()e_936ac24cPen*4w$o zX!(=Nx!6@((xUL}ugk7#?>QJ$tUI+7t#o!bL@)Qsc#2$2N7=_{K{1f-<#zTgc`o^BXRTyP|xhAIA3y4@1|D1n8>qAQ{+yf?ktM*A>pR4vLcezc>`E`H~`^5o1l@3p2wo6UuAndP8#Qe z&bu-yLcUsK-0!&jig&7S=h;TmE~%GY)Ob;2I2JOapN!-^6__?&N3+(Z83hYvQ!f`G z&c9b9T6nHqH33zs`gHB|<3=UgJ_lRZW}_S2V^+hyqeu?L8?%rbHS?t0xo-jn5bqv| zR}QpbbH*L)TxKbgU_l?044naltlI`>Jl zl;?Sr0S)(3{8+?e5I6bTQth9{AzZpn1Ph_ugYFOrb4K{I&Wd zxxL$!?Jtii=%5@qd)IxI=f3y$liJyxNjp6^MtXg-h;WwSwad62m3@mJ^4 z2Z1j6F0`l~y=uE9`?8BlQEc5P64}}J)eoHB7tr)wi0e!1d)aFFyLWoJ&LM&BkQ-fA z63mKLu#`aja!)dF4iK5TeL+gnz|Gg8Tx^=}dV24*$ZOYSDDL~-bI2QOKP1Ri`>FjxtH@?OVY+NB6!&V-x7c{q9wMBS)sBOhQvZ_s` ztl(~3eV1yIMv!N)`&Jm0=Ei;fVi77!t8n@$EM-!^Jy9=AvhoTD{m5SJ5KBIr~^~_yU(N4ZxJ5(^_e&1#ye*mwbbwT`s*SBy=`9)Zx17Vj&{DM zTuFbwm?0{<_Mz!n`0o6y_ZVYb-%rGZtM-xQpfpOBkx6c2MnguYV%WQ1cJ>AmxW8iyUX$kJ^^wM9iF-pw*c8KbHrC|)Ice?OvD%;w^}BVO z37&~?R`$?lF)h`+$rk~r#f!2bHgrP7&I^5I~!P-AIWp3 zS=He1bs!~O(Qb9RRZQ;3oB8(c)zH#Fl~C2jb@AEB&>u=|>s2JgnaQ~^jbWc?CV9To zulT?G22d{xSm^8;&(xTmtH`L{)~g8?oH!6`MA7LDCP)AJ!qm0yl=LMhtaP>j-XP07)HsM7K>f`tT>1%=MUQf;}6S&0CGfl+(PtupT zw#g!Y3>K(O1)SOc$)fwJg*a<79ya~#p3<}G@Ll1_XT6GC7P=wWR#orJOA!+-iDFHh z0t7Fc{Fzh+%CgoHDi|@7;F)Rd^GxzO z)9yvB{HGg)KzhQUFF9LI+9zq3H}QzBm4$151=u>xJsH)W^zwPZX&J-QYbqb96yR@M zD&os6z67&Xk$mz|F5EDnr_R4hXoGTyi7l8aylbWRa5@8}3}f4_S08J#%_c@qA}8nJ zNb&^z@|zW7Y5I=tP`+txCg!2_$<_~+9rD4IpWB|anw3@!oqb64#xh#j@zF+nE*-lX zl<=0zr>hm*3ypS+QYtkaQ(dcSnW4~yvd9rOl~Ccfbi1o{Pg=g-%<_0YCrSKpPHLjC z^SbYZn}EJNN|9kNxxTE5 z<&`A$ZE2`%?{wVwM$@UJj@OpH&AL3AZ?*@M=MyDgaH8_{TjXTNrzcwi1NIMBot8cG z6nzd1YweQri*AWZFNM5Cei{`C&RVUNow_ahjygr9>5$Ry$$tAIo7L7Fkz@%-GbQE4 z0)TIhr{P7`^nuszsI}jNWI-Yuozqc?30oSUi1oet$0EdzjqIRDv72 zR|YIrGA<<%5(|8%lyI8oj)U^G)Mch4;zJ>w$wYKQRhl$8LFDM3D>S2=(A;X@{b2-I z>V+ekM4|(BEk03sPhS~+jp$v4(aEYM?RcUk$v!8qM7fcH;d5)@o3=jgzBj)7n(d+O z9^G4gv5Q1GXRDA-$VSYT8(GM<)ts*NvT{7k5Q1np)_a6xy)9I#H?=gkq>+}2F&pp< zEMNWfy(W)J>?zx~xS~_^Ldu*-rpr{Z{!!*7QoaQ;>h@1GrPYlmo;`Ju`7YIQKjsF5 zQ|(fS>poIQP9iU&FE-GPD_i+?PA4znz%=<6#tfOqsMTLpmtr@yn7On@vR?7AFX@{` zyk#M3+_^r|VrcC^6FYA8)Xn^CE^G8h0=1T})EQTJeX^1(et%{utnsbld6%Qw4X0uo zOQKSCNasj6#r}9GhDA$?A3R`P#e0~wFiZy{UjAqO5ZetEC`ns zn1p$hzS%Psm}*)lDBY!Gm`qA98K&bKAOr-%^|}1VyhECqlReO7Nd7=!tM$Q5o10A> zc@9wd{u0Exk%CNzwV-8st<){2o2?x*BwC2H;X0EQz7X7+RgL7V36+|j zl&iL#|H6`a3*%NSw+ECE#&D@~)Wi?QYrhQP$(B%+2?g1o2MYWe?KMz|Q>f5z+gn2nECH#_D+fu&9kUBDPCvFj zytqQbnUAKUAsy|~2mhA+JxBV0DyqJHAG`bE2r1`meddYW&#si~G)1P{)8kyNZ@psz zuJZ7Cb2})Rbt==Q*?q02WsF<;o#?lPL5|z{T9B}2(hqNVO4(i~$+*)PZ8Dxe9=>n9 z`Dz~}AN;UKVC?d@V8bb0cKDC0ysp$)@@fhWxn{TH9IA&g%i3E`uVWh)SVk8be-rpl z4LncqTF++Svtci<2^FsO?TiZ8oOSg1rqKFUJ3X+Up0vy8`)~30v@`W*?#;|XVt@KS zQ}}536cu_9v$%Ya`{EgrvgHTHEB3ByWe>!j4kh_9d5E}wl>XZ`?B`ELW1Wow%FHA$ zmO|!h+0m|fwb#m>gV`t^`IVc(>{eqPR}@U@*wB@OWX}CcEppaE$|Vd5gat!a8{SL! zbkExA>9uFG(6FTvx868F3qPLcRLY&QPhz%ZNoo8#T*9w?=1XeWEb-$xW3`Pu$k=n_2N78 z!tyYMUhCML!H5x`JG~4OEuk`~yYrmZG)GnMkE9gN8#fLQW)`x@MQn?EsBuajX07DB zcd*FHZNbJgdYK@f@GUe&-lKKBrg_=$rW!Nqr9G2l2x4tZiqltrww-DIR?5;BUsz&M z$Fe11aa_});X4}@fnNTX1C|vp==Z%BBYt2L-|&jO5_;2R{C$xemS8Uz5=N&e>?jUt z)l;EBHbjYg7h5>UQyeUIw2@9XM5E|Echtiobt3K7o25OVsh?9_EEa|sI#(#n4{0u< zCW^{(h{YbGTt8~Rx0VxD@{3bwz1}$B+dOJez>lo!+e@D`S@fu=S}FXpbiv1}^ff!w z%pAz1nKcfju;sN9cgvR=_+*7naU)gv(XzGr>`F!A`Iv3_hJE;V6eaZ$J56JzkI}=` z60{`tw^NV&-SvcKN#}1f_jfZW*W_(>QT)!28=V-I8B;GnESQObg-l^-xvZRD3embV z^E_HfKCiqH(AtJKgP03_;zUvME`6;em$TQY8Q}4b{7FLf8|3Vh^=g(A#9S&`Jn!Bb zy_aJ}kg%M25clp*TB%65(j)R#+d!ws({!d?hR7~sN5`9LJ8gBBE~OS-*X+uora`p} znYn8lp=E=@;13P;?PI#!_mncEuV4s#o+qaAXpFctoDRJW3tX@maf&&jQj;24o@;{j zTO}tc8_e}N_B8ef`5HoP?8_N{ zU2bHy?{eDie3ffp|5ZcaY2~Jjemm-xXw^EU_A>JWEL&k{ucHGn5;x@~CB(Kk)T?|T z)K^6iIZYv4C3Y(LMcvQ?+C}cA*H(UAUtPk!P}6Ae-X-ak+lt!afpLpgbv?MsfN9Et zLW1?mC|#(6k%tl0mU|RM>N{C1{TpLu!u5;gMlx-gXT+aFO32UDr&|_0Br`?%<|Iz7 zm%1s5DjOAdb5U>kE1kWmbVf4LP%Qf*nZAN^m3p?~&6#%{CE+%4gpUkUzlf+YIF>1V zi!wXZ^Su~GX~criix1DQ0q#76c|Lba;H3KX=x2I3MdzLADia9%Ar0{h^Lx_T9*$qU zIOGhbbpn3diXho78t5!f(Z3g~ABFVF!9H+Bdx+$=43Wy9}42k|+}IETHnE7?Bfxb9|qtf2)bOb)$Tny|Q{T zwDY?)wQkZW7%(OV^*E1^?XnIjP|JUgAfVzP6X(o26*tkp6eO(0zx-Hx&>p&VU648; zKuh3da_dGKoA3_@q3(fn`=!MNq74ZZKa!vFpM_xuJH!o%>b*%j`+>nQuB`3QJisJV zOuQzo#v#W>Om$|#FOk1c@()?j!rvM}&pO0pO<`;$M1L7@FE86=^d~45Axtdf+ zEUtEH$EmjRc8Z7&Ut+MVyc77=DnvZPs=$2N%IiAu>7AMJRPAI=!gtH56sKz)Dtox! zBf^T`w$N}TTmO1hc1N;sk+!HKTf~?_+wgAh=5489pxt;eNo(hH@uP!o()9egz5~*8 zfOss7Rr(q!snOYGXJJ64sSiWsV5SD=cCOfhUA|0PjML&hWw0Z3OU^pAC-fh=q|JAMp1j!Os0T`o|A93JO8gDV#TWVuqPAX_4<3+&-~HD{_15% zXyC>6^zi?AiKB-La^l5xVt$;wD*7Z-?C7D`>63akI4s=yobcU)}%=vOQOJX!PSsf*o zI*qp7vKVaT?YSO?1vLTZ&}*^6x`O%*kq?W={g6FccJeA?b?((?&bvDsQ~|ah!WH>l z`P!&cEefi>?^NXyIv1pZp zTl>-(gqkj<_xepQ#t2HywX2;n5I24;VQ|46(BSB<(-u0%F2bGk2>R5C)ItkDtmMq{ zD@Sljc-YJO!8H%ro22{bq*8d3nXsLDDNTE*$*=J*dqct-TjohvAJU_YrVAJK&JJiu z`Q0I?9DL)(64e{g@9AtmI33FFdAINhGr7l$XO%awq`$?bu2i-~!9I^TuItrTODNsO zbgniHQe z@LL{L(2oxY8F&@t>*wI(C*tmVa;Js6(m7`ix8%oNT;T)y=Y#Zkw4WQ|_yX*o-u>$W z4A<6g%)uD{dc=k$w}97?;zMe)flL1h33Ffr#~#>lTtwp^8P9QW{YwomO`qeCJ5d;% z8gae{DxaD(uG@PeEH;R87f!Ve+|2twf6_Gnx zj93Cr=FSTIXpTdXlK=pkOmSgs{GrI>2l!`l`J(cFEMbH4MQ+yJ==;sfFf z;)mtE?|wki-`sKPd??mpXk6|3m;tAV?5MFh~eUC`cGcILIv!6i5U}BuErU zG?sq?P1k_8s*nTNp{a zg2J3Vv4Xc-g~Gs?^J8HUgtwQU zv)A#?K#afbKDLS5osPgk(CbYNh1 z)c?xvwI&?m>EPvtboRv+-rMWM@5#L1kHWxctF^&#PT(&5S5fg%ITd}=@g;*mI>E^P zBy?Q3)nk?8+Ic$tOBIL+zz_kRUKlE%F#$tEPz;zvW32J*P#q1nL$?VW;^Xb;?dL1v z7v%RZRa}eRLt|hBssKA0!+O$a61YVF{i^wU8u`rOf4zAA$pV+7IBxp!^Zm~U>B+Rv zK~^u69P1swf~%75}&b0x<-a4bMr*aD6XxFAj6=Bm%rq!#E6#P~{LHh{G@eobQc8eXfP(n{n)?o#gRTMMz(+uw@9)qQa7|UDvlHBUp9li&6b9$^@20Ynmw@;= zxOoJEO)lc;<|P8o^}m`GC{Ms}KoKJ{z|&GB12B_-afV{XWPrdi8D79O5u*l8*OWbe z){=;ECa4F_B!NSS>;4hufZ+aYbIC!o(3zy~DV0S9;iy>~D=+_<);x$4sxeMkdAxQavIe}()o^6KpXK=*b4 z*WdjC1l|SbS0Xv)*kZ+9j1Ip22)Y#3^}t=x9S%8J9LKw&6+nOQuhjuq-2)9A0WrWD z5W@@P-2?0Xi~?u}FpR(pida5?6##2KLlq13QpNHDDDWG>L!b@7gb;KCikTRl|GoMF rx-<+EK^ahxiBUdT47k;IFALl)-vR7d7y-OoCkw+xvf_pT_q+cC;CbQd delta 9738 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 item.remove() ); const path_info = path.split("@"); - let ret = dom.window.document.querySelectorAll(path_info[0]); + const selector_info = path_info[0].split("%"); + let ret = dom.window.document.querySelectorAll(selector_info[0]); if( path_info[1] ) ret = [ret[path_info[1]]]; let texts = []; @@ -374,10 +375,21 @@ async function monitor_dom_low(item, cookies) for( let item of ret ) { if( !item ) continue; - item.querySelectorAll("[src]").forEach( item => { if( item.src.substr(0,4) != 'http' ) { item.src = new URL(url).origin +( item.src.substr(0,1) == '/' ? item.src : '/'+ item.src ) } } ); - if( item.textContent ) texts.push(item.textContent?.trim()); - html += item.outerHTML ? item.outerHTML + "
" : ""; + ['src','href'].forEach( field => { + + item.querySelectorAll("["+field+"]").forEach( item => { if( item.field.substr(0,4) != 'http' ) { item.field = new URL(url).origin +( item.field.substr(0,1) == '/' ? item.field : '/'+ item.field ) } } ); + + if( item[field] ) + { + if( item[field].substr(0,4) != 'http' ) { item[field] = new URL(url).origin +( item[field].substr(0,1) == '/' ? item[field] : '/'+ item[field] ) } + }; + } ); + + const field = selector_info[1] ? selector_info[1] : "textContent"; + if( item[field] ) texts.push(item[field]?.trim()); + if( field == 'textContent' ) + html += item.outerHTML ? item.outerHTML + "
" : ""; } return {text:path.indexOf(",") >= 0 ? texts.join("\n") :texts[0]||"",html,all}; @@ -547,7 +559,8 @@ async function monitor_dom(item , cookies) if( ignore_path ) window.document.querySelectorAll(ignore_path).forEach( item => item.remove() ); const path_info = path.split("@"); - let ret = window.document.querySelectorAll(path_info[0]); + const selector_info = path_info[0].split("%"); + let ret = window.document.querySelectorAll(selector_info[0]); if( path_info[1] ) ret = [ret[path_info[1]]]; if( !ret ) return false; @@ -558,8 +571,9 @@ async function monitor_dom(item , cookies) { item.querySelectorAll("[src]").forEach( item => { if( item.src.substr(0,4) != 'http' ) { item.src = window.origin +( item.src.substr(0,1) == '/' ? item.src : '/'+ item.src ) } } ); - if( item.innerText ) texts.push(item.innerText?.trim()); - html += item.outerHTML ? item.outerHTML + "
" : ""; + const field = selector_info[1] ? selector_info[1] : "innerText"; + if( item[field] ) texts.push(item[field]?.trim()); + if( field == 'innerText' ) html += item.outerHTML ? item.outerHTML + "
" : ""; } return {html,text:path.indexOf(",") >= 0 ? texts.join("\n") :texts[0]||"","all":window.document.documentElement.innerHTML}; },path,browser_code,ignore_path,click_path,data_path,scroll_down); @@ -597,7 +611,8 @@ async function monitor_dom(item , cookies) if( ignore_path ) window.document.querySelectorAll(ignore_path).forEach( item => item.remove() ); const path_info = path.split("@"); - let ret = window.document.querySelectorAll(path_info[0]); + const selector_info = path_info[0].split("%"); + let ret = window.document.querySelectorAll(selector_info[0]); if( path_info[1] ) ret = [ret[path_info[1]]]; console.log("query fail again",path,ret); @@ -608,8 +623,10 @@ async function monitor_dom(item , cookies) { item.querySelectorAll("[src]").forEach( item => { if( item.src.substr(0,4) != 'http' ) { item.src = window.origin +( item.src.substr(0,1) == '/' ? item.src : '/'+ item.src ) } } ); - if( item.innerText ) texts.push(item.innerText?.trim()); - html += item.outerHTML ? item.outerHTML + "
" : ""; + const field = selector_info[1] ? selector_info[1] : "innerText"; + if( item[field] ) texts.push(item[field]?.trim()); + if( field == 'innerText' ) html += item.outerHTML ? item.outerHTML + "
" : ""; + } return {html,text:path.indexOf(",") >= 0 ? texts.join("\n") :texts[0]||"","all":window.document.documentElement.innerHTML}; },path,browser_code,ignore_path,click_path,data_path,scroll_down); diff --git a/docker/src/chrome_extension/_locales/en/messages.json b/docker/src/chrome_extension/_locales/en/messages.json index f24d2fa..196a9bb 100644 --- a/docker/src/chrome_extension/_locales/en/messages.json +++ b/docker/src/chrome_extension/_locales/en/messages.json @@ -3,7 +3,7 @@ "message": "Check酱" }, "appDesc": { - "message": "监控页面变动,并发送异动到微信。 Build.2022.08.23.13.11", + "message": "监控页面变动,并发送异动到微信。 Build.2022.08.25.14.08", "description":"亦支持http status、json和rss监测。配合自架云端,关电脑后也能运行。" } } \ No newline at end of file diff --git a/docker/src/chrome_extension/background.js b/docker/src/chrome_extension/background.js index 8540c1f..b9089b8 100755 --- a/docker/src/chrome_extension/background.js +++ b/docker/src/chrome_extension/background.js @@ -115,7 +115,8 @@ async function ck_get_content( path,delay=3000, ignore_path = "",click_path = "" // path 扩展语法 selector@1,selector const path_info = path.split("@"); - let ret = window.document.querySelectorAll(path_info[0]); + const selector_info = path_info[0].split("%"); + let ret = window.document.querySelectorAll(selector_info[0]); if( path_info[1] ) ret = [ret[path_info[1]]]; @@ -128,8 +129,10 @@ async function ck_get_content( path,delay=3000, ignore_path = "",click_path = "" item.querySelectorAll("[href]").forEach( item => { if( item.href.substr(0,4) != 'http' ) { item.href = window.origin +( item.href.substr(0,1) == '/' ? item.href : '/'+ item.href ) } } ); - if( item.innerText ) texts.push(item.innerText?.trim()); - html += item.outerHTML ? item.outerHTML + "
" : ""; + const field = selector_info[1] ? selector_info[1] : "innerText"; + if( item[field] ) texts.push(item[field]?.trim()); + if( field == 'innerText' ) + html += item.outerHTML ? item.outerHTML + "
" : ""; } let data_ret = ""; diff --git a/docker/src/chrome_extension/manifest.json b/docker/src/chrome_extension/manifest.json index f3a2507..59249cf 100755 --- a/docker/src/chrome_extension/manifest.json +++ b/docker/src/chrome_extension/manifest.json @@ -3,7 +3,7 @@ "name": "__MSG_appTitle__", "description": "__MSG_appDesc__", "default_locale": "en", - "version": "0.9.10", + "version": "0.9.11", "icons": { "512": "logo.color.png" }, diff --git a/index.html b/index.html index 9540b15..2fdb1c7 100644 --- a/index.html +++ b/index.html @@ -20,9 +20,9 @@

最新版本

@@ -106,8 +106,11 @@

如果 「监测周期限制」 为每分钟,而「监控间隔时间」为60分钟,那么每分钟都会尝试监测,而一旦监测成功一次,那么下次监测将是60分钟后。

同时,因为执行监测任务本身也耗费时间,所以「监控间隔时间」为1分钟时,往往每隔一分钟(即每两分钟)才会运行一次任务。

Selector 扩展语法

+

通过@指定数组元素

最新的版本支持了一个Selector扩展语法:由于底层通过 document.querySelectorAll 实现,因此会返回匹配的全部元素于一个数组。当这些元素属于同一个父节点我们可以用 :nth-of-type(1) 或者 :nth-child(1)来指定数组中的某一项。

但如果这些元素不属于同一个父节点,那么以上方法会失效。这里添加了一个 selector@n 的语法,让我们可以从 Selector 返回的数组中指定某一个元素。如 .booklist .item@0 将返回 document.querySelectorAll(.booklist .item)[0]

+

通过%获得元素属性

+

Selector的最下一级返回一个元素,但有时候我们需要监测这个元素的某个属性值。比如监测一个链接的href。为了解决这个问题,我们扩展了 selector 语法,让用户可以通过 element%attribute 的方式来获取元素的某个属性值。如:article#post-180 > div > div > p > a%href。当 %@ 同时使用时, % 应紧跟元素后,如:article#post-180 > div > div > p > a%href@0

日志查看和错误定位

为了更清楚的了解定时任务的执行情况,你可以打开「开发者工具」(F12)在 Console 标签页中可以看到任务产生的日志。

diff --git a/readme.html b/readme.html index d5de6c8..a1fc4e9 100644 --- a/readme.html +++ b/readme.html @@ -9,9 +9,9 @@

最新版本

@@ -95,8 +95,11 @@

如果 「监测周期限制」 为每分钟,而「监控间隔时间」为60分钟,那么每分钟都会尝试监测,而一旦监测成功一次,那么下次监测将是60分钟后。

同时,因为执行监测任务本身也耗费时间,所以「监控间隔时间」为1分钟时,往往每隔一分钟(即每两分钟)才会运行一次任务。

Selector 扩展语法

+

通过@指定数组元素

最新的版本支持了一个Selector扩展语法:由于底层通过 document.querySelectorAll 实现,因此会返回匹配的全部元素于一个数组。当这些元素属于同一个父节点我们可以用 :nth-of-type(1) 或者 :nth-child(1)来指定数组中的某一项。

但如果这些元素不属于同一个父节点,那么以上方法会失效。这里添加了一个 selector@n 的语法,让我们可以从 Selector 返回的数组中指定某一个元素。如 .booklist .item@0 将返回 document.querySelectorAll(.booklist .item)[0]

+

通过%获得元素属性

+

Selector的最下一级返回一个元素,但有时候我们需要监测这个元素的某个属性值。比如监测一个链接的href。为了解决这个问题,我们扩展了 selector 语法,让用户可以通过 element%attribute 的方式来获取元素的某个属性值。如:article#post-180 > div > div > p > a%href。当 %@ 同时使用时, % 应紧跟元素后,如:article#post-180 > div > div > p > a%href@0

日志查看和错误定位

为了更清楚的了解定时任务的执行情况,你可以打开「开发者工具」(F12)在 Console 标签页中可以看到任务产生的日志。