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

爬虫笔记之——selenium安装与使用(1)

爬虫笔记之——selenium安装与使用(1)

  • 一、安装环境
    • 1、下载Chrome浏览器驱动
      • (1)查看Chrome版本
      • (2)下载相匹配的Chrome驱动程序
  • 地址:https://chromedriver.storage.googleapis.com/index.html
    • 2、学习使用selenium
      • (1)安装selenium,用pip install selenium -i 源镜像
      • (2)开始编程
    • 3、页面元素定位
      • (1)通过ID值定位
  • driver.find_element(By.ID,"kw")
      • (2)通过CLASS值定位
  • driver.find_element(By.CLASS_NAME,"s_ipt")
      • (3)通过NAME定位
  • driver.find_element(By.NAME,"wd")
      • (4)通过TAG_NAME定位
  • driver.find_element(By.TAG_NAME,"div")
      • (5)通过XPATH语法定位
  • driver.find_element(By.XPATH,"//*[@id="su"]").click()
      • (6)通过CSS语法定位
  • driver.find_element(By.CSS_SELECTOR,"#su").click()
      • (7)通过文本定位--精确定位
  • driver.find_element(By.LINKE_TEXT,"在希望的田野上")
      • (8)通过部分文本定位--模糊定位
  • driver.find_element(By.PRATIAL_LINK_TEXT,"希望")
    • 4、操作表单元素及其他操作
      • (1)输入内容、清除内容、鼠标单击
      • (2)行为链
      • (3)动作链
      • (4)点击操作(继续学习行为链)
  • 注意:鼠标滑动、拖拽是动作链,一连串的点击是行为链。
    • 5、行为链中的等待(Explicit Waits)

  • 认识selenium
    • Selenium是一个用于Web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7—11),Firefox,Safari,Google,Chrome,Opera,Edge等。

一、安装环境

1、下载Chrome浏览器驱动

(1)查看Chrome版本

在这里插入图片描述

在这里插入图片描述

(2)下载相匹配的Chrome驱动程序

  • 地址:https://chromedriver.storage.googleapis.com/index.html

  • 打开之后,找上面查到的最新地址,如图
    在这里插入图片描述
  • 然后,把下载的压缩包解压,得到chromedriver.exe文件,复制到Python安装目录下,双击安装。
  • 打开cmd命令提示符,输入Chromedriver,之后显示如下图样,就代表安装成功了。
    在这里插入图片描述
  • 以上是Chrome浏览器的驱动安装,其他浏览器可以对应下载。

2、学习使用selenium

(1)安装selenium,用pip install selenium -i 源镜像

(2)开始编程

  • 下面是VSCode里面录入的代码,其中定义浏览器的时候,会自动弹出各种浏览器模式
    在这里插入图片描述

  • 运行此时的程序,会弹出浏览器界面3秒钟。此时,并没有打开任何的页面
    在这里插入图片描述

  • 继续编写代码,并点击运行,打开一个百度页面,如下图。
    在这里插入图片描述

  • 再获取百度首页的源代码,如下图。
    在这里插入图片描述

  • 上面完整代码如下,最后关闭。

    # -*- coding:utf-8 -*-
    # pip install selenium -i 源镜像from selenium import webdriver
    import time # 打开谷歌浏览器
    driver = webdriver.Chrome()# 使用谷歌浏览器打开百度
    url = 'https://www.baidu.com'
    driver.get(url)# 设置打开的浏览器——窗口最大化
    driver.maximize_window()# 获取源代码(注意后面没括号)
    response = driver.page_source
    print(response)time.sleep(5)driver.close()
    

3、页面元素定位

(1)通过ID值定位

  • driver.find_element(By.ID,“kw”)

在这里插入图片描述

(2)通过CLASS值定位

  • driver.find_element(By.CLASS_NAME,“s_ipt”)

(3)通过NAME定位

  • driver.find_element(By.NAME,“wd”)

(4)通过TAG_NAME定位

  • driver.find_element(By.TAG_NAME,“div”)

  • 说明:HTML本质就是由不同的tag(标签)组成,而每个tag都是指同一个类,所以tag定位效率低,一般不建议使用

(5)通过XPATH语法定位

  • driver.find_element(By.XPATH,“//*[@id=“su”]”).click()

  • 通过复制得到“//*[@id=“su”]”,然后粘贴到上面代码中
    在这里插入图片描述
  • 代码如下:
    # -*- coding:utf-8 -*-import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By# 打开谷歌浏览器
    driver = webdriver.Chrome()# 使用谷歌浏览器打开百度
    driver.get('https://www.baidu.com')# 通过CLASS值定位,此处的class值是“s_ipt”
    driver.find_element(By.CLASS_NAME,'s_ipt').send_keys("大家好")# 通过XPATH语法定位“百度一下”按钮,并点击
    driver.find_element(By.XPATH,'//*[@id="su"]').click()time.sleep(5)
    
    • 运行后,自动实现搜索,效果如下。
      在这里插入图片描述

(6)通过CSS语法定位

  • driver.find_element(By.CSS_SELECTOR,“#su”).click()

  • 上面代码也能实现这样的效果

(7)通过文本定位–精确定位

  • driver.find_element(By.LINKE_TEXT,“在希望的田野上”)

(8)通过部分文本定位–模糊定位

  • driver.find_element(By.PRATIAL_LINK_TEXT,“希望”)

4、操作表单元素及其他操作

(1)输入内容、清除内容、鼠标单击

# 输入内容
send_keys('python')
# 清除输入框内容
clear()
# 鼠标单击
click()

(2)行为链

  • 在用selenium操作页面时,有时要分为很多步骤,那么这个时候可以用鼠标行为链类ActionChains来完成。
    # -*- coding:utf-8 -*-import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.action_chains import ActionChains# 打开谷歌浏览器
    driver = webdriver.Chrome()# 使用谷歌浏览器打开百度
    driver.get('https://www.baidu.com')# 定位搜索框
    inputtag = driver.find_element(By.ID,"kw")# 百度一下按钮
    submittag = driver.find_element(By.ID,"su")# 建立行为链
    actions = ActionChains(driver)# 给搜索框发送数据
    actions.move_to_element(inputtag)
    actions.send_keys_to_element(inputtag,'python')# 选中提交按钮并提交
    actions.move_to_element(submittag)
    actions.click(submittag)# 统一执行
    actions.perform()
    time.sleep(5)
    

(3)动作链

  • ActionChains方法列表
    click(on_element=None)——单击鼠标左键
    click_and_hold(on_element=None) ——点击鼠标左键,不松开
    context_click(on_element=None) ——点击鼠标右键
    double_click(on_element=None)——双击鼠标左键
    drag_and_drop(source, tanget)——拖拽到某个元素然后松开
    key_down(value, element=None)——按下某个键盘上的键
    key_up(value, element=None)——松开某个键
    move_to_element(to_element)——鼠标移动到某个元素
    perform() ——执行链中的所有动作
    release(on_element=None) ——在某个元素位界松开鼠标左键
    send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
    send_keys_to_element(element,*keys_to_send)——发送某个键到指定元素
    
  • 举例说明鼠标移动。
    # -*- coding:utf-8 -*-import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()
    driver.get('http://sahitest.com/demo/mouseover.htm')# 定位到显示文本框,还是用xpath方法
    display = driver.find_element(By.XPATH,'//input[@value="Write on hover"]')
    # 定位到隐藏文本框
    hide = driver.find_element(By.XPATH,'//input[@value="Blank on hover"]')action = ActionChains(driver)
    time.sleep(3)action.move_to_element(display).perform()
    time.sleep(3)action.move_to_element(hide).perform()
    time.sleep(3)
  • 效果如图。
    在这里插入图片描述
  • 举例说明鼠标拖拽的几种情况。
    # -*- coding:utf-8 -*-import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()
    driver.get("http://sahitest.com/demo/dragDropMooTools.htm")dragger = driver.find_element(By.XPATH, '//div[@id="dragger"]')item1 = driver.find_element(By.XPATH,'//html/body/div[2]')
    item2 = driver.find_element(By.XPATH,'//html/body/div[3]')
    item3 = driver.find_element(By.XPATH,'//html/body/div[4]')
    item4 = driver.find_element(By.XPATH,'//html/body/div[5]')action = ActionChains(driver)# 下面是直接拖拽的动作
    action.drag_and_drop(dragger, item1).perform()
    time.sleep(3)
    # 下面是先点击目标不松开,再定位item2位置松开
    action.click_and_hold(dragger).release(item2).perform()
    time.sleep(3)
    # 下面是先点击目标不松开,然后滑动到item3位置松开
    action.click_and_hold(dragger).move_to_element(item3).release().perform()
    time.sleep(3)
    action.drag_and_drop(dragger, item4).perform()
    time.sleep(3)
    driver.quit()
    
  • 结果就是每过1秒,拖拽一个蓝色的方框,到目的地。如图。
    在这里插入图片描述

(4)点击操作(继续学习行为链)

  • 示例网站:http://sahitest.com/demo/clicks.htm
    # -*- coding:utf-8 -*-import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()
    driver.get("http://sahitest.com/demo/clicks.htm")# 单击按钮
    click_one = driver.find_element(By.XPATH, '//input[@value="click me"]')# 双击按钮
    click_dbl = driver.find_element(By.XPATH, '//input[@value="dbl click me"]')# 右击按钮
    click_rgt = driver.find_element(By.XPATH, '//input[@value="right click me"]')# 定义下面的一个行为链,完成单击,双击,右击
    ActionChains(driver).click(click_one).double_click(click_dbl).context_click(click_rgt).perform()
    time.sleep(5) 
    
  • 效果如图。
    在这里插入图片描述
  • 注意:鼠标滑动、拖拽是动作链,一连串的点击是行为链。

5、行为链中的等待(Explicit Waits)

在这里插入图片描述

  • 示例代码。
    # -*- coding:utf-8 -*-
    import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.common import TimeoutException
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
    driver.get("https://www.baidu.com")# 定义一个递归函数
    def search():try:input = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "kw")))input.send_keys("大家好")time.sleep(10)except TimeoutException:# 重复进入函数尝试完成return search()        if __name__ =='__main__':search()
    

相关文章:

爬虫笔记之——selenium安装与使用(1)

爬虫笔记之——selenium安装与使用(1)一、安装环境1、下载Chrome浏览器驱动(1)查看Chrome版本(2)下载相匹配的Chrome驱动程序地址:https://chromedriver.storage.googleapis.com/index.html2、学…...

STC15单片机软串口的使用

STC15软串口的使用📖在没有使用定时器资源的情况下,根据波特率位传输时间,利用STC-ISP工具自动计算出位延时函数。 ✨在官方所提供的库函数中位传输时间函数,仅适用于使用波特率为:9600的串口数据传输: void BitTime(…...

Ansible的脚本------playbook剧本

一、剧本的前置知识点1、主机清单ansible默认的主机清单是/etc/ansible/hosts文件主机清单可以手动设置,也可以通过Dynamic Inventory动态生成一般主机名使用FQDNvi /etc/ansible/hosts [webserver] #使用方括号设置组名 www1.example.org #定…...

实验5-计算中值及分治技术

目录 1.寻找中位数(利用快速排序来寻找中位数) 2.分治方法求数组的和 3.合并排序...

dbeaver从excel导入数据笔记

场景 有excel的数据,需要做到数据库里。 方案一: 开发代码来实现。缺点是需要开发成本。 方案二: 数据库导入工具导入。不用开发,相对快速一些。 这里说下数据库工具导入。 操作过程 1、拿到excel数据文件,根据标题…...

PyTorch学习笔记:nn.MarginRankingLoss——排序损失

PyTorch学习笔记:nn.MarginRankingLoss——排序损失 torch.nn.MarginRankingLoss(margin0.0, size_averageNone, reduceNone, reductionmean)功能:创建一个排序损失函数,用于衡量输入x1x_1x1​与x2x_2x2​之间的排序损失(Ranking Loss)&…...

【JavaScript】34_Date对象 ,日期的格式化

8、Date Date 在JS中所有的和时间相关的数据都由Date对象来表示 对象的方法: getFullYear() 获取4位年份 getMonth() 返当前日期的月份(0-11) getDate() 返回当前是几日 getDay() 返回当前日期是周几(0-6) 0表示周日…...

计算机视觉 对比学习13篇经典论文、解读、代码

为了快速对 机器视觉中的对比学习有一个快速了解,或者后续复习,此处收录了 13篇经典论文、一些讲解地较好的博客和相应的Github代码,用不同颜色标记。 ​ 对比学习 13篇经典论文 论文代码和博客http://​www.webhub123.com/#/home/detail?p…...

MySQL 选择数据库

在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库。 在 MySQL 中就有很多系统自带的数据库,那么在操作数据库之前就必须要确定是哪一个数据库。 在 MySQL 中,USE 语句用来完成一个数据库到…...

雅思经验(9)

写作:关于趋势的上升和下降在小作文中,真的是非常常见的,所以还是要积累一下。下面给出了很多词,但是在雅思写作中并不是词越丰富,分数就越高的。雅思写作强调的是准确性:在合适的地方用合适的词和句法。不…...

java面试题(二十)中间件redis

1.1 Redis可以用来做什么? 参考答案 Redis最常用来做缓存,是实现分布式缓存的首先中间件;Redis可以作为数据库,实现诸如点赞、关注、排行等对性能要求极高的互联网需求;Redis可以作为计算工具,能用很小的…...

JavaWEB必知必会-Servlet

目录 Servlet简介Servlet快速入门Servlet配置详解ServletContext 1 Servlet简介 Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码&a…...

oralce查找返回不同的值,寻找不同的表(原创)

查找返回不同的值,寻找不同的表 select case a_id when 1 then (select b_id|| ||b_desc from b where b.b_ida.a_id) else (select e_id || ||e_desc from e where e.e_ida.a_id) end from a; 以上方法的缺陷是单表,判断。今天来了个挑战&#…...

Python-第四天 Python循环语句

Python-第四天 Python循环语句一、while循环1.while循环的基础语法2.while循环的基础案例3.while循环的嵌套应用4.while循环的嵌套案例二、for循环1.for循环的基础语法1.1基础语法1.2 range语句2.for循环的嵌套应用三、循环中断 : break和continue1.continue2.break四、 综合案…...

spring中bean的生命周期(简单5步)

目录 一、概念 1.生命是bean的生命周期? 2.知道bean生命周期的意义? 3.bean的生命周期按照粗略的五步 二、例子讲解 一、概念 1.生命是bean的生命周期? 答:spring其实就是管理bean对象的工厂,它负责对象的创建&…...

10 个最难理解的 Python 概念

文章目录技术提升面向对象编程 (OOP)装饰器生成器多线程异常处理正则表达式异步/等待函数式编程元编程网络编程大家好,与其他编程语言相比,Python 是一门相对简单的编程语言,如果你想真正学透这门语言,其实可能并不容易。 今天我…...

【linux】线程概念

概念 什么是线程 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列” 一切进程至少都有一个执行线程,线程在进程内部运行,本质是在进程地址空间内运行 在Linux系统中&a…...

Leg转Goh引擎和架设单机+配置登陆器教程

教程准备1、Leg版本一个2、Goh引擎一套3、电脑一台(最好联网)前言:BLUE/LEGS/Gob/Goh/九龍、4K、AspM2第一步:更换引擎1、把版本自带的LEG引擎换成Goh引擎2、删除服务端里面的exe、dll文件(也可以直接更新)3、清理登录和游戏网关里面的配置文件4、更新引…...

idea整合svn

idea整合svn svn下载 链接:https://pan.baidu.com/s/1yS3R3lEE8lm9c9Ap-ndDKg 提取码:65ur 基础步骤 IDED中配置SVN没有svn.exe解决办法 以下是两种解决方案 需要卸载原 svn(不推荐) 参考网址: https://blog.csdn.…...

字节青训前端笔记 | 数据可视化基础

本课程主要内容可以分为三个章节: 数据可视化的基本概念可视化设计的基本原则面向前端的可视化工具 本手册可以作为学生学习数据可视化的“学习指南”,按照手册所列内容,结合扩展资料进行系统的学习和实践。本课程没有讨论更为前沿的可视化…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...

第八部分:阶段项目 6:构建 React 前端应用

现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

数据库——redis

一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...