网站首页 > 基础教程 正文
一、什么是selenium
Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏。
二、selenium的安装
selenium的安装比较简单,和其它的python三方库一样,使用 pip install selenium即可。
但是要想驱动浏览器工作,还需要下载一个插件:
1.查看chorm的版本号
在chorm的地址栏输入:chrome://version/
2.下载对应的chromedriver版本
http://chromedriver.storage.googleapis.com/index.html
之后根据自己的操作系统,下载对应的插件即可。
3.下载的文件解压后,将其中的chromedriver.exe复制到python3.exe所在的文件夹下即可
三、selenium常用操作
selenium可以操纵浏览器去操作,下面举个小例子,通过selenium自动在百度搜索“美女”,并保存页面截图。
from selenium import webdriver
import time
if __name__ == '__main__':
# 1.创建浏览器对象
driver = webdriver.Chrome()
# 2.请求页面
driver.get('https://www.baidu.com/')
# 3.页面的基本操作(点击、输入)
driver.find_element_by_id('kw').send_keys('美女') #输入
driver.find_element_by_id('su').click() #点击
time.sleep(2)
driver.save_screenshot('baidu.png')
# 获取渲染之后的数据
print(driver.page_source)
print(driver.get_cookies()) #获取cookies值
print(driver.current_url) #查看当前的url路径
driver.close() #关闭页面
driver.quit() #关闭浏览器
关于上述代码,可能会有疑问:
driver.find_element_by_id是一种元素定位的方法,在整个页面中,根据id属性值获取元素列表。当我们要搜索时,肯定是先点击百度的搜索栏,然后输入相应的内容,再点击“百度一下”,才会完成搜索:
selenium是模仿人类完成浏览器的操作,所以首先需要找到搜索栏在哪。右键点击搜索栏,然后点击“检查”选项,就会出现如下页面,蓝框会自动出现,所对应的正是搜索栏的位置:
红圈所处的位置,就是driver.find_element_by_id()的参数,之后通过send_keys()方法,将想要搜索的内容传递给服务器。
“百度一下”的id获取方法同理。
除了通过id定位,还有其他的定位方法,如下所示。
四、selenium元素定位的方法
find_elements_by_id #根据id属性值获取元素列表
find_elements_by_class_name #根据类名获取元素列表
find_elements_by_xpath #返回一个包含元素的列表
find_elements_by_link_text #根据标签的文本获取元素列表,精确定位
find_elements_by_partial_link_text #根据标签包含的文本获取元素列表,模糊定位
find_elements_by_tag_name #根据标签名获取元素列表
下面以豆瓣网为例,大家可自行练习:
from selenium import webdriver
if __name__ == '__main__':
driver = webdriver.Chrome()
driver.get('https://www.douban.com/')
# 1.通过标签的id值获取标签
ret1 = driver.find_element_by_id('anony-nav') # 标签对象
print(ret1)
# 2.通过标签的id值获取多个标签
ret2 = driver.find_elements_by_id('anony-nav') # 获取多个标签 --list
print(ret2)
# 3.通过标签的class属性获取标签
ret3 = driver.find_elements_by_class_name('anony-nav-links')
print(ret3)
# 4.通过xpath获取左上角豆瓣图片的<a>标签
ret4 = driver.find_elements_by_xpath('//*[@id="anony-nav"]/h1/a')
print(ret4)
# 5.通过标签包裹的文本'下载豆瓣 App'获取元素列表(精确定位)
ret5 = driver.find_element_by_link_text('下载豆瓣 App')
print(ret5)
# 6.通过标签包裹的文本'豆瓣',获取元素的列表(模糊定位)
ret6 = driver.find_elements_by_partial_link_text('豆瓣')
print(len(ret6))
# 7.通过标签名获取元素列表
ret7 = driver.find_elements_by_tag_name('div')
print(len(ret7))
# 8.获取<h1>标签包裹的文本内容
ret8 = driver.find_element_by_tag_name('h1')
print(ret8.text)
# 9.通过标签包裹的文本'下载豆瓣 App'获取其href属性值
ret9 = driver.find_element_by_link_text('下载豆瓣 App')
print(ret9.get_attribute('href'))
这里有个值得注意的地方,driver.find_element_by_xpath()中的参数怎么填。
通过xpath获取左上角豆瓣图片的<a>标签:
1.在图片处右键点击“检查”
2.在蓝框处右键点击“Copy”选项中的“Copy Xpath”即可复制该节点的Xpath表达式
3.粘贴入driver.find_element_by_xpath('')的引号内即可
五、页面回退与页面前进
还是以豆瓣网为例,通过selenium点击某个链接,会刷新出该链接的页面,之后通过driver.back()即可返回原来的页面,driver.forward()则是页面前进。
from selenium import webdriver
if __name__ == '__main__':
driver = webdriver.Chrome()
driver.get('https://www.douban.com/')
driver.find_element_by_xpath('//*[@id="anony-sns"]/div/div[3]/div/div[1]/ul/li[2]/div/a/img')
# 页面回退
driver.back()
# 页面前进
driver.forward()
六、切换窗口
还是以豆瓣网为例,通过selenium点击某个链接,会弹出新的窗口,但是页面可能停留在原来的窗口,这时可以通过driver.switch_to.window切换窗口。
from selenium import webdriver
if __name__ == '__main__':
'''切换窗口'''
driver = webdriver.Chrome()
driver.get('https://www.douban.com/')
driver.find_element_by_xpath('//*[@id="anony-nav"]/div[1]/ul/li[2]/a').click()
# 1.获取当前所有的窗口
current_window = driver.window_handles
print(current_window)
driver.switch_to.window(current_window[1])
七、模拟登录
模拟登录在爬虫中属于较难的部分,但是通过selenium就会很简单。
首先需要找到嵌套网页,右键点击“检查”:
红圈所处的位置就是嵌套网页的标签,点一下发现只有登录选项那里属于嵌套网页:
所以driver.switch_to_frame()的参数填0即可,以下是完整代码:
from selenium import webdriver
if __name__ == '__main__':
driver = webdriver.Chrome()
driver.get('https://www.douban.com/')
driver.switch_to_frame(0)
# 定位“密码登录”
driver.find_element_by_xpath('/html/body/div[1]/div[1]/ul[1]/li[2]').click()
# 定位“账号”,并输入账号
driver.find_element_by_xpath('//*[@id="username"]').send_keys('此处填入豆瓣账号')
# 定位“密码”,并输入密码
driver.find_element_by_xpath('//*[@id="password"]').send_keys('此处填入豆瓣密码')
# 定位“登录豆瓣”,并点击
driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[5]/a').click()
以上就是关于selenium的介绍,过几天我会更新使用selenium爬取淘宝商品信息的文章,欢迎关注我。
猜你喜欢
- 2024-11-17 「uniapp实战笔记」使用uni-nav-bar自定义顶部状态栏和导航栏
- 2024-11-17 VIP感觉!NAS部署OneNav个人导航页,简洁的个人书签管理应用!
- 2024-11-17 使用Chrome扩展程序生成网页骨架屏
- 2024-11-17 17、Bootstrap 中的导航都有哪些?(必会)
- 2024-11-17 【魔改版】OneNav Extend网址导航书签系统源码
- 2024-11-17 超简单的Web Components导航(简单导航页)
- 2024-11-17 应用HTML5和CSS3实现举报中心PC端与手机端举报页面的自适应设计
- 2024-11-17 vue.js 脚手架安装和使用(vue脚手架怎么使用)
- 2024-11-17 把喜欢的前端模版加上后台,小白速成课,不懂代码玩建站(下)
- 2024-11-17 HTML5升级的意义是什么?(html5相比原来的版本有哪些更新)
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- deletesql (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)