这里模拟登陆会用到selenium这个自动化测试的工具,先介绍一下这个工具。
![247159fc89afb1a9a0f601a89fe702e9.png](https://i-blog.csdnimg.cn/blog_migrate/f6ac9b852704097b993e79a26bfcbf92.jpeg)
selenium
selenium是一个web的自动化测试工具,最初是为网站自动化测试而开发的,selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏。
selenium的简单实用
首先selenium需要进行安装,安装比较简单。直接通过pip install selenium就可以了。
selenium安装完成之后还需要下载对应的驱动,这里需要一定要下载与浏览器对应的驱动,比如我的谷歌浏览器的版本是73.0.3683.103,那么就要下载对应版本的selenium的驱动,这里给大家两个网站。
selenium下载地址
http://chromedriver.storage.googleapis.com/index.html
Selenium对浏览器支持的版本
http://www.cnblogs.com/iceb/p/7195876.html
接下来以百度为例讲解selenium的简单使用
from selenium import webdriverimport timewd = webdriver.Chrome() # 设置窗口大小# wd.set_window_size(1280,800)# 全屏wd.maximize_window()# 输入网址wd.get('http://www.baidu.com')# 截图wd.save_screenshot("baidu.png")# 找到输入框kw = wd.find_element_by_id('kw')# 在输入框中输入酒店kw.send_keys("酒店")# 点击百度一下wd.find_element_by_id('su').click()time.sleep(3)wd.quit()
上面的案例中,如果没有把selenium添加到系统环境变量中程序会报错。这里可以指定路径来使用executable_path='./driver/chromedriver.exe'
模拟登陆微博PC端
driver = webdriver.Chrome()# 隐式等待driver.implicitly_wait(10)driver.set_window_size(1200,1000)driver.get('https://weibo.com/')# 填写账号driver.find_element_by_id('loginname').send_keys('账号')# 通过xpath找到密码的输入框driver.find_element_by_xpath("//div[@class='info_list password']/div/input").send_keys(pwd)# 通过xpath找到登陆按钮进行点击driver.find_element_by_xpath("//div[@class='info_list login_btn']/a").click()
这里账号密码可以写在配置文件中
加载配置文件
from configparser import ConfigParsertarget = ConfigParser()target.read('test.ini',encoding='utf-8')pwd = target.get('weibo','password')test.ini文件[weibo]password = '密码'
模拟登陆微博移动端
这里用PC端模拟移动端,可以用谷歌浏览器来模拟,F12打开控制台管理工具
![1ae62d5c362b57bc539e88481fe590ab.png](https://i-blog.csdnimg.cn/blog_migrate/b8aeabf90985fb51c898e3289a3869d8.jpeg)
移动端界面
接下来大家可以发现,移动端要比PC端简单的多,因为所有的标签都有ID。代码如下:
driver.get('https://passport.weibo.cn/signin/login')driver.find_element_by_id('loginName').send_keys('账号')driver.find_element_by_id('loginPassword').send_keys(pwd)driver.find_element_by_id('loginAction').click()driver.find_element_by_id("getCode").click()