本帖最后由 only 于 2020-3-29 23:38 编辑
3月29日:利用selenium实现自动模拟化登录QQ 如果我们要爬取QQ空间之类的页面信息的话,大多都要进行登录,研究QQ登录规则的话,得分析大量Javascript的加密解密,这个工程量是特别大的,但是有个工具帮我们很好的解决了这个问题——selenium,那么selenium到底是什么呢? 0×01selenium简介 Selenium是一个用于Web应用的功能自动化测试工具,Selenium 直接运行在浏览器中,就像真正的用户在操作一样。 由于这个性质,Selenium也是一个强大的网络数据采集工具,其可以让浏览器自动加载页面,获取需要的数据,甚至页面截图,或者是判断网站上某些动作是否发生。 Selenium自己不带浏览器,需要配合第三方浏览器来使用。支持的浏览器有Chrome、Firefox、IE、Phantomjs等。如果使用Chrome、FireFox或IE,我们可以看得到一个浏览器的窗口被打开、打开网站、然后执行代码中的操作。 0×02 selenium的安装 我们的python环境很早就已经配置好了,只需要在命令行输入 pip install selenium 如下图所示便是安装完成 其中我们有一个一定不能忘记,下载浏览器驱动 我用的是chrome浏览器 为了验证是否安装成功,我们先模拟打开百度测试: - from selenium import webdriver
- from time import sleep
- # 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
- driver = webdriver.Chrome(r'driver/chromedriver')
- # 用get打开百度页面
- driver.get("http://www.baidu.com")
- # 输入内容
- driver.find_element_by_id('kw').send_keys('ecjtu')
- # 点击 百度一下
- driver.find_element_by_id('su').click()
- # 暂停10秒
- sleep(10)
- # 关闭浏览器
- driver.quit()
复制代码
执行以上代码后,我们可以看见一个模拟浏览器小窗口,自动打开百度开始搜索“ecjtu” 同时也说明selenium安装成功 0×03 selenium实现QQ空间的登录 首先,我们要做的是检查QQ空间页面中的元素:例如账号框、密码框和登录按钮的id,才能确定代码要实现的功能,我们通过http://i.qq.com打开QQ空间网页 我们通过f12键打开控制台,来找到我们需要的id 用相同的方法我们可以找到其他id,接下来要做的就是代码实现 - import time
- # 导入selenium中的webdriver库
- from selenium import webdriver
- # 实例化出一个浏览器
- driver = webdriver.Chrome(r'driver/chromedriver')
- # 设置浏览器窗口的位置
- driver.set_window_position(20, 40)
- # 设置浏览器窗口的大小
- driver.set_window_size(1100, 700)
- # 访问QQ空间网页
- driver.get("http://i.qq.com")
- # 切换框架
- driver.switch_to.frame("login_frame")
- # 根据查看的id进行鼠标点击操作
- driver.find_element_by_id("switcher_plogin").click()
- # 睡眠1秒
- time.sleep(1)
- # 选择账号输入框并将其内容清空
- driver.find_element_by_id('u').clear()
- # 选择账号输入框并将QQ号模拟键盘输入到账号输入框
- driver.find_element_by_id('u').send_keys('369619498')
- time.sleep(2)
- driver.find_element_by_id('p').clear()
- # 密码
- driver.find_element_by_id('p').send_keys('密码')
- time.sleep(1)
- # 选择登录按钮出发鼠标点击事件
- driver.find_element_by_id('login_button').click()
- time.sleep(15)
- # 退出
- driver.quit()
复制代码执行以上代码后,我们便可以看见有一个小窗口已经模拟化登录成功进入对应QQ空间了,而如果我们要爬取一些QQ好友的说说也可以从这而展开
|