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

news2024/10/3 6:30:58

爬虫笔记之——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 ActionChains
    
    driver = 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 ActionChains
    
    driver = 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 ActionChains
    
    driver = 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 EC
    
    driver = 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()
    

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

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

相关文章

vue83-103

vue全局路由拦截路由懒加载路由原理swiper组件选项卡封装电影导航组件正在热映获取数据渲染axios封装详情渲染详情轮播详情Header-组件影院组件渲染全局路由拦截 即使路径对,也会被拦截 router.beforeEach((to,from, next) > { console.log(to) if(…

雅思经验(9)

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

【数据库】 数据库中表的基本操作

目录 表的基本操作 一, 创建表 1,单行命令创建表: 2,分行命令创建表: 二, 数据类型 1,文本类型: 2,数值类型: 3,日期/时间类型&#xff1a…

软件测试金融测试岗位,本人亲面

网上银行转账是怎么测的,设计一下测试用例。 回答思路: 宏观上可以从质量模型(万能公式)来考虑,重点需要测试转账的功能、性能与安全性。设计测试用例可以使用场景法为主,先列出转账的基本流和备选流。然…

一个图片对比的小工具【小工具制作】

目录逐一击破确定架构图片上传自适应生成对比界面切换对比模式打分功能审核进行提交项目负责人查看问题并改正总结前言:这是一个实际的需求,因为需要设计师给的原图和同学们制作出来的项目成品图进行比对打分,所以就有了一个图片对比的小工具…

用 Python 调用 GPT-3 API

用 Python 调用 GPT-3 API GPT-3 是去年由 Open AI 推出的语言机器学习模型。它因其能够写作、写歌、写诗,甚至写代码而获得了广泛的媒体关注!该工具免费使用,只需要注册一个电子邮件即可。 GPT-3 是一种叫 transformer 的机器学习模型。具体…

C语言(输入printf()函数)

printf()的细节操作很多,对于现阶段的朋友来说,主要还是以理解为主。因为很多的确很难用到。 目录 一.转换说明(占位符) 二.printf()转换说明修饰符 1.数字 2.%数字1.数字2 3.整型转换字符补充 4.标记 -符号 符号 空格符…

JavaWEB必知必会-Servlet

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

电脑里的连接速度双工模式是什么?怎么设置

双工模式包括全双工、半双工模式。1.半双工1、半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。所谓半双工就是指一个时间段内只有一个动作发生。早期的对…

十二、Linux文件 - fseek函数讲解

目录 一、fseek函数讲解 二、fseek函数实战 一、fseek函数讲解 重定向文件内部的指针 注:光标 ---- 文件内部的指针 函数原型: int fseek(FILE *stream,long offset,int framewhere) 参数: stream:文件指针offset:…

golang由浅入深

简介 Go语言(Golang)是由Google公司的Robert Griesemer、Rob Pike、Ken Thompson三位工程师开发的一种静态强类型、编译型、并发型、快速运行的编程语言。 Go语言诞生于2007年,旨在创造一种具有现代特性的编程语言,可以替代C和Jav…

DS期末复习卷(二)

选择题 1.下面关于线性表的叙述错误的是( D )。 (A) 线性表采用顺序存储必须占用一片连续的存储空间 (B) 线性表采用链式存储不必占用一片连续的存储空间 © 线性表采用链式存储便于插入和删除操作的实现 (D) 线性表采用顺序存储便于插…

2023春招100道软件测试高频面试题

给大家整理了2023春招的100道软件测试高频面试题,篇幅较长,所以只放出了题目,答案在文末,自行获取哦! 1.项目测试流程你是怎么开展的? 2.接口测试用例的编写要点有哪些? 3.APP测试和Web测试有…

ubuntu20.04安装docker与docker-compose

安装docker 查看系统发行版本 cat /proc/version1、更新apt包 sudo apt-get update2、安装必备的软件包以允许apt通过 HTTPS 使用存储库(repository): sudo apt-get install ca-certificates curl gnupg lsb-release3、添加Docker官方版本…

C语言学习笔记(一):了解C语言

什么是C语言 C语言是一种高级编程语言,最早由丹尼斯里奇在1972年开发。它是一种通用编程语言,提供了高级编程语言的方便和易用性,同时又有较低级别的编程语言的灵活性和效率。C语言在许多操作系统、编译器和应用程序开发中广泛使用&#xff…

使用Naticat同步数据库结构

现象: 开发环境对数据库结构进行了修改,如何同步到测试环境 例: 开发环境(dev):my_test_data 测试环境(test):my_test_data_1 方法: 使用Naticat同步两个数据库结构 选中…

PLC是什么?PLC相关知识小科普

欢迎各位来到东用知识小课堂1.PLC是什么:●PLC就是可编程控制器,它应用于工业环境,必须具有很强的抗干扰能力、广泛的适应能力和应用范围。●PLC是“数字运算操作的电子系统”,也是一种计算机,它是“专为在工业环境下应…

EdgeX Foundry (一)安装和部署

系统版本uname -rdocker 版本docker --versiondocker-compose版本安装参考链接:https://blog.csdn.net/chezong/article/details/128917107拉取edgex foundry 配置文件 docker-compose.yml; curl https://raw.githubusercontent.com/edgexfoundry/edgex-compose/ire…

【C语言学习笔记】:通讯录管理系统

系统中需要实现的功能如下: ✿ 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 ✿ 显示联系人:显示通讯录中所有的联系人信息 ✿ 删除联系人:按…

冒泡排序详解

冒泡排序是初学C语言的噩梦,也是数据结构中排序的重要组成部分,本章内容我们一起探讨冒泡排序,从理论到代码实现,一步步深入了解冒泡排序。排序算法作为较简单的算法。它重复地走访过要排序的数列,一次比较两个元素&am…