注册 X
提交 注:点击提交后系统会发送邮件到邮箱验证!(仅支持中国大陆邮箱)
我已阅读并同意 服务条款
首页 > IT技术笔记 > 查看笔记

Python Selenium的简单演示程序

Python Selenium的运行原理

上代码前,再啰嗦下Selenium是怎么运行起来,跟WebDriver是什么关系。

我们安装的Selenium Python库提供了一系列接口(API),比如鼠标点击,拖动,填写输入框等等。

上一篇我们安装的WebDriver是chrome浏览器的chromedriver,是用来跟浏览器保持通信,就是当你调用API时,要靠这个driver来把消息传递给浏览器,浏览器才能响应你。

当你运行程序后,driver会以进程的方式常驻在内存中,如果是windows用户,你在任务管理器的进程中会看到chromedriver.exe这个进程。

Python Selenium演示程序

我们使用浏览器一般会做以下几件事情:
1.打开一个网页
2.鼠标在页面上滑动 **
**3.点击一个链接

4.在不同网页(tab)间切换
5.在表单(输入框)中填写信息,并提交
6.打开网页后,希望能自动读取cookies(实现自动登录等行为)

我们来写段小程序演示一下1,2,3,5,至于切换tab和cookies管理我们另开文章说明。这段程序演示打开猿人学首页,并来回滑动页面,然后点击页面右上角的搜索图标,输入“Python教程”后回车。

代码在Python3.6版本中调试通过。啰嗦完了该上代码了。


		        
#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

#打开Chrome浏览器
driver = webdriver.Chrome(executable_path="C:/chromedriver.exe")
#浏览器最大化
driver.maximize_window()
#打开猿人学首页
driver.get('https://www.baidu.com')
time.sleep(3)

#滑动到页面中间处
driver.execute_script("window.scrollTo(0,document.body.scrollHeight/2)")
time.sleep(3)

#滑动到页面最下方
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
time.sleep(3)

#滑动到页面最上方
driver.execute_script("window.scrollTo(0,0)")
time.sleep(3)

#通过html的class属性来定位链接位置,并点击
driver.find_element_by_class_name('slide-left').click()
time.sleep(3)

#定位页面右上角的搜索图标并点击
driver.find_element_by_class_name('search-show').click()

#找到输入框
search = driver.find_element_by_class_name("search-input")
#输入 Python教程
search.send_keys(u'python教程')
time.sleep(7)
#回车
search.send_keys(Keys.RETURN)

time.sleep(5)
driver.quit()
		      

看完演示过程,我们再来回顾一下操作步骤。
首先是要调用Chrome()方法打开浏览器。
然后是调用get()方法打开猿人学网站。
剩下的事情就是开始模拟鼠标和键盘行为了。

页面滑动是靠执行JS代码来实现的,那个代码可以直接拷贝使用。

点击链接前,你先要定位到这个元素(链接),怎么定位元素?

我们上面的例子是靠找html class属性来实现的,调用的find_element_by_class_name()方法来定位元素的class name, 还可以靠xpath,靠css,靠class id来定位,这都要针对你具体的网站来选择,选择依据就是怎么方便怎么来,后面我们再具体聊这块,具体的我们在下一篇文章中聊。

向输入框中输入字符并回车也很简单。
先定位到输入框,然后调用send_keys()方法输入。
注意这里只能输入unicode,输utf,gbk编码字符串是要报错的。

总结:
1.上面所有的函数调用都是从 from selenium import webdriver 这个包里调用的,我们要操作的相关API基本都在这里面。

2.点击链接,在输入框里输入字符等操作,要先定位到这个元素处。

3.定位元素的方法有很多:xpath ,css ,class id,class name都可以。

4.程序运行完了要记得调用driver.quit()退出,不然chromedriver.exe进程不会自己退出,反复这样运行程序的话,内存里就会有好几个chromedriver.exe。

思考:
上面每个几行代码我都加了time.sleep()这是为什么?

一个原因是为了演示流程更清晰,在每个操作步骤处停留几秒,观看更清楚。

第二个原因是:我们知道打开一个网页后浏览器会加载一段时间,根据网络情况,加载时间有快有慢,在资源还没有加载完的情况下,我们去定位元素有可能是定位不到的,这时就会报错。所以让它停留一段时间来加载资源。

其实selenium是有自己的等待函数的,这里先用time.sleep()来简单代替。



 打赏        分享



评论

邮箱: 昵称:

    回复内容 X
  1. 1

    11 2020-12-07
    大哥,你的博客模板能分享下吗 回复

  2. 管理员 2020-12-07
    回复了11: 模板我只有html的,功能全是自己实现的,要的话可以留下你的邮箱,我发你 回复