python之爬虫 selenium模块(五)

我们前面的学习中都是输入固定的网址,而selenium模块会直接控制浏览器,实际点击链接并且填写登录信息,因此就像真的有用户在电脑前操作一样
selenium模块是用于Web测试的自动化的一个工具,其功能非常强大,可直接运行在浏览器中,支持大部分主流浏览器,支持自动录制动作和自动生成


一、安装及脚本编辑
安装

直接输入pip intall selenium即可(successfully)

脚本编辑

以一个例子作为其模块的基本使用

from selenium import webbrowser
#调用该selenium模块

browser = webdriver.Firefox()
#启动Firefox浏览器

type(browser)
#打印其类型数据类型
#<class 'selenium.webdriver.firebox.webDriver'>

browser.get('http://inventwithpython.com')
#将浏览器指向该网址

注意:
如果我们的浏览器是Chrome,IE,就要把Firefox替换掉

e.g.Chrome浏览器就需要对应的Chrome driver来驱动,故在之前,我们确保有这些驱动(即浏览器能正常使用)


二、页面中查找元素

web Driver对象用于在页面中寻找元素,其有好几种方法

方法描述
find_element_*返回一个webElement对象,代表页面中匹配查询的第一个元素
find_elements_*返回webElement_*对象的列表,包含页面中所有匹配的元素

下面表1介绍部分的selenium的web Driver方法,用于寻找元素

方法名返回的web Element对象/列表
browser.find_element(s)_by_class_name(name)使用CSS类的name元素
browser.find_element(s)_by_css_selector(selector)匹配CSS selector的元素
browser.find_element(s)_by_id(id)匹配id属性值的元素
browser.find_element(s)_by_link_text(text)完全匹配提供的text的<’a‘>元素
browser.find_element(s)_by_partial_link_text(name)包含提供的text的<’a‘>元素
browser.find_element(s)_by_name(name)匹配name属性值的元素
browser.find_element(s)_by_tag_name(name)匹配标签name的元素(大小写无关,可a或A)

注意:
除*_by_tag_name()方法,所有方法的参数都是区分大小写的,如果没有元素匹配该方法要查找的元素就会抛出异常,为避免程序崩溃,我们需要使用try-except语句

WebElement的属性值及方法

属性/方法描述
tag_name标签名,例如’a’表示对应标签
get_attribute(name)该元素name属性的值
text该元素内的文本
clear()对于文本字段或文本区域元素,清除其中输入的文本
is_display()如果该元素可见,返回True,否则返回False
is_enabled()对于输入元素,如果该元素启用,返回True,否则返回False
is_selected()对于复选框或单选框,如果该元素被选中,选择True,否则返回False
location一个字典,包含键’x’和’y’,表示该元素在页面上的位置

e.g.

from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://inventwithpython.com')

try:
	elem = browser.find_element_by_class_name('bookcover')
	print('Found<%s> element with that class name!' %(elem.tag_name))

except:
	print('Was not able to find an element with taht name.')


#输出为
#Found <img> element with that class name!

参照上表及代码,可知打开了浏览器,指向了一个URL,试图找到类型’bookcover’的元素
如果找到,就用tag_name属性把它的标签名打印出来
如果没找到,就打印信息


三、点击页面

前面提到过的find_element_* 和find_elements_* 方法返回的web Element对象有一个click()方法,即模拟鼠标在该元素上的点击

实质就是用于链接跳转,选择单选按钮,点击提交按钮或者会触发该元素被点击时发生的任何事情
e.g.

from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://inventwithpython.com')

linkElem = browser.find_element_by_link_text('Read It Online')
#取得a元素的web Element对象,文本是Read It Online

type(linkElem)
#打印其类型

linkElem.click()
#模拟点击

以上操作就像自己点击这个链接一样,浏览器也将跳转到这个链接


四、填写并提交表单

先看一段代码

from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://gmail.com')
#进入该浏览器

emailElem = browser.find_element_by_id('Email')
emailElem.send_keys('not_my_real_email@gmail.com')
#找到对应的邮箱用户名标签
#再发送对应的用户名

passwordElem = browser.find_element_by_id('Passwd')
passwordElem.send_keys('12345')
#找到对应的邮箱密码标签
#再发送对应的密码

passwordElem.submit()
#等同于点击该元素所在表单的Submit按钮

注释下面写的比较清楚各部分的作用,但还是要注意一下send_keys()方法以及直接调用submit()方法


五、特殊键

针对不能用字符串值输入的键盘击键,功能非常类似于转义字符
这些值保存在selenium.webdriver.common.keys模块的属性中

由于名字非常长,故我们在顶部运行时
from selenium.webdriver.common.keys import Keys

下表列出了常用的变量

属性描述
Keys.DOWN ,Keys.UP,Keys.LEFT,Keys.RIGHT键盘的箭头键
Keys.ENTER,Keys.RETURN回车和换行键
Keys.HOME,Keys.END,Keys.PAGE_DOWN,Keys.PAGE_UPHome键,End键,PageUp键,PageDown键
Keys.ESCAPE ,Keys.BACK_SPACE,Keys.DELETEEsc, Backspace, 字母键
Keys.F1, …Keys.F12键盘顶部的F1到F12
Keys.TABTab键

举个例子:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()
browser.get('http://norstarch.com')
#进入该浏览器对应网址

htmlElem = browser.find_element_by_tag_name('html')

htmlElem.send_keys(Keys.HOME)
htmlElem.send_keys(Keys.END)

假如光标不在文本字段中,按下home和end键,将使浏览器滚动到页面的顶部或底部


六、浏览器按钮

下面列出一部分的selenium模块模拟点击各种浏览器按钮的方法

方法描述
browser.back()点击”返回“按钮
browser.forward()点击”前进“按钮
browser.refresh()点击”刷新“按钮
browser.quit()点击”关闭窗口“按钮

第五篇python之爬虫的学习就到此结束啦!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值