若是咱们想要实现自动登陆,那么咱们就须要可以驱动浏览器(好比谷歌浏览器)来实现操做,ChromeDriver 恰好可以帮助咱们这一点(非谷歌浏览器的驱动有所不一样)。html
首先咱们须要确认咱们所使用的谷歌浏览器版本,这里测试的谷歌浏览器版本为(版本 67.0.3396.87(正式版本) (64 位)),点击设置—关于Chrome,则能够看到python
咱们进入 Chromedriver 的官网下载页面,能够看到最新的 2. 4 版本支持谷歌的 v66-68,下载并保存路径便可git
这里咱们下载 win 版本,解压后存放到路径 “E:\chromedriver.exe”。web
除了使用 Chromedriver做为驱动,咱们想要访问网站,还须要用到 Selenium 模块,Selenium 是一个自动化测试工具,利用它咱们能够驱动浏览器执行特定的动做,如点击、下拉等等操做,同时还能够获取浏览器当前呈现的页面的源代码,作到可见便可爬。对于一些 JavaScript 动态渲染的页面来讲,此种抓取方式很是有效。咱们先来安装此模块chrome
pip install selenium
接着咱们实现的代码以下浏览器
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2018/6/24 20:45 # @Author : zhouyuyao # @File : demon2.py import os import time from selenium import webdriver from selenium.webdriver.common.keys import Keys chromedriver = "E:\chromedriver.exe" os.environ["webdriver.chrome.driver"] = chromedriver # 获取chromedriver可执行文件路径 # print(os.environ["webdriver.chrome.driver"]) driver = webdriver.Chrome(chromedriver) # 声明浏览器对象 driver.get("http://www.python.org") # 访问页面,用 get() 方法来请求一个网页,参数传入连接 URL 便可 time.sleep(10) # 停留10s driver.quit() # 关闭浏览器
运行以后咱们便发现弹出了 Chrome 浏览器,自动访问了 Python 官网,随后浏览器关闭。bash
咱们会须要经过 XPath 查找元素,使用 XPath 的主要缘由之一就是当你想获取一个既没有 id 属性也没有 name 属性的元素时, 你能够经过 XPath 使用元素的绝对位置来获取他(这是不推荐的),或相对于有一个 id 或 name 属性的元素 (理论上的父元素)的来获取你想要的元素。XPath 定位器也能够经过非 id 和 name 属性查找元素。cookie
接着咱们找到京东的登陆界面,查看源代码,会发现若是想要实现帐号登陆京东,就必须找到源码中帐户登陆的惟一键,此处惟一为“clstag”值dom
绝对的 XPath 是全部元素都从根元素的位置(HTML)开始定位,只要应用中有轻微的调整,会就致使你的定位失败。 可是经过就近的包含 id 或者 name 属性的元素出发定位你的元素,这样相对关系就很靠谱, 由于这种位置关系不多改变,因此可使你的测试更增强大。ide
这里咱们经过查找超连接<a>的位置来定位帐户登陆
driver.find_elements_by_xpath('//a[@clstag="pageclick|keycount|login_pc_201804112|10"]')[0].click()
而后咱们在谷歌的调试模式中分别找到登陆的 “帐号“(loginname)、“密码“(nloginpwd) 以及 “登陆” (loginsubmit)的 id 。
最后咱们的实现代码以下
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2018/6/24 21:20 # @Author : zhouyuyao # @File : demon3.py import random import time import os from selenium import webdriver def randomSleep(minS, maxS): # 定义随机停顿时间函数 time.sleep((maxS-minS)*random.random() + minS) url = 'https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F' chromedriver = "E:\chromedriver.exe" os.environ["webdriver.chrome.driver"] = chromedriver driver = webdriver.Chrome(chromedriver) # 声明浏览器对象 driver.get(url) # 访问页面,用 get() 方法来请求一个网页,参数传入连接 URL randomSleep(1, 3) driver.find_elements_by_xpath('//a[@clstag="pageclick|keycount|login_pc_201804112|10"]')[0].click() # find_elements_by_xpath 经过XPath查找元素 randomSleep(1, 2) driver.find_element_by_id('loginname').clear() randomSleep(1, 3) driver.find_element_by_id('loginname').send_keys("username") randomSleep(1, 2) driver.find_element_by_id('nloginpwd').send_keys("userpassword") randomSleep(3, 5) driver.find_element_by_id('loginsubmit').click() randomSleep(5, 10) print(driver.get_cookies()) driver.close() # 关闭浏览器
运行以后程序打开了浏览器,自动输入帐号密码并成功登陆京东
以后退出浏览器,并拿到了cookies 打印了出来。
登陆其余网站能够参照该操做流程,后续若有需求将进行更新。
2. Selenium的使用
4. 经过XPath查找元素
6. 【error】selenium启动chrome时,弹出设置页面:Microsoft Windows恶意删除工具...