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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python gradio 的输出展示组件

HTML:展示HTML内容,适用于富文本或网页布局。JSON:以JSON格式展示数据,便于查看结构化数据。KeyValues:以键值对形式展示数据。Label:展示文本标签,适用于简单的文本输出。Markdown:…

JavaScript之WebAPIs-BOM

目录 BOM操作浏览器一、Window对象1.1 BOM(浏览器对象模型)1.2 定时器-延时函数1.3 js执行机制1.4 location对象1.5 navigator对象1.6 history对象 二、本地存储三、补充数组中的map方法数组中的join方法数组中的forEach方法(重点)数组中的filter方法(重…

Linux——Centos系统安装(动图演示)

一、创建虚拟机并做相应配置 打开VMware Workstation,选择创建新的虚拟机; 1、选择自定义选项:点击下一步 2、选择虚拟机硬件兼容性:直接下一步就行了;点击下一步 3、安装客户机操作系统:这里我们选择稍后安…

C++对象模型之绕过private权限修饰符

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、C对象模型二、演示1.类层次2.内存排列 总结 前言 咱们都知道C语言在创建类的时候data member(数据成员)和fuchtion member&#xf…

Linux操作系统的有关常用的命令

1.linux系统的概述 1.1 什么是Linux系统? Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯本纳第克特托瓦 兹(Linus Benedict Torvalds)于1991年10月5日首次发布,它主要受…

LVGL项目实战之UI规划

LVGL项目实战之UI规划 ** 实物购买:TB 南山府嵌入式 ** 我们在在做项目之前,先需要确定项目的需求以及可能实现的功能,我们只有确定这些才能够对整体的框架进行把握。 本小结就说一下我们这个项目的一个整体的框架结构以及功能。 1-硬件构…

C语言实现二叉树以及二叉树的详细介绍

目录 1.树概念及结构 1.1树的概念 1.2树的相关概念 1.3树的表示 2.二叉树概念及结构 2.1二叉树的概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的存储结构 3.二叉树顺序结构--特殊的二叉树--堆及其实现 3.1堆的概念及结构 3.2堆的实现 3.2.1堆的结构 3.2.2堆…

《JavaSE》---21.<简单认识Java的集合框架包装类泛型>

目录 前言 一、什么是集合框架 1.1类和接口总览 二、集合框架的重要性 2.1 开发中的使用 2.2 笔试及面试题 三、背后所涉及的数据结构 3.1 什么是数据结构 3.2 容器背后对应的数据结构 四、包装类 4.1 基本数据类型和对应的包装类 4.2 装箱和拆箱 1.最初的写法 2.…

org.springframework.context.ApplicationContext发送消息

1、创建消息的实体类 package com.demo;/*** 监听的实体类**/ public class EventMessage {private String name;public EventMessage(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;} }2、创建消…

【Linux】如何使用docker快速部署Stirling-PDF并实现远程处理本地文档

文章目录 前言1. 安装Docker2. 本地安装部署StirlingPDF3. Stirling-PDF功能介绍4. 安装cpolar内网穿透5. 固定Stirling-PDF公网地址 前言 本篇文章我们将在Linux上使用Docker在本地部署一个开源的PDF工具——Stirling PDF,并且结合cpolar的内网穿透实现公网随时随…

Java 集合框架:Java 中的双端队列 ArrayDeque 的实现

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 019 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…

共享模型之无锁

一、问题提出 1.1 需求描述 有如下的需求,需要保证 account.withdraw() 取款方法的线程安全,代码如下: interface Account {// 获取余额Integer getBalance();// 取款void withdraw(Integer amount);/*** 方法内会启动 1000 个线程&#xf…

GraphPad prism处理cck-8获得ic50

C组为空白对照组,a组为dmso对照组,b组为细胞加药组,八个梯度的药物浓度 一、数据转化 首先,打开软件,选项中选择x的第一项,y的第二项,单一药物浓度设定了几个孔就选几 把自己的药物浓度直接复制…

ubuntu22安装拼音输入法

专栏总目录 一、安装命令: sudo apt update sudo apt install fcitx sudo apt install fcitx-pinyin 二、切换输入法

游戏常用运行库安装包 Game Runtime Libraries Package

游戏常用运行库安装包(Game Runtime Libraries Package)是一个整合了多种游戏所需运行库的安装程序,旨在帮助玩家和开发者解决游戏无法正常运行的问题。该安装包支持从Windows XP到Windows 11的系统,并且具备自动检测系统并推荐合…

代码随想录训练第二十七天|LeetCode56.合并区间、LeetCode738.单调递增的数字、LeetCode968.监控二叉树

文章目录 56.合并区间思路 738.单调递增的数字思路 968.监控二叉树思路确定遍历顺序如何隔两个节点放一个摄像头 56.合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一…

Step-DPO 论文——数学大语言模型理解

论文题目:STEP-DPO: STEP-WISE PREFERENCE OPTIMIZATION FOR LONG-CHAIN REASONING OF LLMS 翻译为中文就是:“LLMs长链推理的逐步偏好优化” 论文由港中文贾佳亚团队推出,基于推理步骤的大模型优化策略,能够像老师教学生一样优…

String 和StringBuilder字符串操作快慢的举例比较

System.currentTimeMillis(); //当前时间与1970年1月1日午夜UTC之间的毫秒差。public class HelloWorld {public static void main(String[] args) {String s1 "";StringBuilder s2 new StringBuilder("");long time System.currentTimeMillis();long s…

git命令学习分享

分布式版本控制系统,本地仓库和远程仓库相互独立。 使用repository仓库进行控制,可以对里面的文件进行跟踪,复原。 git config --global --list:查看git配置列表 cd ** :进入** cd .. :退回上一级 echo…

AI Agent项目探索与实践记录

AI Agent项目探索与实践记录 1. 概述2. 总体结构2.1 记忆模块2.2 模型服务模块2.2.1 LLM服务2.2.2 retrieval服务2.2.3 rerank服务 2.3 Agent系统2.3.1 Planner2.3.2 Code/SQL Generator2.3.3 Code Executor2.3.4 Responser2.3.5 Round Compressor2.3.6 New Turn Discriminator…