大家好,欢迎来到IT知识分享网。
如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。
一、确认软件版本
首先我们需要确认我们所使用的谷歌浏览器版本,这里测试的谷歌浏览器版本为(版本 67.0.3396.87(正式版本) (64 位)),点击设置—关于Chrome,则可以看到
我们进入 Chromedriver 的官网下载页面,可以看到最新的 2. 4 版本支持谷歌的 v66-68,下载并保存路径即可
这里我们下载 win 版本,解压后存放到路径 “E:\chromedriver.exe”。
二、初步访问网站
除了使用 Chromedriver作为驱动,我们想要访问网站,还需要用到 Selenium 模块,Selenium 是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些 JavaScript 动态渲染的页面来说,此种抓取方式非常有效。我们先来安装此模块
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 官网,随后浏览器关闭。
三、自动登录网站
我们会需要通过 XPath 查找元素,使用 XPath 的主要原因之一就是当你想获取一个既没有 id 属性也没有 name 属性的元素时, 你可以通过 XPath 使用元素的绝对位置来获取他(这是不推荐的),或相对于有一个 id 或 name 属性的元素 (理论上的父元素)的来获取你想要的元素。XPath 定位器也可以通过非 id 和 name 属性查找元素。
接着我们找到京东的登录界面,查看源代码,会发现如果想要实现账号登录京东,就必须找到源码中账户登录的唯一键,此处唯一为“clstag”值
绝对的 XPath 是所有元素都从根元素的位置(HTML)开始定位,只要应用中有轻微的调整,会就导致你的定位失败。 但是通过就近的包含 id 或者 name 属性的元素出发定位你的元素,这样相对关系就很靠谱, 因为这种位置关系很少改变,所以可以使你的测试更加强大。
这里我们通过查找超链接的位置来定位账户登录
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 打印了出来。
登录其他网站可以参照该操作流程,后续如有需求将进行更新。
参考资料
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15335.html