Python爬虫:学习Selenium并使用Selenium模拟登录知乎

现在开始要学习使用Python进行动态爬虫了,而Selenium是来进行动态爬虫的一种工具

介绍Selenium

众所周知很多网站的内容需要登录后能去获取他们的内容,这个时候我们就需要先登录进去,所以就有了这篇模拟登录文章

模拟登录我们要使用到 selenium 自动化测试工具,这个工具需要另行安装,如果你是使用 pycharm,你可以直接去setting中点击一键安装selenium

然后还要去下载浏览器驱动,这里我推荐使用Firefox,因为相对Chrome来说,它是没有版本限制的,不容易出错. Firefox 直接百度就能下载,有一个推荐下载的, Firefox的驱动也可以百度一下 Geckodriver 下载后安装,最后要记得设置环境变量,不然会带来一系列麻烦与错误的,所以这里切记一定要设置。

webdriver.Firefox() 这是获取Firefox浏览器的驱动,

元素.click()这是模拟网页的某个控件的点击事件

元素.clear() 清除元素的值

元素.send_keys(username) 给元素赋值

元素定位

再说一下元素的定位方法,元素的定位方法有很多种,下面我列举一下,这些方法看单词就能明白意思.

  1. find_element_by_id
  2. find_element_by_name
  3. find_element_by_xpath
  4. find_element_by_link_text
  5. find_element_by_partial_link_text 通过部分超连接文本定位
  6. find_element_by_tag_name
  7. find_element_by_class_name
  8. find_element_by_css_selector

窗口切换

  • 切换window driver.switch_to_window('windowname')
  • 切换frame driver

弹窗处理 alert = driver.switch_to_alert() alert.dismiss

使用Selenium来模拟登录知乎

# coding=utf-8

import os
from selenium import webdriver

#知乎的用户名和密码
username = "XXXXXXX"
password = "XXX"

#,获取浏览器的驱动,这里需要提前给firefox指定环境变量,如果没有指定则需要指定路径
driver = webdriver.Firefox()

#窗口最大化
driver.maximize_window()

#打开登录页面
driver.get("https://www.zhihu.com/signup?next=%2F")

#切换到登录页面
driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[2]/span').click()

#给输入框赋值
driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[1]/div[2]/div[1]/input').send_keys(username)
driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[2]/div/div[1]/input').send_keys(password)

#模拟点击事件
driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/button').click()

print driver.title
os.system("pause")

说明:这种模拟登录还不怎么完全,因为这没有涉及到验证码的操作,如果设计到了登录需要输入验证码,就更复杂了。后面我会进一步讲解.

原文发布于微信公众号 - Python绿色通道(Future_coder)

原文发表时间:2018-01-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

sublime实现背景透明化

1593
来自专栏魏艾斯博客www.vpsss.net

如何使用宝塔 linux 面板上传文件、解压缩 zip 和 tar.gz

6624
来自专栏思考的代码世界

Python网络数据采集之采集JavaScript|第09天

1935
来自专栏数据小魔方

excel中的超链接函数

今天跟大家分享在excel中超链接函数的用法! ▼ 其实excel中想要达到超链接效果有很多种方法:直接手工设置、超链接函数、开发工具、VBA等都可以实现。但是...

4549
来自专栏移动开发面面观

React Native 一个开始

1082
来自专栏微信小程序开发

小程序开发注意点儿,新手入门基础

1、域名配置,不配置无法访问 小程序开发,要调用API,就必须把域名填写在配置里面,这点儿一定要记住,万一服务端突然上线一次,发现线上服务出问题了,很有可能就...

52111
来自专栏Jackson0714

【网站开发】在新浪SAE上搭建一个博客

3145
来自专栏Ken的杂谈

JS/Jquery解决回车键触发表单提交问题

因为现在大多数浏览器,当表单中的文本框或其他可提交元素为当前焦点时,敲回车键就会触发表单提交。

1132
来自专栏IMWeb前端团队

Webpack实战-构建同构应用

本文作者:IMWeb 吴浩麟 原文出处:IMWeb社区 未经同意,禁止转载 image.png 同构应用是指写一份代码但可同时在浏览器和服务器中...

2806
来自专栏Java后端技术

网站上点击自定义按钮发起QQ聊天的解决方案

  最近由于开发需要,需要在网站上自定义一个立即交谈的按钮,现将解决方式分享给大家。

1063

扫码关注云+社区