playwright——实现bilibili登录

import asyncio
import functools
import sys
from typing import Optional

from playwright.async_api import BrowserContext, Page
from tenacity import (RetryError, retry, retry_if_result, stop_after_attempt,
                      wait_fixed)

asyncio用于异步编程,functools用于高阶函数操作,sys用于与Python解释器交互,typing用于类型提示,以及playwright.async_api和tenacity中的一些类和函数。

根据代码中的内容,它可能涉及到异步操作、函数重试、以及与浏览器的交互。这些模块和函数可能会在实现一个具有重试机制的异步操作过程中发挥作用。

class BilibiliLogin(AbstractLogin):
    def __init__(self,
                 login_type: str,
                 browser_context: BrowserContext,
                 context_page: Page,
                 login_phone: Optional[str] = "",
                 cookie_str: str = ""
                 ):
        self.login_type = login_type
        self.browser_context = browser_context
        self.context_page = context_page
        self.login_phone = login_phone
        self.cookie_str = cookie_str

这段代码定义了一个名为BilibiliLogin的类,它似乎是继承自之前提到的AbstractLogin抽象基类。在这个类的构造函数中,它接受了几个参数,包括login_type、browser_context、context_page、login_phone和cookie_str,并将它们保存为实例变量。根据参数名和类型,它可能是用于实现Bilibili网站的登录功能,其中login_type表示登录类型,browser_context和context_page可能是与浏览器操作相关的对象,login_phone是登录手机号,cookie_str是用于登录的cookie字符串。

    async def begin(self):
        """Start login xiaohongshu"""
        utils.logger.info("Begin login Bilibili ...")
        if self.login_type == "qrcode":
            await self.login_by_qrcode()
        elif self.login_type == "phone":
            await self.login_by_mobile()
        elif self.login_type == "cookie":
            await self.login_by_cookies()
        else:
            raise ValueError("Invalid Login Type Currently only supported qrcode or phone or cookie ...")

这段代码定义了一个名为begin的异步方法,它似乎是用于开始进行Bilibili网站的登录操作。在方法中,首先记录了一条日志,然后根据登录类型的不同,调用了相应的登录方法:如果登录类型是"qrcode",则调用login_by_qrcode方法;如果登录类型是"phone",则调用login_by_mobile方法;如果登录类型是"cookie",则调用login_by_cookies方法。如果登录类型不是这三种之一,则会抛出一个值错误。这种设计方式可以根据不同的登录类型执行不同的登录流程。

    @retry(stop=stop_after_attempt(20), wait=wait_fixed(1), retry=retry_if_result(lambda value: value is False))
    async def check_login_state(self) -> bool:
        """
            Check if the current login status is successful and return True otherwise return False
            retry decorator will retry 20 times if the return value is False, and the retry interval is 1 second
            if max retry times reached, raise RetryError
        """
 
  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C#中使用Cookie实现推特自动登录可以借助Playwright库来实现Playwright是一个跨浏览器自动化测试工具,它支持多种编程语言,包括C#。 首先,你需要安装Playwright库。可以通过NuGet包管理器或者在Visual Studio中使用NuGet控制台来安装Playwright库。 安装完成后,你可以使用以下代码示例来实现推特自动登录: ```csharp using Microsoft.Playwright; class Program { static async Task Main(string[] args) { using var playwright = await Playwright.CreateAsync(); await using var browser = await playwright.Chromium.LaunchAsync(); var context = await browser.NewContextAsync(); // 创建一个新的页面 var page = await context.NewPageAsync(); // 导航到推特登录页面 await page.GotoAsync("https://twitter.com/login"); // 等待登录表单加载完成 await page.WaitForSelectorAsync("form[action='/sessions']"); // 填写登录表单 await page.FillAsync("input[name='session[username_or_email]']", "your_username"); await page.FillAsync("input[name='session[password]']", "your_password"); // 提交登录表单 await page.ClickAsync("div[data-testid='LoginForm_Login_Button']"); // 等待登录成功 await page.WaitForNavigationAsync(); // 获取登录后的Cookie var cookies = await context.CookiesAsync(); // 打印Cookie信息 foreach (var cookie in cookies) { Console.WriteLine($"Name: {cookie.Name}, Value: {cookie.Value}"); } } } ``` 上述代码使用Playwright库来模拟浏览器行为,实现了自动登录推特并获取登录后的Cookie信息。你需要将`your_username`和`your_password`替换为你的推特账号的用户名和密码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值