这篇文章主要介绍了如何使用selenium和requests组合实现登录页面,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
一、在这里selenium的作用
(1)模拟的登录。
(2)获取登录成功之后的cookies
代码
def start_login(self): chrome_options = Options() # 禁止图片加载,禁止推送通知 prefs = { "profile.default_content_setting_values": { "images": 2 }, "profile.default_content_setting_values.notifications": 2 } chrome_options.add_experimental_option("prefs", prefs) if chrome_args().get("headless_flag") == "1": chrome_options.add_argument(chrome_args().get("headless")) chrome_options.add_argument(chrome_args().get("nogpu")) chrome_options.add_argument(chrome_args().get("noinfobars")) chrome_options.add_argument(chrome_args().get("max_windows")) chrome_options.add_argument(self.Proxy_server) driver = webdriver.Chrome(chrome_options=chrome_options) try: get_logger().info("start login.....") try: # login info self.login_name = self.loginInfo.get("login_id") self.password = aes_cbc_decrypt(self.loginInfo.get("login_pwd")) except Exception: get_logger().error("cant get login info,here are detals".format(traceback.format_exc())) wait = WebDriverWait(driver, 30) print(u"start login in") driver.get(self.login_url) try: login_id = wait.until( eccd.presence_of_element_located( (By.XPATH, self.Id_xpath)) ) login_id.send_keys(self.login_name) login_id.send_keys(Keys.ENTER) password = wait.until( eccd.presence_of_element_located( (By.XPATH, self.pwd_xpath)) ) password.send_keys(self.password) submit = wait.until( eccd.presence_of_element_located( (By.XPATH, self.login_btn_xpath)) ) submit.click() # login signal #判断是否显示 右上角是否显示用户名 login_ok = wait.until( eccd.presence_of_element_located( (By.XPATH, self.login_ok_xpath)) ) try: #判断登录成功 if login_ok: get_logger().info("get user name successful:"+u"{}".format(login_ok.text)) try: get_weibo_info=driver.find_element_by_xpath(self.forward_home_page) except: driver.get(self.first_page) forward_home_page_ok = wait.until( eccd.presence_of_element_located( (By.XPATH, self.forward_home_page)) ) forward_home_page_ok.click() time.sleep(5) self.first_page=driver.current_url get_logger().info("get homepage successful,url is {}".format(driver.current_url)) cookies = driver.get_cookies() # 导出cookie get_logger().info("get cookies") get_fansnum_ok= wait.until( eccd.presence_of_element_located( (By.XPATH, self.follow_xpath)) ) self.get_followfanshome(driver) get_logger().info("get_followfanshome ok") self.home_page_source=driver.page_source driver.close() # 关闭chrome #获取主页的 # 如果需要保存cookies self.write_cookie(cookies) get_logger().info("get cookies,login ok") return cookies else: raise RuntimeError('login failed') except: get_logger().error("login failed") return None except: if driver is not None: driver.close() except Exception as e: if driver is not None: driver.close() get_logger().error("dbs operation error,here are details:{}".format(traceback.format_exc()))
通过使用cookies = driver.get_cookies() #我们获取了cookie那么我们怎用呢。
二、requests如何使用获取到的cookies
1.创建一个Session对象
req = requests.Session() # 构建Session
2.转换上面的cookies对象
for cookie in cookies: req.cookies.set(cookie['name'], cookie['value']) # 转换cookies
3.开始访问该网站的需求页面
data = req.get(url, headers=self.headers).text #获取文本网页 jsondata = req.get(url, headers=self.headers).json() #获取json型网页
好了就是这么简单,另外补充一个经常使用的库fake-useragent,可以获取随机的useragent,但是其中谷歌的useragent版本比较低,尤其在访问知乎的时候,会提示浏览器版本低的信息,这一点需要注意。
另外拥有一个headers是对爬虫起码的尊重,所以有个构建好的headers是非常必要的。我就经常用下面的例:
from fake_useragent import UserAgent as UA import random headers = { 'Accept': 'text/html, application/xhtml+xml, image/jxr, */*', 'Accept - Encoding': 'gzip, deflate', 'Accept-Language': 'zh-Hans-CN, zh-Hans; q=0.5', 'Connection': 'Keep-Alive', 'User-Agent': UA().random #获取随机的useragent }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 群星《前途海量 电影原声专辑》[FLAC/分轨][227.78MB]
- 张信哲.1992-知道新曲与精丫巨石】【WAV+CUE】
- 王翠玲.1995-ANGEL【新艺宝】【WAV+CUE】
- 景冈山.1996-我的眼里只有你【大地唱片】【WAV+CUE】
- 群星《八戒 电影原声带》[320K/MP3][188.97MB]
- 群星《我的阿勒泰 影视原声带》[320K/MP3][139.47MB]
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[320K/MP3][148.91MB]
- 刘雅丽.2001-丽花皇后·EMI精选王【EMI百代】【FLAC分轨】
- 齐秦.1994-黄金十年1981-1990CHINA.TOUR.LIVE精丫上华】【WAV+CUE】
- 群星.2008-本色·百代音乐人创作专辑【EMI百代】【WAV+CUE】
- 群星.2001-同步过冬AVCD【环球】【WAV+CUE】
- 群星.2020-同步过冬2020冀待晴空【环球】【WAV+CUE】
- 沈雁.1986-四季(2012梦田复刻版)【白云唱片】【WAV+CUE】
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[FLAC/分轨][257.88MB]
- 《国语老歌 怀旧篇 3CD》[WAV/分轨][1.6GB]