PlayWright 爬虫实战篇之Discord



  • 之前群里有朋友说想用爬虫监控Discord的信息,我研究了一下午尚未实现;目前只能监控自己发出去的信息…不论如何,因为这次也是用到了一个新的工具,写一下使用感受吧。

    一说到Python自动浏览器测试,很多朋友都会用Selenium,但是Selenium有个功能无法实现:它无法监听网页发出的网络请求。PlayWirght可以实现这一功能;

    首先是安装

    pip install playwright
    playwright install 
    

    然后就可以开始使用啦

    from playwright.sync_api import sync_playwright
    
    with sync_playwright() as p:
        #headless = False用有头模式打开浏览器;可以让我们看到浏览器的页面
        browser = p.chromium.launch(slow_mo=50, headless = False)
        context = browser.new_context(user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')
        # 打开新的页面
        page = context.new_page()
        # timeout是没有相应时自动关闭程序的时间;这里设置一个较大值
        page.set_default_timeout(9000000)
       # 打开discord页面
        page.goto('https://discord.com/channels/@me')
       #输入账号密码
        page.type('input[name="email"]', "mengke.lyu@cass.city.ac.uk")
        page.type('input[name="password"]', "keke的密码")
        page.click('button[type="submit"]')
    
       #进入频道  page.goto("https://discord.com/channels/980001336294776842/980001336294776844")
    
        while (True):
    #如果网络请求中有messages这个字段
            with page.expect_request("**messages**") as req:
    #那么开始尝试下列内容
                try:
                    if req.value is not None:
                        print(req.value)
                        if req.value.post_data_json is not None:
                            print(req.value.post_data_json)
                            print(req.value.post_data_json['content'])
                            if req.value.post_data_json['content'] is not None:
                                print(req.value.post_data_json['content'])
    #如果消息中有"mengke"这个字段,发出响声
                                if "mengke" in req.value.post_data_json['content']:
                                    playsound('./assets/mp3/any_other_way.mp3')
                except:
                     pass


  • 然后成功实现了自己发出有"mengke"字样的消息时会发出响声。目前先研究到这里;大家有什么思路也可以提出来;


登录后回复