python 模拟浏览器selenium_python爬虫10:使用selenium模拟浏览器登录账号

需求背景:

很多网页通过复杂的JS函数组合,来实现对信息的加密、异步信息处理等,导致很难分析出网页接口。

那么最快速度的实现爬虫功能,是模拟浏览器的行为,加载运行JS,才能破解页面。

模拟浏览器行为,在python中的最佳实践方案是使用selenium包。被模拟的浏览器可以使用chromedriver(有界面浏览器)或者phantomjs(无界面浏览器)。

所有复杂的登录、JS加密、AJAX异步,如果无法分析出网页接口,都可以使用selenium+browserdriver方案,来模拟浏览器上网。

知识点

一、什么是selenium?

selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。

selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。

selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

二、如果配置被模拟的浏览器?

那chromedriver举例

先在百度搜chromedriver,并且下载到本地。(朱毅chromedriver.exe对应的版本要和实际安装的chrome.exe版本一致。)

三、举例一段模拟登陆某个网页,并且获取cookies的过程

下面是一段登陆网盘的模块。如果cookies是空,那么就使用selenium打开网页登陆一次保存cookies。如果不空,那么就直接使用缓存中的cookies。

1 from etc importjboxenv2 from selenium importwebdriver3 from selenium.webdriver.common.by importBy4 from selenium.webdriver.support importexpected_conditions as EC5 from selenium.webdriver.support.wait importWebDriverWait6

7 logger =jboxenv.JBOX_LOGGER8 __jbox_cookies ={}

12 __header ={13 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36'}14

15

16 defget_user_cookies(username, password):17 '''

18 获取JBOX的登录cookies19 模块第一次使用时通过账号密码获取cookie20 登录成功以后再申请cookie,读取模块中的缓存21 :param username: 用户名22 :param password: 密码23 :return: 返回一个dict,保存了cookies字典24 '''

25 #打开首页获取cookies

26 global __jbox_cookies

27 if __jbox_cookies.keys():28 return __jbox_cookies

29 else:30 driver = webdriver.Chrome(r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')31 try:32 driver.get("http://pan.jd.com/")33 name = driver.find_element_by_id('account')34 name.send_keys(username)35 psd = driver.find_element_by_id('password')36 psd.send_keys(password)37 btn = driver.find_element_by_class_name('btnsubmint')38 btn.click()39 #等待新页面出现的某个元素出现

40 wait = WebDriverWait(driver, 10)41 wait.until(EC.presence_of_element_located((By.ID, 'showMine')))42 if len(driver.get_cookies())>0:43 for c indriver.get_cookies():44 __jbox_cookies[c.get('name')] = c.get('value')45 finally:46 driver.close()47 #如果没有登录成功,就提醒需要重新登录

48 if not __jbox_cookies.keys():49 logger.error('通过登录JBOX申请cookies,登录结果:失败')50 print(__jbox_cookies)51 return __jbox_cookies

52

53

54 if __name__ == '__main__':55 print(get_user_cookies('shwujiang', 'Fig@2016092404'))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值