浏览器模拟登录的主要技术点在于:

1.如何使用python的浏览器操作工具selenium

2.简单看一下网页,找到帐号密码对应的框框,要知道python开启的浏览器如何定位到这些

一、使用selenium打开网页

from selenium import webdriver

url = 'https://passport.cnblogs.com/user/signin'

driver = webdriver.Firefox()
driver.get(url)

以上几句执行便可以打开博客园的登录界面,开启浏览器可能较慢,耐心等一下.

以前的selenium可以直接打开firefox,现在的需要安装geckodriver,自己百度下载一个对应自己浏览器的型号的.

chrome一直都需要驱动,使用chrome的需要设置的可能麻烦一点.推荐看一下虫师的相关文章,个人觉得讲得不错,百度搜索出来还是比较靠前的.

二、找到帐号密码对应的页面元素

  浏览器打开页面,点击f12,按上图步骤,找到了用户名的id"input1",同理找到密码的id,找到后发现是"input2".

三、将自己的用户名和密码填入selenium打开的浏览器

使用find_element_by_id方法找到元素,再使用send_keys方法传入参数,最后使用click方法点击登录按钮即可.

成品代码有如下几句:

# /usr/bin/python
# encoding: utf-8 import time
from selenium import webdriver def login(username, password):
# url = 'https://passport.cnblogs.com/user/signin' # 使用这个url登录成功后定位到园子
url = 'https://passport.cnblogs.com/user/signin?ReturnUrl=https%3A%2F%2Fwww.cnblogs.com%2F' # url中指明定位到博客园首页 driver = webdriver.Firefox()
driver.get(url)
# print driver.title
name_input = driver.find_element_by_id('input1') # 找到用户名的框框
pass_input = driver.find_element_by_id('input2') # 找到输入密码的框框
login_button = driver.find_element_by_id('signin') # 找到登录按钮 name_input.clear()
name_input.send_keys(username) # 填写用户名
time.sleep(0.2)
pass_input.clear()
pass_input.send_keys(password) # 填写密码
time.sleep(0.2)
login_button.click() # 点击登录 time.sleep(0.2)
print driver.get_cookies() time.sleep(2)
print driver.title driver.close() if __name__ == "__main__":
user = "Masako"
pw = "*****"
login(user, pw)

使用time模块sleep主要是为了控制操作速度,防止被认为是机器人,比较符合现实的情况应该随机sleep时间.

上述代码执行之后(注意将用户名密码换成自己的),可以看到打开了浏览器,并自动填写了帐号密码,自动点击登录,成功后跳转,然后自动关闭浏览器.

本地可以看到打印了一份cookie和一个标题"博客园 - 开发者的网上家园".

如果登录失败,打印的标题会是"用户登录 - 博客园".

如果报错,未打开浏览器,多半是没有安装geckodriver.

上述代码会打开浏览器界面,若不想看到界面,可采用以下手段:

if __name__ == "__main__":

    from pyvirtualdisplay import Display

    display = Display(visible=0, size=(1366, 768))
display.start()
user = "Masako"
pw = "*****"
login(user, pw)
display.stop()

在调用浏览器的时候使用Display包裹,并将dispaly设置为不可见(visible=0)

最新文章

  1. TTabControl、TMemo组件(制作一个简单的多文本编辑框)
  2. IGeoDatabaseBridge2.GetLineOfSight
  3. poj-3616 Milking Time (区间dp)
  4. java多线程学习笔记——简单
  5. Thinkphp单字母函数使用指南
  6. jbpmAPI-7
  7. error C3872: “0x3000”: 此字符不允许在标识符中使用
  8. php 常用代码段
  9. centos7上关闭防火墙
  10. SpringMVC(十):SpringMVC 处理输出模型数据之Map及Model
  11. poj 1811 随机素数和大数分解(模板)
  12. LeetCode之“链表”:Reverse Linked List && Reverse Linked List II
  13. Docker:pipeline编写基本技巧- jenkins配置通过免交互方式拉取git源码管理仓库的代码
  14. python+selenium入门
  15. Android蓝牙BLE开发,扫描、连接、发送和读取信息;
  16. git 简单的操作命令
  17. BZOJ1051或洛谷2341 [HAOI2006]受欢迎的牛
  18. Spring 如何在 WEB 应用中使用
  19. vue.js学习之better-scroll封装的轮播图初始化失败
  20. [LeetCode]20. Valid Parentheses有效的括号

热门文章

  1. 给你的LINUX程序加个文字画LOGO
  2. NArrange 配置与使用
  3. [GO]channel实现数据交互
  4. 大前端涉猎之前后端交互总结1: 软件架构与PHP搭建
  5. 编写高质量代码改善C#程序的157个建议——建议123:程序集不必与命名空间同名
  6. kafka (搜索) 在idea api操作(官方apihttp://kafka.apache.org/documentation/#producerapi)
  7. javascript高级程序设计读书笔记----事件
  8. wp8.1 app退出操作提示
  9. 使用Go客户端访问MongoDB
  10. How can i use iptables on centos 7 or fedora?