爬虫 selenium语法 (八)

目录

一、为什么使用selenium

二、selenium语法——元素定位

1.根据 id 找到对象

2.根据标签属性的属性值找到对象

3.根据Xpath语句获取对象

4.根据标签名获取对象

5.使用bs语法获取对象

6.通过链接文本获取对象

三、selenium语法——访问元素信息

1.获取属性的属性值

2.获取标签名

3.获取元素文本

四、selenium 交互

五、无界面操作

参考


1.什么是selenium?

  • selenium是一个用于web应用程序测试的工具。
  • selenium测试直接运行在浏览器中,就像真正的用户一样。
  • 支持通过各种driver(FirefoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驱动真实浏览器完成测试。
  • selenium也是支持无界面浏览器操作的。

2.为什么使用selenium?

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

3.如何安装selenium?

        安装selenium及谷歌驱动

4.selenium的使用步骤?

  • 导入:from selenium import webdriver
  • 创建谷歌浏览器操作对象:

        path = 谷歌浏览器驱动文件路径

        browser = webdriver.Chrome(path)

  • 访问网址

        url = 要访问的网址

        browser.get(url)

selenium 的元素定位

      元素定位:自动化要做的就是模拟鼠标和键盘来操作这些元素,如点击、输入等等。操作这些元素前首先要找到它们,webdriver提供很多定位元素的方法。

       方法

         (1)find_element(By.ID, 'id 名')

                eg:button = browser.find_element(By.ID, ‘su’)

         (2)find_element(By.NAME, 'name 名')

                eg:name = browser.find(By.NAME,‘wd’)

         (3)find_elements(By.XPATH, 'Xpath语法')

                eg:xpath = browser.find_elements(By.XPATH, "//input[@id-"su"]")

         (4)find_elements(By.TAG_NAME,' Tag name ')

                eg:names = browser.find_elements (By.TAG_NAME, "input")

         (5)find_elements(By.CSS_SELECTLOR, ' bs4语法 ')

                eg:my_input = browser.find_elements(By.CSS_SELECTLOR, "#kw")[0]

        (6)find_elements(By.LINK_TEXT, ' 链接文本')

                eg:browser.find_elements(By.LINK_TEXT,"新闻")

访问元素信息

       获取元素属性

              .get_attribute(‘class’)

       获取元素文本

              .text

       获取id

              .id

       获取标签名

              .tag_name

selenium 交互

(1)点击:click()

(2)输入:send_keys()

(3)后退操作:browser.back()

(4)前进操作:browser.forward()

(5)模拟js滚动:

        js = ‘document.documentElement.scrollTop=100000’

        browser.execute_script(js) 执行js 代码

(6)获取网页代码:page_source

(7)退出:browser.quit()

一、为什么使用selenium

import urlliburl = 'http://www.jd.com'response = urllib.request.urlopen(url)content = response.read().decode()
print(content)

我们模拟浏览器获取网页内容,然后搜索获取的内容,是否有 “J_seckill” 这个元素

可以看到,显示没有该元素。

原因是验证你的浏览器不是真实的浏览器,所以没有返回数据。

但是!!! 用selenium就可以解决这个问题。

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

二、selenium语法——元素定位

1.根据 id 找到对象

# 根据 id 找到对象
button = browser.find_element(By.ID, 'su')
print(button)

2.根据标签属性的属性值找到对象

# 根据标签属性的属性值找到对象
button = browser.find_element(By.NAME,'wd')
print(button)

3.根据Xpath语句获取对象

# 根据Xpath语句获取对象
# element表示只找一个元素,elements表示找到所有元素并返回列表
button = browser.find_element(By.XPATH,'//input[@id="su"]')
print(button)

4.根据标签名获取对象

# 根据标签名获取对象
button = browser.find_elements(By.TAG_NAME,'input')
print(button)

5.使用bs语法获取对象

# 使用bs语法获取对象
button = browser.find_elements(By.CSS_SELECTOR,'#su')
print(button)

6.通过链接文本获取对象

# 通过链接文本获取对象
button = browser.find_elements(By.LINK_TEXT,'新闻')
print(button)

完整代码: 

from selenium import webdriver
from selenium.webdriver.common.by import By# 创建浏览器对象
browser = webdriver.Chrome()# 访问网站
url = 'https://www.baidu.com'
browser.get(url)# 元素定位
# # 根据 id 找到对象
# button = browser.find_element(By.ID, 'su')
# print(button)# # 根据标签属性的属性值找到对象
# button = browser.find_element(By.NAME,'wd')
# print(button)# # 根据Xpath语句获取对象
# button = browser.find_element(By.XPATH,'//input[@id="su"]')
# print(button)# # 根据标签名获取对象
# button = browser.find_elements(By.TAG_NAME,'input')# # 使用bs语法获取对象
# button = browser.find_elements(By.CSS_SELECTOR,'#su')# 通过链接文本获取对象
button = browser.find_elements(By.LINK_TEXT,'新闻')
print(button)

三、selenium语法——访问元素信息

1.获取属性的属性值

# 获取属性值
input = browser.find_element(By.ID, 'su')
print(input.get_attribute('class'))

2.获取标签名

print(input.tag_name)

3.获取元素文本

input = browser.find_element(By.LINK_TEXT,'新闻')
print(input.text)

四、selenium 交互

使用selenium完成以下操作

在百度输入框中输入“周杰伦”,点击“百度一下”,滑到最底部,点击“下一页”,然后后退一步,再前进一步,最后关闭浏览器。

from selenium import  webdriver
from selenium.webdriver.common.by import By
import time# 创建浏览器对象
browser = webdriver.Chrome()url = 'https://www.baidu.com'
browser.get(url)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[contains(text(),"下一页")]')# 点击下一页
next.click()time.sleep(2)# 回到上一页
browser.back()time.sleep(2)# 回到刚才的位置
browser.forward()time.sleep(2)# 退出
browser.quit()

五、无界面操作

        直接打开浏览器会使操作效率变慢,Chrome headless可以进行无界面操作,极大提高的了工作效率。

from selenium import webdriverdef headless_browser():# 创建浏览器对象之前,创建options功能对象options = webdriver.ChromeOptions()# 添加无界面功能参数options.add_argument("--headless")# 构造浏览器对象,打开浏览器browser = webdriver.Chrome(options=options)return browserurl = 'https://ww.baidu.com'
browser = headless_browser()
browser.get(url)# 屏幕快照
browser.save_screenshot('_082_baidu.png')

参考

尚硅谷Python爬虫教程小白零基础速通(含python基础+爬虫案例)

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

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

相关文章

有爱的冬天不再冷——壹基金儿童温暖包抵达富平

12月6日,富平县帮帮乐公益协会组织志愿者在协会楼下分装了由爱心企业、个人捐赠的144个壹基金儿童温暖包,争取在下周寒流来临前送到困境儿童手中,温暖他们的整个冬天。 壹基金温暖包项目是针对6—12岁困境儿童、留守儿童设计的暖冬应急生活物…

MySQL数据库sql语句操作

一、数据库模型 关系型数据库是一种以表格形式组织和存储数据的数据库。它使用关系模型,其中数据被组织为多个表格,每个表格包含了多个行和列。每个表格的列描述了数据的属性,而行包含了实际的数据记录。 非关系型数据库,也称为…

使用命令行创建vue3项目等待时间长解决方案

问题描述 今天在使用命令行创建vue3项目的时候,发现命令行窗口卡了很久,明明已经更换了安装包的源,并且检查环境变量配置正确的情况下,为什么还要等待那么久呢? 解决方案 使用命令再次检查更换淘宝的源是否配置成功…

玩转系统|利用HestiaCP自建NS解析及邮局并利用MailGun进行发信

前述 HestiaCP是一个VestaCP分叉来的产物,而同样作为VestaCP分叉来的myVesta也具有类似的功能。VestaCP本身作为一个社区的产区,其仅仅有一个商业插件需要每月付费5USD进行使用,因此为了达到完全开放使用的目的,这里选择使用Hest…

Linux uuto命令教程:如何传送文件到远端的UUCP主机(附案例详解和注意事项)

Linux uuto命令介绍 Linux uuto命令是一个脚本文件,它实际上会执行uucp命令,用来将文件传送到远端的UUCP主机。在完成工作后,它会以邮件的形式通知远端主机上的用户。 Linux uuto命令适用的Linux版本 uuto命令在大多数Linux发行版中都可以…

小电流MOSFET 选型分析数据,可应用于电子烟,电动工具,智能穿戴等产品上

小电流双N,D-N通道MOSFET,电压60V-100V左右 电流300mA-500MA,采用封装形式多样。具有低导通电阻,可快速切换速度,易于设计的驱动电路也易于并联,ESD保护,低电压驱动使该器件非常适合便携式设备…

通俗易懂的案例+代码解释AOP 切面编程

目录 1. 理解AOP2 Before2.1 controller层2.2 service层2.3 自定义注解2.4 切面 advice 3 After4 Around spring的三大核心:IOC控制反转、DI依赖注入、AOP面向切面编程 刚开始接触springboot项目,前两个使用的多,亲自使用AOP的机会并不多&…

【学习笔记】python仅拷贝list的值,引出浅拷贝与深拷贝

一、python 仅拷贝list的值(来源于gpt) 在 Python 中,可以使用切片或 copy() 方法来仅拷贝列表的值。 1、使用切片 a [1, 2, 3, 4, 5] b a[:] # 通过切片来拷贝 a 的值 在上面的代码中,我们使用切片来拷贝列表 a 的值&#xff…

长城之上的无人机:文化遗产的守护者

长城之上的无人机:文化遗产的守护者 在八达岭长城景区,两架无人机分别部署在了长城的南、北楼两点。根据当前的保护焦点和需求,制定了5条无人机综合巡查航线,以确保长城景区的所有开放区域都能得到有效监管。每天,无人…

一个简单循环队列的实现

一个简单循环队列的实现 在线验证链接:https://onlinegdb.com/gpGlm4BV0 /******************************************************************************* Brief A simple circle fifo* Data 23/12/07* Author zxk* File name z_fifo.c *********************…

【LeetCode】2703. 返回传递的参数的长度

返回传递的参数的长度 题目题解 题目 请你编写一个函数 argumentsLength,返回传递给该函数的参数数量。 示例 1: 输入:args [5] 输出:1 解释: argumentsLength(5); // 1只传递了一个值给函数,因此它应返…

zabbix、netdata和glances,做最简单的系统资源监控

软件需要显示服务器的资源信息(CPU、内存、网络、硬盘等),但是软件是在Docker容器中运行。 目前方案 通过ssh在主机上远程运行ps、free等指令,获取相应的信息。这种方案需要代码配置主机的IP,以及用户名和密码&#…

干爆ChatGPT,谷歌发布新大模型:Gemini

我是卢松松,点点上面的头像,欢迎关注我哦! 谷歌昨天又发布了一个新的大模型,叫Gemini(双子座时代)。打开Google AI 就能看到。 据说非常强,然后是一大堆夸奖,大概是本月中旬的时候正式推出。标题明晃晃写…

gcc安全特性之变量初始化检查

GCC的变量初始化检查特性旨在减少未初始化变量对程序行为和安全性的潜在影响。本文简要介绍该特性原理和使用方法。 1. 功能 变量初始化检查特性通过在编译过程中静态分析源代码来检测未初始化的变量,并在发现未初始化变量时发出警告。这有助于开发人员在编译时发…

Java UDP 多人聊天室简易版

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

GO设计模式——13、享元模式(结构型)

目录 享元模式&#xff08;Flyweight Pattern&#xff09; 享元模式的核心角色&#xff1a; 优缺点 使用场景 注意事项 代码实现 享元模式&#xff08;Flyweight Pattern&#xff09; 享元模式&#xff08;Flyweight Pattern&#xff09;它通过共享对象来减少内存使用和提…

Rask AI引领革新,推出多扬声器口型同步技术,打造本地化内容新纪元

“ Rask AI是一个先进的AI驱动视频和音频本地化工具&#xff0c;旨在帮助内容创作者和公司快速、高效地将他们的视频转换成60多种语言。通过不断创新和改进产品功能&#xff0c;Rask AI正塑造着未来媒体产业的发展趋势。 ” 在多语种内容创作的新时代&#xff0c;Rask AI不断突…

Day53力扣打卡

打卡记录 重新规划路线&#xff08;dfs&#xff09; 链接 class Solution:def dfs(self, x: int, parent: int, e: List[List[List[int]]]) -> int:res 0for edge in e[x]:if edge[0] parent:continueres edge[1] self.dfs(edge[0], x, e)return resdef minReorder(se…

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(三)——serverless数据分析

3 serverless数据分析 大纲 3 serverless数据分析3.1 创建Lambda3.2 创建API Gateway3.3 结果3.4 总结 3.1 创建Lambda 在Lambda中&#xff0c;我们将使用python3作为代码语言。 步骤图例1、入口2、创建&#xff08;我们选择使用python3.7&#xff09;3、IAM权限&#xff08;…

TDengine统计数据库占用空间

TDengine 目前只提供统计超级表占用空间的工具&#xff1a; 2.x 版本使用 select _block_dist() from STABLE_NAME3.x 版本使用 show table distributed STABLE_NAME 但以上的统计结果并不准确。 如果想统计 DB 使用的空间&#xff0c;只能通过统计所属 vnode 占用空间进行统…