当前位置: 首页 > news >正文

python爬虫Selenium模块及测试案例详解

什么是selenium?

(1)Selenium是一个用于Web应用程序测试的工具。
(2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。
(3)支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)
(4)selenium也是支持无界面浏览器操作的。

为什么使用selenium?

模拟浏览器功能,自动执行网页中的js代码,实现动态加载

selenium的基本使用

由于selenium是进行浏览器模型,所以需要浏览器驱动。
浏览器设置里面查看版本号,下载对应的版本(版本号必须一致否则报错)
该Exception明确指出需要将指定的driver(我这里是edgedriver)放到PATH中。对于driver下载链接如下:

Chrome: http://chromedriver.storage.googleapis.com/index.html

Edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

Firefox:https://github.com/mozilla/geckodriver/releases/

在这里插入图片描述
在这里插入图片描述
版本驱动要和python文件在同一目录
在这里插入图片描述

# (1)导入selenium
from selenium import webdriver# (2) 创建浏览器操作对象
path = 'msedgedriver.exe'browser = webdriver.Edge(path)# (3)访问网站
# url = 'https://www.baidu.com'
#
# browser.get(url)url = 'https://www.jd.com/'browser.get(url)# page_source获取网页源码
content = browser.page_source
print(content)

在这里插入图片描述

元素定位

from selenium import webdriverpath = 'msedgedriver.exe'
# todo 调用浏览器引擎,对应的浏览器使用对应的方法调用
browser = webdriver.Edge(path)url = 'https://www.baidu.com'
browser.get(url)# 元素定位# 根据id来找到对象
button = browser.find_element_by_id('su')
print(button.tag_name)# 根据标签属性的属性值来获取对象的
button = browser.find_element_by_name('wd')
print(button.tag_name)# 根据xpath语句来获取对象
button = browser.find_elements_by_xpath('//input[@id="su"]')
print(button)# 根据标签的名字来获取对象
button = browser.find_elements_by_tag_name('input')
print(button)# 使用的bs4的语法来获取对象
button = browser.find_elements_by_css_selector('#su')
print(button)

button = browser.find_element_by_id(‘su’)
在这里插入图片描述
button = browser.find_element_by_name(‘wd’)
在这里插入图片描述
button = browser.find_elements_by_xpath(‘//input[@id=“su”]’)
在这里插入图片描述

元素信息

from selenium import webdriverpath = 'msedgedriver.exe'
# todo 调用浏览器引擎,对应的浏览器使用对应的方法调用
browser = webdriver.Edge(path)url = 'http://www.baidu.com'
browser.get(url)
input = browser.find_element_by_id('su')# 获取标签的属性
print(input.get_attribute('class'))
# 获取标签的名字
print(input.tag_name)
# value标签的内容
print(input.get_attribute("value"))

在这里插入图片描述

在这里插入图片描述

# 获取元素文本
a = browser.find_element_by_link_text('新闻')
print(a.text)

在这里插入图片描述

交互

交互就是模拟人去点击网页进行请求

from selenium import webdriverpath = 'msedgedriver.exe'
# todo 调用浏览器引擎,对应的浏览器使用对应的方法调用
browser = webdriver.Edge(path)# url
url = 'https://www.baidu.com'
browser.get(url)import time
time.sleep(2)# 获取文本框的对象
input = browser.find_element_by_id('kw')# 在文本框中输入周杰伦
input.send_keys('周杰伦')time.sleep(2)# 获取百度一下的按钮
button = browser.find_element_by_id('su')# 点击按钮
button.click()time.sleep(2)# 滑到底部
js_bottom = 'document.documentElement.scrollTop=100000'
browser.execute_script(js_bottom)time.sleep(2)# 获取下一页的按钮
next = browser.find_element_by_xpath('//a[@class="n"]')# 点击下一页
next.click()time.sleep(2)# 回到上一页
browser.back()time.sleep(2)# 回去
browser.forward()time.sleep(3)# 退出
browser.quit()

在这里插入图片描述

在这里插入图片描述

案例(登录百度页面搜索昆凌并且保存页面图片)

from selenium import webdriver
import timepath = 'msedgedriver.exe'
# todo 调用浏览器引擎,对应的浏览器使用对应的方法调用
browser = webdriver.Edge(path)url = 'https://www.baidu.com'
browser.get(url)browser.save_screenshot('baidu.png')time.sleep(2)input = browser.find_element_by_id('kw')
input.send_keys('昆凌')time.sleep(3)browser.save_screenshot('kunling.png')

在这里插入图片描述

案例(查询歌曲)

from selenium import webdriverpath = 'msedgedriver.exe'
# todo 调用浏览器引擎,对应的浏览器使用对应的方法调用
browser = webdriver.Edge(path)
# todo 对网站发起请求
url = 'https://www.1nzb.com/'
browser.get(url)
# todo 定位到歌曲输入框
input = browser.find_element_by_id('ac')
# todo 输入歌名若是月亮还没来
input.send_keys('若是月亮还没来')
# todo 提交输入框内容
input.submit()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大语言模型-Transformer-Attention Is All You Need
  • 如何发一篇顶会论文? 涉及3D高斯,slam,自动驾驶,三维点云等等
  • 学生管理系统(C语言)(Easy-x)
  • [python]pycharm设置清华源
  • WEB前端09-前端服务器搭建(Node.js/nvm/npm)
  • 【引领未来智造新纪元:量化机器人的革命性应用】
  • npm 或者yarn下载依赖卡顿报错 sill idealTree buildDeps
  • [Redis]典型应用——分布式锁
  • BGP笔记的基本概要
  • 开源模型应用落地-FastAPI-助力模型交互-进阶篇-RequestDataclasses(三)
  • HTML5应用的安全防护策略与实践
  • 设计模式11-原型模式
  • 中文诗歌生成
  • 爬取百度图片,想爬谁就爬谁
  • 【Vue3】计算属性
  • $translatePartialLoader加载失败及解决方式
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • “大数据应用场景”之隔壁老王(连载四)
  • css布局,左右固定中间自适应实现
  • ES6--对象的扩展
  • Idea+maven+scala构建包并在spark on yarn 运行
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript新鲜事·第5期
  • JavaScript学习总结——原型
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Twitter赢在开放,三年创造奇迹
  • Vue.js源码(2):初探List Rendering
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • win10下安装mysql5.7
  • 从输入URL到页面加载发生了什么
  • 构造函数(constructor)与原型链(prototype)关系
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 我这样减少了26.5M Java内存!
  • 06-01 点餐小程序前台界面搭建
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • Prometheus VS InfluxDB
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • (C语言)fgets与fputs函数详解
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (NSDate) 时间 (time )比较
  • (SpringBoot)第二章:Spring创建和使用
  • (八)Flink Join 连接
  • (多级缓存)缓存同步
  • (二)WCF的Binding模型
  • (计算机网络)物理层
  • (六)vue-router+UI组件库
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (一) springboot详细介绍
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)memcache、redis缓存
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...