def avatar(self) -> str: img = self.selector.css(".avatar > img") if not img: logger.warning("Avatar src not found") return "" return img.attrib["src"]
async def unlike(self, username: str, video_id: str): page: Page = await self.client.new_page( blocked_resources=["image", "media", "font"]) logger.debug(f"ЁЯСе Unlike video id {video_id} of @{username}") like_info_queue: asyncio.Queue = asyncio.Queue(maxsize=1) video_info_queue: asyncio.Queue = asyncio.Queue(maxsize=1) page.on( "response", lambda res: asyncio.create_task( catch_response_info(res, video_info_queue, "/item/detail"), ), ) page.on( "response", lambda res: asyncio.create_task( catch_response_info(res, like_info_queue, "/commit/item/digg"), ), ) logger.info( f"ЁЯзн Going to @{username}'s video {video_id} page for unlike") await self.client.goto( f"/@{username}/video/{video_id}", page=page, options={"waitUntil": "networkidle0"}, ) video_info = await video_info_queue.get() if not video_info["itemInfo"]["itemStruct"]["digged"]: logger.info(f"ЁЯШП @{username}'s video {video_id} already unliked") return like_part = await page.J(".like-part") if like_part: await page.click(".like-part") else: await page.click( ".video-feed-container .lazyload-wrapper:first-child .bar-item-wrapper:first-child", ) like_info = await like_info_queue.get() if like_info["status_code"] == 0: logger.info(f"ЁЯСО @{username}'s video {video_id} unliked") else: logger.warning( f"тЪая╕П @{username}'s video {video_id} probably not unliked") await page.close()
async def unfollow(self, username: str): page: Page = await self.client.new_page( blocked_resources=["image", "media", "font"]) logger.debug(f"👥 Unfollow {username}") unfollow_info_queue: asyncio.Queue = asyncio.Queue(maxsize=1) page.on( "response", lambda res: asyncio.create_task( catch_response_info(res, unfollow_info_queue, "/commit/follow/user"), ), ) logger.info(f"🧭 Going to {username}'s page for unfollowing") await self.client.goto( f"/@{username.lstrip('@')}", page=page, options={"waitUntil": "networkidle0"}, ) try: follow_title: str = await page.Jeval( ".follow-button", pageFunction="element => element.textContent", ) except ElementHandleError: print("ElementHandleError") return if follow_title.lower() != "following" and follow_title.lower( ) != "friends": logger.info(f"😏 {username} already unfollowed") return await page.click(".follow-button") unfollow_info = await unfollow_info_queue.get() if unfollow_info["status_code"] == 0: logger.info(f"➖ {username} unfollowed") else: logger.warning(f"⚠️ {username} probably not unfollowed") await page.close()
async def follow(self, username: str): page: Page = await self.client.new_page( blocked_resources=["image", "media", "font"]) logger.debug(f"ЁЯСе Follow {username}") follow_info_queue: asyncio.Queue = asyncio.Queue(maxsize=1) page.on( "response", lambda res: asyncio.create_task( catch_response_info(res, follow_info_queue, "/commit/follow/user"), ), ) logger.info(f"ЁЯзн Going to {username}'s page for following") await self.client.goto( f"/@{username.lstrip('@')}", page=page, options={"waitUntil": "networkidle0"}, ) follow_title: str = await page.Jeval( ".follow-button", pageFunction="element => element.textContent", ) if follow_title.lower() != "follow": logger.info(f"ЁЯШП {username} already followed") return await page.click(".follow-button") follow_info = await follow_info_queue.get() if follow_info["status_code"] == 0: logger.info(f"тЮХ {username} followed") else: logger.warning(f"тЪая╕П {username} probably not followed") await page.close()
async def unlike(self, username: str, video_id: str): page: Page = await self.client.new_page( blocked_resources=["image", "media", "font"]) logger.debug(f"👥 Unlike video id {video_id} of @{username}") like_info_queue: asyncio.Queue = asyncio.Queue(maxsize=1) page.on( "response", lambda res: asyncio.create_task( catch_response_info(res, like_info_queue, "/commit/item/digg"), ), ) logger.info( f"🧭 Going to @{username}'s video {video_id} page for unlike") await self.client.goto( f"/@{username}/video/{video_id}", page=page, options={"waitUntil": "networkidle0"}, ) like_selector = ".lazyload-wrapper:first-child .item-action-bar.vertical > .bar-item-wrapper:first-child" # noqa: E501 is_unliked = await page.J(f'{like_selector} svg[fill="currentColor"]') if is_unliked: logger.info(f"😏 @{username}'s video {video_id} already unliked") return await page.click(like_selector) like_info = await like_info_queue.get() if like_info["status_code"] == 0: logger.info(f"👎 @{username}'s video {video_id} unliked") else: logger.warning( f"⚠️ @{username}'s video {video_id} probably not unliked") await page.close()
async def unlike(self, username: str, video_id: str): page: Page = await self.client.new_page( blocked_resources=["image", "media", "font"]) logger.debug(f"ЁЯСе Unlike video id {video_id} of @{username}") like_info_queue: asyncio.Queue = asyncio.Queue(maxsize=1) page.on( "response", lambda res: asyncio.create_task( catch_response_info(res, like_info_queue, "/commit/item/digg"), ), ) logger.info( f"ЁЯзн Going to @{username}'s video {video_id} page for unlike") await self.client.goto( f"/@{username}/video/{video_id}", page=page, options={"waitUntil": "networkidle0"}, ) like_element = await page.J("span.like") if "liked" not in like_element._remoteObject["description"]: logger.info(f"ЁЯШП @{username}'s video {video_id} already unliked") return await page.click(".like-part") like_info = await like_info_queue.get() if like_info["status_code"] == 0: logger.info(f"ЁЯСН @{username}'s video {video_id} unliked") else: logger.warning( f"тЪая╕П @{username}'s video {video_id} probably not unliked") await page.close()