通过模拟浏览器获取cookies

51Job自动化登录配置
本文介绍了一种针对51Job网站的自动化登录配置方法,使用ChromeDriver打开Chrome浏览器,并手动输入用户密码及验证码完成登录过程。登录后,程序通过访问特定页面保持登录状态,并保存登录后的Cookies。
    def set_login_params_Job51(self):
        """
        51Job登录配置
        2017-06-06 17:36
        由于51Job的验证码是中文,所以这里仅仅采用chromeDriver打开Chrome浏览器,
        自行在页面输入用户密码进行验证(60s内输入用户密码和验证码),然后程序通过定期访问页面来保持页面登录状态
        :return:
        """

        # 用户名、密码,中文字符前要加u字符,不然send_keys函数会出错
        self.vipname = u"*************"
        self.username = "*************"
        self.password = "************"

        # 登录链接
        self.login_url = 'http://ehire.51job.com/MainLogin.aspx'

        # 登录后打开的新地址
        self.open_url = 'http://ehire.51job.com/Jobs/JobSearchPost.aspx?IsHis=N'

        # 验证码地址
        self.vcode_url = None


        # 登录框信息路径
        # 选着账户密码登录
        self.clickAccountLoginXpath=None

        self.input_name_xpath=None
        self.input_pwd_xpath = None
        self.input_check_xpath = None
        self.input_vcode_xpath =None
        self.input_btn_xpath=None
    def ChromeWebDriver(self):
        """默认打开百度页面"""
        executable_path='../spider/driver/chromedriver.exe'
        self.driver=webdriver.Chrome(executable_path=executable_path)
        self.driver.get('https://www.baidu.com/')
        self.driver.set_window_size(1366,768)
        return self.driver
    def saveCookie(self):
        self.cookies = self.driver.get_cookies()
        if self.cookies:
            with open(self.cookiesFile, 'w') as f:
                pickle.dump(self.cookies, f)
            result = True
            print '已将cookies对象写入文件 {0}...'.format(self.cookiesFile)
        else:
            print '登录失败'
            result=False
        return result
    def UIloginJob51(self):
        """51Job Chrome界面登录"""
        print '=' * 50
        print '{0} 51Job Chrome界面登录...'.format(self.getCurrtime())

        # 设置51Job登录参数
        self.set_login_params_Job51()
        # 打开chrome浏览器窗口
        self.ChromeWebDriver()
        tryTime = 0
        login = 'not ok'
        while login != 'ok':
            tryTime += 1
            # 输入51Job登录地址
            self.driver.get(self.login_url)
            vip_name = self.driver.find_element_by_xpath("""//input[@name="txtMemberNameCN"]""")
            user_name = self.driver.find_element_by_xpath("""//input[@name="txtUserNameCN"]""")
            pwd = self.driver.find_element_by_xpath("""//input[@name="txtPasswordCN"]""")
            vip_name.send_keys(self.vipname)
            time.sleep(1)
            user_name.send_keys(self.username)
            time.sleep(1)
            pwd.send_keys(self.password)
            time.sleep(1)
            # 在界面上输入用户密码和验证码并点击登录
            # 当你确定正常登录后请输入:ok
            login = raw_input("确定已经登录请输入ok,否则随便输入\n")
            print '你输入了:{0}'.format(login)
            if login == 'ok':
                print '{0} 登录成功,即将保存cookie...'.format(self.getCurrtime())
                self.saveCookie()
            else:
                print '{0} 登录失败,输入用户密码登录,当前尝试登录{1}次...'.format(self.getCurrtime(), tryTime)

        time.sleep(3)
        self.driver.close()
<think> 根据用户的问题,需要回答如何使用Python模拟浏览器获取cookie。结合引用内容,主要有两种方法: 1. 直接复用已有浏览器会话的cookie(如通过browser_cookie3库) 2. 模拟登录过程获取cookie(如使用urllib、requests等库模拟登录) 用户提到了“模拟浏览器”,所以两种方法都可以算作模拟浏览器的行为。但第一种是利用本地浏览器已经登录的cookie,第二种是模拟登录过程生成新的cookie。 引用中提供了几种不同的实现方式: 引用1:提到夸克网盘登录需要模拟完整登录过程或复用已有浏览器会话。 引用2:介绍了browser_cookie3库,可以直接获取Chrome或Firefox中已存储的cookie。 引用3:展示了使用cookielib(Python2)保存和加载cookie。 引用4:展示了使用urllib模拟登录豆瓣并保存cookiePython3示例)。 由于用户没有指定是复用已有登录还是模拟登录,所以需要分别介绍。 考虑到现在主流是Python3,引用3的Python2示例可能不太适用,但原理类似。我们将重点放在Python3的实现。 回答结构: 1. 方法一:复用已有浏览器会话的cookie(使用browser_cookie3) 2. 方法二:模拟登录过程获取cookie(使用requests库或urllib) 注意:用户问题中要求“模拟浏览器获取cookie”,所以两种方法都符合。 同时,根据指令要求,需要在回答中引用段落末尾添加引用标识,并生成相关问题。 我们将按照以下步骤: 1. 介绍两种方法,并给出代码示例。 2. 在相关段落添加引用。 3. 生成相关问题。 注意:引用1提到夸克网盘需要模拟登录,但用户问题是一般性的,所以不局限于夸克网盘。 代码示例将使用Python3,因为引用4也是Python3。 由于引用2提到了browser_cookie3,我们将首先介绍这种方法(简单方便,但需要用户已经在浏览器中登录)。 然后介绍模拟登录(通用,但需要分析登录请求)。 另外,引用4使用了urllib,但更推荐使用requests库,因为更简洁,所以我们会用requests库给出一个示例(同时也会提到urllib的方式)。 但是,由于引用中并没有直接给出requests库的示例,我们可以根据引用4的urllib示例改写为requests库的示例,同时保留urllib的示例供选择。 最终回答包括: 1. 方法一:使用browser_cookie3获取本地浏览器cookie 2. 方法二:使用requests库模拟登录获取cookie(并保存为CookieJar) 3. 方法三(可选):使用urllib模拟登录(引用4的方法) 由于用户问题要求的是“获取cookie”的方法,因此我们重点在如何得到cookie,而不是整个模拟登录的细节。 另外,注意引用3中提到的保存cookie到文件的方法,我们也可以简要提及。 生成的问题可以围绕这两种方法的优缺点、适用场景等。 开始构建回答: </think> 以下是使用Python模拟浏览器获取Cookie的几种实现方法,结合引用资料进行说明: ### 方法一:复用浏览器已有Cookie(推荐) 通过`browser_cookie3`库直接获取本地浏览器存储的Cookie(需Chrome/Firefox已登录目标网站): ```python import browser_cookie3 import requests # 获取ChromeCookie(支持firefox()、edge()等) cookies = browser_cookie3.chrome(domain_name='.example.com') # 替换为目标域名 # 携带Cookie访问受保护页面 response = requests.get('https://example.com/protected', cookies=cookies) print(response.text)[^2] ``` **特点**: - 无需模拟登录流程,自动获取本地浏览器Cookie - 依赖用户已在浏览器中登录目标网站 - 支持主流浏览器Chrome/Firefox/Edge等) ### 方法二:模拟登录获取动态Cookie 使用`requests`库模拟登录过程获取动态生成的Cookie(以豆瓣为例): ```python import requests from http.cookiejar import CookieJar # 1. 创建会话维持Cookie session = requests.Session() session.cookies = CookieJar() # Cookie容器 # 2. 构造登录请求 login_url = 'https://www.douban.com/accounts/login' form_data = { 'source': 'index_nav', 'form_email': 'your_email', # 替换为账号 'form_password': 'your_password' # 替换为密码 } # 3. 发送登录请求捕获Cookie response = session.post(login_url, data=form_data, headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' }) # 4. 验证登录并提取Cookie if response.status_code == 200: print("登录成功!Cookie:") for cookie in session.cookies: print(f"{cookie.name} = {cookie.value}") # 打印Cookie键值对 # 访问需要登录的页面 profile = session.get('https://www.douban.com/people/username/') print(profile.text) else: print("登录失败!")[^4] ``` ### 方法三:使用urllib保存复用Cookie 通过`cookielib`将Cookie保存到本地文件(Python3使用`http.cookiejar`): ```python from http.cookiejar import MozillaCookieJar import urllib.request # 创建Cookie容器 cookie_file = 'cookies.txt' cookiejar = MozillaCookieJar(cookie_file) # 绑定处理器 opener = urllib.request.build_opener( urllib.request.HTTPCookieProcessor(cookiejar) ) # 模拟登录(示例) login_req = urllib.request.Request( 'https://example.com/login', data=b'username=test&password=123456', # 替换为实际表单数据 headers={'User-Agent': 'Mozilla/5.0'} ) opener.open(login_req) # 保存Cookie到文件 cookiejar.save(ignore_discard=True) # 保留过期Cookie print("Cookie已保存至", cookie_file) # 后续请求复用Cookie cookiejar.load(cookie_file, ignore_discard=True) # 加载Cookie resp = opener.open('https://example.com/protected') print(resp.read().decode())[^3] ``` ### 关键要点总结 1. **动态Cookie生成**:现代网站(如夸克网盘)使用动态Cookie(如`QK_UID`, `QK_AUTH`),需完整模拟登录流程生成[^1] 2. **会话保持**:使用`requests.Session()`或`cookielib`维持Cookie状态 3. **反爬策略**:需设置合法请求头(特别是`User-Agent`和`Referer`) 4. **验证码处理**:手机验证码登录需额外接入OCR/打码平台(本文未覆盖)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值