Webdriver & PhantomJS使用cookie免重复登录

Webdriver & PhantomJS使用cookie免重复登录

  最近在接手一个网络爬虫的任务,任务要求登录到某管理系统后台,并抓取数据。该后天相比传统系统不同之处在于其后台全部是由js实现响应,因此传统的爬虫技术束手就擒了,本文先介绍基于webdriver的模拟浏览器操作,以及借助phantomjs完成js触发。

直接上代码:

#第一次登录时,需要进行账号密码登录
def login():
    driver = webdriver.PhantomJS()
    driver.get("此处为登录页面")
    # 输入账号密码
    driver.find_element_by_name("username").send_keys("C2WOGBEI")
    driver.find_element_by_name("password").send_keys("mMkrBkz8Ke1a")
    # 模拟点击登录
    driver.find_element_by_xpath("//button[@id='button_login']").click()
    # 等待3秒
    time.sleep(3)
    # 生成登录后快照
    # driver.save_screenshot("./wjn.png")
    html = driver.page_source #获得登录后跳转的页面html
    print('登录成功')
    # 保存当前登录的cookie
    dictCookies = driver.get_cookies()
    jsonCookies = json.dumps(dictCookies)
    # 登录完成后,将cookie保存到本地文件
    with open('./cookies.json', 'w') as f:
        f.write(jsonCookies)
    return driver
#第二次则直接将保存的cookie添加到driver里实现免密登录
def loginbycookie():
    with open('./cookies.json', 'r', encoding='utf-8') as f:
        listCookies = json.loads(f.read())
    driver = webdriver.PhantomJS()
    for cookie in listCookies:
        driver.add_cookie({
            'domain':'.xxx.com',  # 此处为cookie.json文件中的domain
            'name': cookie['name'],
            'value': cookie['value'],
            'path': '/',
            'expires': None
        })
    # 再次访问页面,便可实现免登陆访问
    driver.get('该网站的任意一个页面')
    print('cookie登录成功')

你可能感兴趣的:(python,网络爬虫)