Python网络爬虫之Selenium详解

news/2024/7/19 11:32:17 标签: python, 爬虫, selenium

1、什么是selenium?

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

2、为什么使用selenium?

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

3、如何安装selenium?

需要下载驱动,咱们以谷歌浏览器为例下载谷歌驱动

①、操作谷歌浏览器驱动下载地址

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

注意:驱动的版本需要和谷歌浏览器版本一致

查看谷歌浏览器版本:在谷歌浏览器中输入 ”chrome://version/“

②、安装

pip install selenium

4、驱动的使用方式

4.1、PATH 环境变量

将下载后的驱动放到环境变量中,在命令行输入  ”chromedriver“ 如果出现一下界面说明安装成功

安装成功后代码中无需指定驱动位置:

python">from selenium import webdriver

driver = webdriver.Chrome

url = "https://www.baidu.com"

driver.get(url)

4.2、在编写代码时指定驱动位置

python">from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# 指定驱动位置
service = Service(executable_path="/path/to/chromedriver")
driver = webdriver.Chrome(service=service)

 

5、Python操作selenium实例

实例环境

os:Mac

谷歌版本:111.0.5563.110

驱动版本:111.0.5563.64

selenium:4.8.3

5.1、基础

代码:注意执行完会一闪而过,是因为我们后续没有代码,自动测试结束

python"># 导入包
from selenium import webdriver

# 创建谷歌浏览器驱动
driver = webdriver.Chrome()

# 定义要浏览的网页url
url = "https://www.baidu.com"

# 在浏览器中执行操作
driver.get(url)

# 导入time 包 让线程睡眠4秒,可以更好的看到效果
import time 
time.sleep(4)

 

5.2、获取浏览器相关信息

python">
# 打开网站
driver.get(url)

# 获取当前浏览器标题
title = driver.title

print(title)

# 获取当前浏览的url
cur_url = driver.current_url

print(cur_url)

# 后退:按下浏览器的后退按钮
driver.back()

# 前进:按下浏览器的前进键
driver.forward()

# 刷新:刷新当前页面
driver.refresh()

5.3、查找元素

先看下百度首页输入框和百度一下按钮的ID

 知道了这两个输入框的ID后,我们的需求为:自动在输入框中输入”ChatGPT“,并且自动点击百度一下进行搜索,代码如下:

python"># 导入包
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# 创建谷歌浏览器驱动
driver = webdriver.Chrome()

# 定义要浏览的网页url
url = "https://www.baidu.com"

# 打开网站
driver.get(url)

# 获取输入框
kw = driver.find_element(By.ID, "kw")
# 将成龙自动输入到输入框中
kw.send_keys("ChatGPT")

# 获取百度一下按钮
su = driver.find_element(By.ID, "su")
# 自动点击百度一下按钮
su.click()

# 睡眠4秒看效果
time.sleep(4)

 具体效果大家就拷贝代码自行查看了。

代码中有用到通过ID获取input元素,然后通过send_keys 自动填充输入框,最后通过click自动触发点击事件。

定位元素所有策略如下:注意记得导入包

策略描述
By.ID通过HTML元素ID获取元素
By.NAME通过HTML元素属性name值获取元素
By.TAG_NAME通过HTML元素名称获取元素
By.CLASS_NAME通过元素class属性值获取元素        
By.CSS_SELECTOR通过css选择器获取元素
By.XPATH通过Xpath语法获取元素
By.LINK_TEXT通过连接文本值获取元素
By.PARTIAL_LINK_TEXT通过模糊查询文本值获取元素

我们通过一下代码片段实现以上每种策略实例演示

<ol id="vegetables">
 <li class="potatoes">…
 <li class="onions">…
 <li class="tomatoes"><span>Tomato is a Vegetable</span>…
</ol>
<ul id="fruits">
  <li class="bananas">…
  <li class="apples">…
  <li class="tomatoes"><span>Tomato is a Fruit</span>…
</ul>
<input type="text" name="wd"/>
<input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn">
<a href="https://blog.csdn.net/u011837804">个人中心</p>

代码实例: 

python">fruits = driver.find_element(By.ID, "fruits")
fruit = fruits.find_element(By.CLASS_NAME,"tomatoes")
fruit = driver.find_element(By.CSS_SELECTOR,"#fruits .tomatoes")
plants = driver.find_elements(By.TAG_NAME, "li")
wd = driver.find_element(By.NAME, "wd")
wd = driver.find_element(By.XPATH, "//input[@name='wd']")
a = driver.find_element(By.LINK_TEXT, "个人中心")
a = driver.find_element(By.PARTIAL_LINK_TEXT, "个人")

5.4、操作元素

直接上代码:

python">
# 获取输入框
kw = driver.find_element(By.ID, "kw")

# 填充输入框
kw.send_keys("成龙")

# 清除输入框
kw.clear()

5.5、获取元素信息

python"># 获取元素是否显示 返回 布尔值
is_email_visible = driver.find_element(By.NAME, "email_input").is_displayed()

# 获取元素是否启用 返回 布尔值
value = driver.find_element(By.NAME, 'btnK').is_enabled()


# 针对checkbox返回是否被选中
value = driver.find_element(By.CSS_SELECTOR, "input[type='checkbox']:first-of-type").is_selected()

# 获取元素标签名称
attr = driver.find_element(By.CSS_SELECTOR, "h1").tag_name

# 获取元素的位置信息
	#元素左上角的X轴位置
	#元素左上角的y轴位置
	#元素的高度
	#元素的宽度
res = driver.find_element(By.CSS_SELECTOR, "h1").rect


# 获取元素CSS值
cssValue = driver.find_element(By.LINK_TEXT, "More information...").value_of_css_property('color')

# 获取文本内容
text = driver.find_element(By.CSS_SELECTOR, "h1").text

# 获取元素属性值
email_txt = driver.find_element(By.NAME, "email_input")
value_info = email_txt.get_attribute("value")



http://www.niftyadmin.cn/n/178845.html

相关文章

计算机网络管理 ARP 地址解析协议 ARP的基础原理 Wireshark ARP 报文分析 ARP的通信过程

⬜⬜⬜ ---&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; (*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;---⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &#x1f381;欢迎各位→…

Python数据分析案例26——时间序列的多阶段预测(GRU+RVM)

本篇案例适合理工科硕士。 承接上两篇硬核案例&#xff1a;Python数据分析案例25——海上风力发电预测&#xff08;多变量循环神经网络&#xff09; 之前都是直接预测&#xff0c;即用前面的数据——之前的X和之前的y直接预测未来的y。 本章介绍一个多阶段的预测方法&#xff…

二叉搜索树:红黑树的原理和实现

目录前言1. 红黑树的概念2. 红黑树的性质3. 红黑树的定义4. 红黑树的插入操作5. 红黑树的验证6. 红黑树和AVL树的比较7. 红黑树的应用前言 &#x1f4ad;上文我们在遇到问题&#xff1a;二叉搜索树退化到单支导致效率和性能降低时&#xff0c;利用了AVL树解决。但是由于AVL树是…

JavaScript核心高级内容复习3

文章目录对象的创建模式继承模式详细介绍Object构造函数模式对象字面量工厂模式自定义构造函数模式构造函数原型的组合模式继承模式--原型链继承继承模式--借用构造函数继承继承模式--组合继承对象的创建模式 Object构造函数模式var obj {}; obj.name Tom obj.setName func…

Java初阶(数组)

文章目录一、数组的基础概念&#xff08;是什么、定义、使用&#xff09;二、数组进阶概念2.2 JVM的内部存储2.3 数组在内存中的存储2.4 数组传参 返回值2.5 数组的应用场景2.5.1 数组的查找2.5.2 toString 的自我实现2.5.3 数组排序2.5.4 数组拷贝2.6 二维数组一、数组的基础…

正则表达式-语法

文章目录一、正则表达式-语法总结一、正则表达式-语法 正则表达式(regular expression)描述了一种字符串匹配的模式&#xff08;pattern&#xff09;&#xff0c;可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。 例如&#xf…

DeferredResult 实现长轮询

文章目录 DeferredResult 的用处DeferredResult 原理分析开始分析请求超时了请求未超时,DeferredResult#setResult补充最后DeferredResult 的用处 DeferredResult 其实是基于 Servlet 3.0 对异步请求的支持而来的,我们来看这样一个场景: 当前 controller 里面有个方法 A,…

为什么我们认为GPT是一个技术爆炸

从23年初&#xff0c;ChatGPT火遍全球&#xff0c;通过其高拟人化的回答模式&#xff0c;大幅提升了人机对话的体验和效率&#xff0c;让用户拥有了一个拥有海量知识的虚拟助手&#xff0c;根据UBS发布的研究报告显示&#xff0c;ChatGPT在1月份的月活跃用户数已达1亿&#xff…