代码之家  ›  专栏  ›  技术社区  ›  Mykola Zotko

如何随机获取具有最新浏览器版本的用户代理?[副本]

  •  0
  • Mykola Zotko  · 技术社区  · 7 年前

    fake_useragent

    from fake_useragent import UserAgent
    
    ua = UserAgent()
    user_agent = ua.random
    

    有时生成的用户代理具有过时的浏览器版本,一些网站不接受这些版本。是否有任何方法仅使用最新的浏览器版本生成用户代理?

    1 回复  |  直到 7 年前
        1
  •  4
  •   KbiR    7 年前

    您可以执行以下操作:

    from fake_useragent import UserAgent
    import random
    import re
    
    def grp(pat, txt):
        r = re.search(pat, txt)
        return r.group(0) if r else '&'
    
    ua = UserAgent()
    browsers = {
        'chrome': r'Chrome/[^ ]+',
        'safari': r'AppleWebKit/[^ ]+',
        'opera': r'Opera\s.+$',
        'firefox': r'Firefox/.+$',
        'internetexplorer': r'Trident/[^;]+',
    }
    
    for k, v in browsers.items():
        print(sorted(ua.data_browsers[k], key=lambda a: grp(v, a))[-1])
    

    脚本的输出为:

    Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36
    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A
    Opera/9.80 (Windows NT 6.1; Opera Tablet/15165; U; en) Presto/2.8.149 Version/11.1
    Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1
    Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0;  rv:11.0) like Gecko
    

    grp 这项功能被明目张胆地偷走了 this answer

    project's readme

    browser = random.choice(ua.data_randomize)
    print(sorted(ua.data_browsers[browser], key=lambda a: grp(browsers[browser], a))[-1])