0%

使用selenium模块控制浏览器

使用selenium模块控制浏览器

selenium模块可以让Python直接控制浏览器,实际点击链接,填写登录信息。这就意味着Selenium与Requests和Beautiful Soup相比,它更高级但是它也更慢。

启动一个Chrome并打开百度首页

1
2
3
browser = webdriver.Chrome()
browser.get('http://www.baidu.com')
print(type(browser)) # 这是一个WebDriver对象。

在页面寻找元素

1
2
3
有两类方法可以用于寻找元素, 它们是findelements方法和findelement方法
findelement方法返回一个WebElement对象,也就是说它只返回页面中所匹配的第一个元素
findelements方法返回一个WebElement对象列表,它返回页面中所匹配的所有元素

selenium的WebDriver方法,用于寻找元素(只给出了findelement类型方法,findelements类型类似,是需要改动element为elements即可)

WebElement的属性与方法

image-20200824222536953

寻找元素Demo

1
2
3
4
5
6
7
8
9
10
11
from selenium import webdriver
url = 'https://nianchu.space/' # 我的个人网站: nianchu.space
browser=webdriver.Chrome()
browser.get(url)
# try-except语句
try:
# 寻找类名为'site-title'的元素
elem=browser.find_element_by_class_name('site-title')
print('Found <%s> element with that classname!'%(elem.tag_name))
except:
print('Was not able to find an element with that name.') # Found <span> element with that classname!

点击页面

WebElement对象有一个click()方法,可以使用它模拟鼠标在元素上点击。这个方法可以用于跳转链接,选择单选按钮,点击提交按钮等等

1
2
3
4
5
6
7
8
9
10
from selenium import webdriver
browser = webdriver.Chrome()

browser.get("https://nianchu.space/")

linkElement = browser.find_element_by_link_text('个人网站')
print(type(linkElement))

# 打开"个人网站链接"
linkElement.click()

填写并提交表单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from selenium import webdriver
"""
本来计划的是Google mail的登录演示,但是webdriver上无法完成,便改为了qq邮箱
"""
browser = webdriver.Chrome()
# 下面的url很长,它是手机版QQ邮箱登录界面的主页
browser.get('https://ui.ptlogin2.qq.com/cgi-bin/login?style=9&appid=522005705&daid=4&s_url=https%3A%2F%2Fw.mail.qq.com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwsk%26delegate_url%3D%26f%3Dxhtml%26target%3D&hln_css=http%3A%2F%2Fmail.qq.com%2Fzh_CN%2Fhtmledition%2Fimages%2Flogo%2Fqqmail%2Fqqmail_logo_default_200h.png&low_login=1&hln_autologin=%E8%AE%B0%E4%BD%8F%E7%99%BB%E5%BD%95%E7%8A%B6%E6%80%81&pt_no_onekey=1')

# 按找给定的id进行匹配
emailElem = browser.find_element_by_id('u')
# 传入qq账号
emailElem.send_keys('1234567')

# 输入邮箱账号后需要点击下一步进行
passWordElem = browser.find_element_by_id('p')
# 传入密码
passWordElem.send_keys('1234567')

# 点击确认登录
goElem = browser.find_element_by_id('go')
goElem.click()

*注意: 在任何元素上调用submit()方法,都等同于点击该元素所在表单的Submit按钮 *

发送特殊按键

在浏览网页的时候,我们经常需要使用键盘击键。selenium有一个模块,帮助我们实现了这个功能。

各种按键的值保存在selenium.webdriver.common.keys,在使用的时候向下面这样导入的话,会让后面的使用更加方便。

1
from selenium.webdriver.common.keys import Keys

selenium.webdriver.common.keys模块中常用的变量如下:

1
2
3
4
5
6
7

Keys.DOWN,Keys.UP,Keys.LEFT,Keys.RIGHT
Keys.ENTER,Keys.RETURN
Keys.HOME,Keys.END,Keys.PAGE_DOWN,Keys.PAGE_UP
Keys.ESCAPE,Keys.BACK_SPACE,Keys.DELETE
Keys.F1,Keys.F2,...,Keys.F12
Keys.TAB

示例: 发送特殊键时间网页界面在开头和结尾之间来回滚动3次

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Chrome()

browser.get('https://nianchu.space/')
htmlElem = browser.find_element_by_tag_name('html')
for i in range(3):
# 防止页面还没有打开程序就已经停止
time.sleep(10)
# 发送End键
htmlElem.send_keys(Keys.END)
time.sleep(10)
# 发送Home键
htmlElem.send_keys(Keys.HOME)

点击浏览器按钮

selenium有一些方法,可以帮助我们模拟点击各种浏览器按钮,包括下面这些

1
2
3
4
browser.back(): 返回
browser.forward(): 前进
browser.refresh(): 刷新
browser.quit(): 关闭窗口

下面给大家演示其中的一个:refresh()

1
2
3
4
5
6
7
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://nianchu.space/')

# 刷新页面
browser.refresh()

关于selenium模块的简单介绍就到这里。我是奇奇怪怪,致力于分享有趣使用的奇奇怪怪小技巧。

推荐阅读


欢迎关注我的公众号“奇奇怪怪小技巧