python 爬虫 入门 六、Selenium

       Selenium本来是一个自动测试工具,用于模拟用户对网站进行操作。在爬虫领域也有其用处。

一、下载安装Selenium及附属插件

pip install Selenium

        安装完成后还需要安装一个浏览器驱动,来让python能启动浏览器。

        如果是Edge或者其他基于Chromium的浏览器(如下面的百分浏览器),我们先查看Chromium版本号:

        

        这里以Edge为例,版本为126.0.2592.68,进入下面的网址,咱们就选最后一个,win版本,解压之后的exe文件就是我们需要的东西,你可以把它放在python解释器目录,项目目录或者其他你找得到的地方。

chromedriver.storage.googleapis.com/index.html

 

 

 二、selenium的使用

(一)、第一个程序

先来试试第一个程序,它会使用edge打开百度(第一打开时间可能有点长(10s?),并且打开后不久就会自动关闭)然后输出抬头的数据:

import timefrom selenium.webdriver import Edge   # Edge 可以换成 Chrome/Firefox(火狐)/Ie/BlackBerry······url = 'http://www.baidu.com'
web = Edge()
web.get(url)
print(web.title)
time.sleep(50)

 (二)、以站酷为例

        接下来,我们尝试模拟一下从站酷ZCOOL-设计师互动平台-打开站酷,发现更好的设计!中搜索"网站设计",并打开第一个和第二个文章的全过程

        在selenium中,我们所有操作,看到的都是已经经过js处理过的页面,也就是说,他是所见即所得。以站酷为例,站酷首页的文章都是二次请求得到的,源代码中没有,用以下代码就能清楚看到。会输出True False,如果不是的话,尝试更改文章名或者延长time.sleep时间,以保证网站完全加载。

import timeimport requests
from selenium.webdriver import Edge  # Edge 可以换成 Chrome/Firefox(火狐)/Ie/BlackBerry······headers = {# 用户代理,某些网站验证用户代理,微微改一下,如果提示要验证码之类的,使用它"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome""/118.0.0.0 Safari/537.36",
}url = 'https://www.zcool.com.cn/'
web = Edge()
web.get(url)
# print(web.page_source)
time.sleep(8)
print('字体合集' in web.page_source)    # 字体合集是一个文章名
with requests.get(url=url, headers=headers) as resp:resp.encoding = "utf-8"  # 当页面乱码改这里# print(resp.text)print('字体合集' in resp.text)# 字体合集是一个文章名

 需要模拟的行为流程

 模拟代码

 通过以下代码即可获取所需内容:通常来说,人怎么想,就怎么用selenium访问页面。

import timefrom selenium.webdriver import Edge  # Edge 可以换成 Chrome/Firefox(火狐)/Ie/BlackBerry······
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keysurl = 'https://www.zcool.com.cn/'
web = Edge()
web.get(url)
time.sleep(3)  # 等几秒使得网站完全加载
# 已经进入网站,找到搜索框,输入数据并回车搜索。
# By有By.ID、By.NAME、By.XPATH、By.CSS_SELECTOR等
search_box = web.find_element(By.XPATH, '//*[@id="headerSearchInput"]')  # 直接通过检查元素中的xpath获得位置
search_box.send_keys("网站设计")
# 方法一、点击搜索,
# search = web.find_element(By.CLASS_NAME, '_search-icon_1wwm7_457')
# search.click()
# 方法二,按下回车,也可以直接放一块:search_box.send_keys("网站设计",Keys.ENTER)
search_box.send_keys(Keys.ENTER)
time.sleep(3)
# 打开两个文章
img = web.find_element(By.XPATH, '//*[@id="__next"]/main/div/div/div[2]/section[2]/section/section/div[1]/div[1]')
img.click()
img = web.find_element(By.XPATH, '//*[@id="__next"]/main/div/div/div[2]/section[2]/section/section/div[2]/div[1]')
img.click()
time.sleep(2)
# 遇到不能按F12打开控制台和没有右键菜单的情况,应该是拦截了快捷键,点击地址栏然后按F12即可
# 切换窗口获得所需内容
web.switch_to.window(web.window_handles[1])
text = web.find_element(By.XPATH, '//*[@id="__next"]/main/div/section/div[1]')
print(text.text)
web.switch_to.window(web.window_handles[2])
text = web.find_element(By.XPATH, '//*[@id="__next"]/main/div/section/div[1]')
print(text.text)

(三)、其他代码

        selenium不太适合做能长久使用的脚本,但短时间内用一两次还是可以的,下面是一些以后可能用到的函数示例

from selenium.webdriver import Edge  # Edge 可以换成 Chrome/Firefox(火狐)/Ie/BlackBerry······
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWaitopt = Options()
opt.add_argument("--disable-blink-features=AutomationControlled")  # 防止服务器知道是selenium打开的。url = 'https://www.zhihu.com/'
web = Edge(options=opt)
web.get(url)
web.implicitly_wait(10)  # 隐式等待,接下来所有的查找都至少等10s,如果10s内查到了就继续,否则报错
el = WebDriverWait(web, 10, 0.5).until(  # 显示等待,浏览器等待10s每0.5s轮询一次,搜索,如果检测到返回元素EC.presence_of_element_located((By.NAME, '所需的name'))
)ActionChains(web).move_to_element_with_offset(el, xoffset=255, yoffset=30)  # 模拟点击el元素向右255像素向下30像素的位置

总结:

        selenium优点自然是使用比较简单,怎么访问网站就怎么写代码即可,但是访问速度比较慢,需要等待页面JS加载。

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

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

相关文章

Linux(CentOS)yum update -y 事故

CentOS版本:CentOS 7 事情经过: 1、安装好CentOS 7,系统自带JDK8,版本为:1.8.0_181 2、安装好JDK17,版本为:17.0.13 3、为了安装MySQL执行了 yum update -y(这个时候不知道该命令的…

uniapp uni-calendar日历实现考勤统计功能

根据日历组件代码结构 构成相应结构的状态统计数据 list 再遍历到每日的子组件中 <view class"uni-calendar__weeks-item" v-for"(weeks,weeksIndex) in item" :key"weeksIndex"><calendar-item class"uni-calendar-item--hook&q…

环境配置与搭建

安装pytorch 官网连链接&#xff1a;https://pytorch.org/ 特殊包名 cv2 pip install opencv-python sklearn pip install scikit-learnPIL pip install Pillow使用jupyter notebook pip install jupyter安装显卡驱动 Windows Linux 视频教程&#xff1a; 【ubuntu2…

【数据库实验一】数据库及数据库中表的建立实验

目录 实验1 学习RDBMS的使用和创建数据库 一、 实验目的 二、实验内容 三、实验环境 四、实验前准备 五、实验步骤 六、实验结果 七、评价分析及心得体会 实验2 定义表和数据库完整性 一、 实验目的 二、实验内容 三、实验环境 四、实验前准备 五、实验步骤 六…

SpringBoot健身房管理:技术与实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

CulturalBench :一个旨在评估大型语言模型在全球不同文化背景下知识掌握情况的基准测试数据集

2024-10-04&#xff0c;为了提升大型语言模型在不同文化背景下的实用性&#xff0c;华盛顿大学、艾伦人工智能研究所等机构联合创建了CulturalBench。这个数据集包含1,227个由人类编写和验证的问题&#xff0c;覆盖了包括被边缘化地区在内的45个全球区域。CulturalBench的推出&…

python登录功能实现

一.用python实现基本的登录功能 #-----------------1.基本登录功能------------------- nameinput("qq账号&#xff1a;") if name"jc":passwdinput("密码&#xff1a;")if passwd"123456":print("登录成功")else:print(&q…

如何使用Python管理环境变量

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 环境变量 📒📝 环境变量简介📝 Python 中的环境变量操作📝 获取环境变量📝 设置环境变量🔖 临时设置🔖 永久设置📝 删除环境变量📝 临时删除📝 永久删除📝 小结⚓️ 相关链接 ⚓️📖 介绍 📖 环境变量…

设置允许多用户远程登录 Windows 云服务器

操作场景 本文档以 Windows Server 2016 操作系统云服务器为例&#xff0c;指导您配置多用户远程登录 Windows 云服务器。 注意&#xff1a; 微软提供的多用户远程登录功能试用期为120天&#xff0c;若未购买多用户登录授权&#xff08;RDS CALs&#xff09;&#xff0c;则试…

喜报!景联文科技成功通过DCMM数据管理能力成熟度二级认证

10月30日&#xff0c;中国电子信息行业联合会公示了新一批DCMM贯标企业&#xff0c;景联文科技成功通过DCMM数据管理能力成熟度二级认证&#xff08;乙方认证&#xff09;。 DCMM是《数据管理能力成熟度评估模型》的简称&#xff0c;是我国在数据管理领域首个正式发布的国家标准…

Android setContentView执行流程(1)-生成DecorView

setContentView的流程主要就是讲在Activity的onCreate方法中调用setContentView方法之后&#xff0c;我们自定义的xml文件加载的过程&#xff0c;学习它可以让我们对整个View树的理解更加透彻&#xff0c;并且通过源码的学习&#xff0c;我们可以从根本上理解一些问题&#xff…

《操作系统 - 清华大学》2 -1:操作系统的启动

文章目录 0. 内容摘要1. 计算机体系机构概述2.启动2.1 启动时计算机内存和磁盘布局2.2. 内存映射 3. 系统调用、异常、中断3.1 定义3.2 背景3.3 中断、异常和系统调用的不同点3.3.1 源头3.3.2 处理时间3.3.3 响应 0. 内容摘要 两部分的内容 第一部分是启动。知道操作系统怎么是…

在服务器里安装2个conda

1、安装新的conda 下载地址&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 本文选择&#xff1a;Anaconda3-2023.03-1-Linux-x86_64.sh 安装&#xff1a;Ubuntu安装Anaconda详细步骤&#xff08;Ubuntu22.04.1&#xff…

【系统集成项目管理工程师】知识点汇总

十五矩阵图 ITTO&#xff08;Input - Tools & Techniques - Output&#xff09;一览图 整合管理、范围管理 进度管理、成本管理 成本管理&#xff08;续&#xff09;、质量管理、资源管理 沟通管理、风险管理 风险管理&#xff08;续&#xff09;、采购管理、干系人管理

Java | Leetcode Java题解之第552题学生出勤记录II

题目&#xff1a; 题解&#xff1a; class Solution {static final int MOD 1000000007;public int checkRecord(int n) {long[][] mat {{1, 1, 0, 1, 0, 0},{1, 0, 1, 1, 0, 0},{1, 0, 0, 1, 0, 0},{0, 0, 0, 1, 1, 0},{0, 0, 0, 1, 0, 1},{0, 0, 0, 1, 0, 0}};long[][] re…

极品模板内容付费管理系统(PHP内容知识付费系统)

极品模板内容付费管理系统是一款基于PHP和MySQL技术开发的源码产品&#xff0c;旨在为用户提供一个功能全面、易于管理和扩展的内容付费平台。该系统支持多种付费模式&#xff0c;具备强大的内容管理功能&#xff0c;适合各类内容创作者和企业家构建知识付费、会员服务、在线教…

设计者模式之策略模式

前言 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多样&#xff0c;经常改变&#xff0c;如果将这些算法都写在对象中&#xff0c;将会使对象变得异常复杂&#xff1b;而且有时候支持不频繁使用的算法也是一个性能负担。 如何在运行时根据需要透明地更改对象的算…

【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用

创建个性化的GPTs应用是一个涉及技术、设计和用户体验的过程。以下是详细步骤&#xff1a; ###1.确定应用目标和用户群体 在开始之前&#xff0c;你需要明确你的应用的目标和目标用户。这将帮助你在设计、开发和个性化方面做出相应的决策。例如&#xff0c;如果你的应用是为了…

LeetCode 热题 100之 堆

1.数组中第k个最大元素 和Acwing 786 第k个数一模一样 排序 思路分析1&#xff1a;此题要求时间复杂度未为O(n)。虽然库函数sort和快速排序都能过&#xff0c;但是时间复杂度不满足条件。下面优化快速排序&#xff0c;写一个快速选择算法。我们可以引入随机化来加速这个过程&…

redis笔记-数据结构

zset zset一方面它是一个 set&#xff0c;保证了内部value 的唯一性&#xff0c;另一方面它可以给每个 value 赋予一个 score&#xff0c;代表这个 value 的排序权重。 zset的底层是由字典和跳表实现。 字典主要用来存储value和score的对应关系。跳表这个数据结构主要用来提…