11const Q = {
2+ commentButton : "button[aria-label^='Read or add comments']" ,
23 commentList : "//div[contains(@class, 'CommentListContainer')]" ,
34 commentItem : "div[contains(@class, 'CommentItemContainer')]" ,
45 viewMoreReplies : ".//p[contains(@class, 'ReplyActionText')]" ,
@@ -15,7 +16,7 @@ export const BREADTH_ALL = Symbol("BREADTH_ALL");
1516export class TikTokSharedBehavior {
1617 async awaitPageLoad ( ctx : any ) {
1718 const { assertContentValid, waitUntilNode } = ctx . Lib ;
18- await waitUntilNode ( Q . pageLoadWaitUntil , document , null , 10000 ) ;
19+ await waitUntilNode ( Q . pageLoadWaitUntil , document , null , 20000 ) ;
1920
2021 assertContentValid (
2122 ( ) => ! ! document . querySelector ( "*[aria-label='Messages']" ) ,
@@ -68,8 +69,27 @@ export class TikTokVideoBehavior extends TikTokSharedBehavior {
6869 scrollIntoView,
6970 getState,
7071 assertContentValid,
72+ sleep,
7173 } = ctx . Lib ;
7274
75+ const showComments = document . querySelector ( Q . commentButton ) ;
76+ if ( showComments ) {
77+ ( showComments as HTMLButtonElement ) . click ( ) ;
78+ await sleep ( 10000 ) ;
79+ }
80+
81+ // assert no captcha every 0.5 seconds
82+ void ( async ( ) => {
83+ // eslint-disable-next-line no-constant-condition
84+ while ( true ) {
85+ if ( document . querySelector ( "div[class*=captcha]" ) ) {
86+ assertContentValid ( false , "not_logged_in" ) ;
87+ break ;
88+ }
89+ await sleep ( 500 ) ;
90+ }
91+ } ) ( ) ;
92+
7393 const commentList = xpathNode ( Q . commentList ) ;
7494 const commentItems = iterChildMatches ( Q . commentItem , commentList ) ;
7595 for await ( const item of commentItems ) {
@@ -79,12 +99,6 @@ export class TikTokVideoBehavior extends TikTokSharedBehavior {
7999 yield * this . expandThread ( ctx , item ) ;
80100 }
81101
82- // assert no captcha
83- assertContentValid (
84- ( ) => ! document . querySelector ( "div[class*=captcha]" ) ,
85- "captcha_found" ,
86- ) ;
87-
88102 yield getState ( ctx , "TikTok Video Behavior Complete" ) ;
89103 }
90104}
0 commit comments