本站消息

站长简介/公众号


站长简介:高级软件工程师,曾在阿里云,每日优鲜从事全栈开发工作,利用周末时间开发出本站,欢迎关注我的微信公众号:程序员总部,程序员的家,探索程序员的人生之路!分享IT最新技术,关注行业最新动向,让你永不落伍。了解同行们的工资,生活工作中的酸甜苦辣,谋求程序员的最终出路!

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2021-03(4)

2021-04(4)

如何使用selenium登录获取cookie

发布于2021-03-22 17:30     阅读(247)     评论(0)     点赞(0)     收藏(0)



在我们日常爬虫过程中经常会涉及使用cookie,那么我们今天来聊聊关于cookie的一些使用。我们都知道Cookie是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。比如说有些网站需要登录后才能访问某个页面,在登录之前你想抓取某个页面内容是不允许的。这时我们就可以可以利用Urllib库保存登录的Cookie,然后再抓取其他页面,这样就达到了你的目的。那么我们该如何使用使用selenium登录获取cookie呢?

接下来我们简单的分享下使用selenium登录获取cookie

 import os  import time  import zipfile   from selenium import webdriver  from selenium.common.exceptions import TimeoutException  from selenium.webdriver.common.by import By  from selenium.webdriver.support import expected_conditions as EC  from selenium.webdriver.support.ui import WebDriverWait    class GenCookies(object):  # 随机useragent  USER_AGENT = open('useragents.txt').readlines()    # 代理服务器(产品官网 www.16yun.cn)  PROXY_HOST = 't.16yun.cn'  #  proxy or host  PROXY_PORT = 31111  # port  PROXY_USER = 'USERNAME'  # username  PROXY_PASS = 'PASSWORD'  # password   @classmethod  def get_chromedriver(cls, use_proxy=False, user_agent=None):  manifest_json = """  {  "version": "1.0.0",  "manifest_version": 2,  "name": "Chrome Proxy",  "permissions": [  "proxy",  "tabs",  "unlimitedStorage",  "storage",  "<all_urls>",  "webRequest",  "webRequestBlocking"  ],  "background": {  "scripts": ["background.js"]  },  "minimum_chrome_version":"22.0.0"  }  """   background_js = """  var config = {  mode: "fixed_servers",  rules: {  singleProxy: {  scheme: "http",  host: "%s",  port: parseInt(%s)  },  bypassList: ["localhost"]  }  };   chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});   function callbackFn(details) {  return {  authCredentials: {  username: "%s",  password: "%s"  }  };  }   chrome.webRequest.onAuthRequired.addListener(  callbackFn,  {urls: ["<all_urls>"]},  ['blocking']  );  """ % (cls.PROXY_HOST, cls.PROXY_PORT, cls.PROXY_USER, cls.PROXY_PASS)  path = os.path.dirname(os.path.abspath(__file__))  chrome_options = webdriver.ChromeOptions()   # 关闭webdriver的一些标志  # chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])    if use_proxy:  pluginfile = 'proxy_auth_plugin.zip'   with zipfile.ZipFile(pluginfile, 'w') as zp:  zp.writestr("manifest.json", manifest_json)  zp.writestr("background.js", background_js)  chrome_options.add_extension(pluginfile)  if user_agent:  chrome_options.add_argument('--user-agent=%s' % user_agent)  driver = webdriver.Chrome(  os.path.join(path, 'chromedriver'),  chrome_options=chrome_options)   # 修改webdriver get属性  # script = '''  # Object.defineProperty(navigator, 'webdriver', {  # get: () => undefined  # })  # '''  # driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": script})   return driver   def __init__(self, username, password):  # 登录example网站  self.url = 'https://passport.example.cn/signin/login?entry=example&r=https://m.example.cn/'  self.browser = self.get_chromedriver(use_proxy=True, user_agent=self.USER_AGENT)  self.wait = WebDriverWait(self.browser, 20)  self.username = username  self.password = password   def open(self):  """  打开网页输入用户名密码并点击  :return: None  """  self.browser.delete_all_cookies()  self.browser.get(self.url)  username = self.wait.until(EC.presence_of_element_located((By.ID, 'loginName')))  password = self.wait.until(EC.presence_of_element_located((By.ID, 'loginPassword')))  submit = self.wait.until(EC.element_to_be_clickable((By.ID, 'loginAction')))  username.send_keys(self.username)  password.send_keys(self.password)  time.sleep(1)  submit.click()   def password_error(self):  """  判断是否密码错误  :return:  """  try:  return WebDriverWait(self.browser, 5).until(  EC.text_to_be_present_in_element((By.ID, 'errorMsg'), '用户名或密码错误'))  except TimeoutException:  return False   def get_cookies(self):  """  获取Cookies  :return:  """  return self.browser.get_cookies()   def main(self):  """  入口  :return:  """  self.open()  if self.password_error():  return {  'status': 2,  'content': '用户名或密码错误'  }   cookies = self.get_cookies()  return {  'status': 1,  'content': cookies  }    if __name__ == '__main__':  result = GenCookies(  username='180000000',  password='16yun',  ).main()  print(result)






所属网站分类: 技术文章 > 博客

作者:yiniuyun

链接:https://www.pythonheidong.com/blog/article/900421/4cce31d73fcd7c75e855/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

0 0
收藏该文
已收藏

评论内容:(最多支持255个字符)