〖Python网络爬虫实战㉙〗- Selenium案例实战(三)

news/2024/11/8 18:45:04/
  • 订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+ 

                python项目实战

                Python编程基础教程系列(零基础小白搬砖逆袭)

  • 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,可报销(名额有限,先到先得)

        即将转为付费专栏,更多详细请看,五一或有优惠活动哦。

关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明

  • 作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度博客新星top100入围,荣获多家平台专家称号。

 最近更新

〖Python网络爬虫实战㉘〗- Selenium案例实战(二)

🌟上节回顾

我们在上一节,为大家演示了selenium的实战,今天,我们将会带大家继续实现selenium的项目实战,我们更加深刻的了解selenium的优势是什么。

⭐️Selenium案例实战(三)

今天,我们就用python+Selenium来模拟人来做题,实现鼠标的点击行为。

🌟环境使用

  • python 3.9
  • pycharm

🌟模块使用

  • requests
  • selenium
  • time
  • 谷歌驱动

🌟说明

✨一、谷歌驱动安装

1.下载网址

CNPM Binaries Mirror

2.文件安装(放置)位置

可以把这个文件理解成一个脚本入口。说它是安装,其实就是把下载的 chromedriver.exe 文件复制到相应的位置。

将文件复制到两个位置:1...\python\Scripts复制一份到安装Python的文件夹中的Scripts文件夹中;2.如果用的是Pycharm,再复制一份到..\python\site-packages\selenium\webdriver\chrome文件中。这个地址可以将鼠标放在Pycharm里面安装库的地方的相应库上就能看到。

✨二、selenium模块

        之前,我们爬虫是模拟浏览器,但始终不是用的浏览器,但今天我们要说的是另一种爬虫方式,这次不是模拟浏览器,而是用程序去控制浏览器进行一些列操作,也就是selenium。selenium是python的一个第三方库,对外提供的接口可以操控浏览器,比如说输入、点击,跳转,下拉等动作。

  在使用selenium模块之前要做两件事,一是安装selenium模块,可以用终端用pip,也可以在pycharm里的setting安装;二是我们需要下载一款浏览器驱动程序,下载的驱动程序要和浏览器的版本一致。

 🌟代码实现

c574d5a937014c7692cb3cda53d652a1.gif

✨打开网页

我们打开在线驾驶员考试科目一考试的网址。代码如下:

driver = webdriver.Chrome()driver.get('https://www.jsyks.com/kmy-mnks')

运行效果如下:

3079e65458874de492c4bca25ec41e28.png

✨分析网页

我们发现每道题目后面都有查看本题分析,点击进去之后,我们就可以看到这题答案,通过对比 分析发现,答案网址有一定的规律,只是后缀不一样,我们称之为该题的编号或者是答案id。后来我们又发现考试页面就有我们所需要的答案id。

1e1f0f342ffb48eface503e2568ffb2c.png 

接下来,我们开始提取答案id。代码如下:

# 获取答案idlis = driver.find_elements(By.CSS_SELECTOR, 'div.Exam ul.Content li')

 然后,我们用for循环遍历,获取li标签的c属性 get_attribute方法。

for li in lis:answer_id = li.get_attribute('c')

接下来,我们开始拼接答案的网址。

answer_url = f'https://tiba.jsyks.com/Post/{answer_id}.htm'

✨解析网页

我们获得网址之后,发起请求,获取数据,解析数据,获得我们想要的数据,使用正则表达式去匹配答案的内容。

html_data = requests.get(answer_url).textanswer = re.findall('<br/>答案:<u>(.*?)</u></h1><p>', html_data)[0]

我们请求之后,发现答案和我们题目的选项有细微的差别,对和正确,错和错误,我们是只是什么意思,但是机器不知道什么意思,所以需要我们转换数据。

    if answer == '错':answer = '错误'elif answer == '对':answer = '正确'

✨模拟做题

做完这些,就需要将选项和答案进行比较,首先是选项匹配:

bs = li.find_elements(By.CSS_SELECTOR, 'b')        

答案和选项比较:

for b in bs:choose = b.textif len(choose) > 2:choose = choose[0]if answer == choose:b.click()

到这里我们所有的题目就做完了,接下来是交卷。

driver.find_element(By.CSS_SELECTOR, '.btnJJ').click()

运行完代码,我们会发现我们获得了满分。

e5f44c443eca4aad9460c4363b39d923.png

玩归玩,闹归闹,还是要好好做题。

全部代码如下:

import reimport requests
from selenium import webdriver
import timefrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.jsyks.com/kmy-mnks')
# time.sleep(1)
# 获取答案id
lis = driver.find_elements(By.CSS_SELECTOR, 'div.Exam ul.Content li')
# print(lis)
for li in lis:# 获取li标签c属性answer_id = li.get_attribute('c')# print(answer_id)answer_url = f'https://tiba.jsyks.com/Post/{answer_id}.htm'# print(answer_url)html_data = requests.get(answer_url).text# print(html_data)answer = re.findall('<br/>答案:<u>(.*?)</u></h1><p>', html_data)[0]if answer == '错':answer = '错误'elif answer == '对':answer = '正确'# print(answer)# 答案和选项内容比较# 获取选项bs = li.find_elements(By.CSS_SELECTOR, 'b')# 把b标签提取出来了for b in bs:choose = b.textif len(choose) > 2:# 提取第一个元素choose = choose[0]if answer == choose:b.click()#     print('选项:', choose)# print('答案:', answer)time.sleep(2)driver.find_element(By.CSS_SELECTOR, '.btnJJ').click()

 🌟总结

我们前面和大家讲解了三个实战,后面,我们将会具体的分析selenium的用法,以及在实战中常用的函数介绍。


http://www.ppmy.cn/news/93328.html

相关文章

144 Tops,特斯拉如何低成本实现了城市NOA?

作者 | 树人 编辑 | 德新 根据特斯拉2022年Q4的财务文件披露&#xff1a;FSD Beta已有将近40万用户。 这是目前全世界部署规模最大的城市NOA系统。 而特斯拉实现这样一套系统&#xff0c;在车端几乎仅用了8个摄像头和144 Tops算力的FSD计算平台。这种性能压榨和成本控制能力让…

汇编十三、串口

1、通信相关概念 (1)单工&#xff1a;只能接收或只能发送数据。 (2)半双工&#xff1a;既能发送数据&#xff0c;也能接收数据&#xff0c;但不能同时进行。 (3)全双工&#xff1a;可以同时进行发送和接收数据。 (4)单片机中常用的通信物理接口&#xff1a;I2C、SPI、USB、…

JavaScript实现通过语句输出当前星期的代码

以下为实现通过语句输出当前星期的程序代码和运行截图 目录 前言 一、通过语句输出当前星期 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.本博文代码可以根据题目要求实…

Window MinGW 编译 OpenCV 人快疯了看这里!

目录 一、使用官方编译好的 二、使用MinGW编译器自行进行编译 三、编译好的OpenCV库 OpenCV3.4.5 OpenCV 4.5.4 一、使用官方编译好的 【Qt】opencv源码&官方编译好的opencv在windows下使用的区别_外来务工人员徐某的博客-CSDN博客 官方替我们编译好了&#xff0c;可以直…

python中main函数(主函数)相关应用

主函数&#xff08;Main Function&#xff09;是程序中最重要的部分之一&#xff0c;它是程序入口点&#xff0c;也是程序开始执行的地方。 1、主函数的定义 在 Python 中&#xff0c;没有像 C 或 Java 等语言中有一个固定的主函数定义格式。在 Python 中&#xff0c;我们可以…

IO流的讲解(3)

目录 处理流-BufferedInputStream和BufferedOutputStream BufferedInputStream介绍 BufferedOutputStream介绍 处理流的应用实例 对象流 序列化和反序列化 基本介绍 应用案例1 应用案例2 序列化和反序列化的注意事项和细节说明 标准输入输出流 转换流 乱码问题 处理…

Packet Tracer - 综合技能练习(配置 VLAN 间路由、配置静态路由以及默认路由)

Packet Tracer - 综合技能练习 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 VLAN R1 S0/0/0 172.31.1.2 255.255.255.0 不适用 不适用 G0/0.10 172.31.10.1 255.255.255.0 不适用 10 G0/0.20 172.31.20.1 255.255.255.0 不适用 20 G0/0.30 172.31.…

Linux高级---configmap和secret

文章目录 一、ConfigMap1、介绍2、创建configmap3、使用configmap4、引入环境变量的另一种方式 二、Secret1、介绍2、创建secret3、使用secret4、引入环境变量的另一种方式 一、ConfigMap 1、介绍 ConfigMap 是一种 API 对象&#xff0c;用来将非机密性的数据保存到键值对中。使…