爬虫日常练习-selenium登录12306

news2024/10/3 21:22:48

文章目录

  • 前言
  • 页面分析
  • 代码设计

前言

hello,好兄弟们。经过前面几篇文章后,想必小伙伴们对于简单的网页文本爬取,图片爬取类的内容已经熟练掌握了。今天我们开始练习一个新的内容:selenium。有关这一块的基础知识网上太多了,我们作为进阶的练习文章就不在这里从基础说起了。直接上实际案例,与大家分享在设计代码时的思路
在这里插入图片描述

页面分析

今天给大家分享一个简单案例。讲讲如何自动登录12306网站
在这里插入图片描述老规矩,先分析页面。我们在观察12306的登录界面时首先注意到url,这个就是我们第一步要发送请求的链接​https://kyfw.12306.cn/otn/resources/login.html

获取url后首先观察到页面上有两个输入框,这里就是参数传递给服务器的地方,先猜测这里是表单发送​。自动化就是要去模仿人类的动作来对网站发送请求,所以我们先设想下正常的操作流程:第一步输入账号密码,点击登录。

那么我们如何通过爬虫来模拟人的操作行为呢。这个时候就要借助selenium了。

代码设计

开始设计第一部分的代码​
首先就是要引入selenium库,刚刚学习完基础知识的同学对这一步肯定不陌生,代码如下

from selenium.webdriver import Chrome

if __name__ == '__main__':
    web = Chrome()
    web.get('https://kyfw.12306.cn/otn/resources/login.html')

借用Chrome插件模拟Chrome浏览器,运行查看效果。做到这一步的同学会发现,浏览器打开后迅速的关闭,这个时候要对代码做些改动,避免程序运行结束后浏览器立即退出,并且规避掉浏览器顶端显示的收到自动化程序控制

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
if __name__ == '__main__':
    opt = Options()
    opt.add_experimental_option('excludeSwitches', ['enable-automation'])
    opt.add_experimental_option('detach', True)
    web = Chrome(options=opt)
    web.get('https://kyfw.12306.cn/otn/resources/login.html')

我们可以对比下两个新加参数的作用
在这里插入图片描述在这里插入图片描述可以明显看出下面这段编码的作用是为了规避页面上的自动化控制显示

opt.add_experimental_option('excludeSwitches', ['enable-automation'])

而另一段就是为了规避我们通过程序打开的浏览器在程序运行结束后立马退出​

解决完自动打开浏览器的操作后,就要开始对参数传递的问题动手了

在这里插入图片描述在这里插入图片描述
首先分析页面。我们第一步做的操作应该是点击账号密码登录,然后在点击用户名框输入账号。再点击密码处输入密码,最后点击登录按钮。

因此直接右键检查账号登录就可以获取到此处的xpath路径。可能有的同学会疑惑,不是说elements里面的路径不可信不能直接用吗。这就是selenium的方便之处了,由于它是模拟人操作浏览器的行为,因此它获取到的源码正是我们平时所见的经过处理后得到的elements里面的源码,可以直接利用,大大提高了爬取的便捷性和效率。

不同于平时用的etree。在selenium的编码中大部分的点击,传参等动作需要通过其内部的find_element函数来进行xpath的定位。
在这里插入图片描述直接在页面右键检查,复制其xpath路径

    login_choice = web.find_element(By.XPATH, '//*[@id="toolbar_Div"]/div[2]/div[2]/ul/li[1]')
    # 点击账号密码登录方式
    login_choice.click()
    user = web.find_element(By.XPATH, '//*[@id="J-userName"]')
    pwd = web.find_element(By.XPATH, '//*[@id="J-password"]') 
    # 点击账号模块并传入参数
    user.click()
    user.send_keys('')
    # 密码
    pwd.click()
    pwd.send_keys('')
        # 定位到登录按钮并点击
    web.find_element(By.XPATH,'//*[@id="J-login"]').click()

在这里插入图片描述可以看到所有参数全部传入进去并点击了登录按钮,如预期所料出现了验证模块。到了这一步大家应该也稍微熟悉了自己所学的操作了,大家也可以对一些经典的网站先进行参数传入操作来练练手感。

由于今天我还有其他的学习安排,就先只给大家分享到这里。明天在和大家聊聊如何绕过这块验证。拜拜兄弟们,记得点个赞哈。
在这里插入图片描述

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

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

相关文章

Java面试题总结 | Java面试题总结4-多线程模块(持续更新)

多线程 线程互斥和线程同步 线程互斥:当多个线程需要访问同一资源时,要求在一个时间段内只能允许一个线程来操作共享资源,操作完毕后别的线程才能读取该资源,这叫线程的互斥。我们需要使用synchronized来给共享区域加锁&#xf…

腾讯云服务器CVM标准型S5和S4的区别

腾讯云服务器CVM标准型S5和S4有什么区别?标准型S5云服务器次新一代的云服务器,CPU采用2.5GHz主频的Intel Xeon Cascade Lake 或者 Intel Xeon Cooper Lake 处理器,睿频3.1GHz,目前标准型S5云服务器活动比较多,标准型S4…

Android 10.0 系统systemui下拉通知栏的通知布局相关源码分析

1.前言 在android10.0的系统rom开发中,在进行systemui中的下拉通知栏的布局自定义的时候,对于原生systemui的 系统的下拉通知栏的通知布局的了解也是非常重要的,接下来就来分析下相关的下拉通知栏的通知布局的相关 源码流程,了解这些才方便对通知栏的布局做修改 2.系统…

一种二级水闸安全监测布置及设备安装维护方案案例

1.1安全监测布置 1.1.1 拦河闸及泵站监测 拦河闸和水轮泵站主要安全监测项目包括: (1) 表面变形监测 在拦河闸上游侧闸顶布置1条引张线监测闸顶水平位移,每一联中孔闸墩上及左岸水轮泵站边墩处各布置1个测点,共计9个测点,左右…

【IIS搭建网站】如何使用本地电脑做服务器搭建web站点并公网访问

目录 前言 Windows网页设置 Windows IIS功能设置 IIS网页访问测试 Cpolar内网穿透 下载安装Cpolar Cpolar云端设置 3.3 Cpolar本地设置 公网访问测试 结语 前言 在网上各种教程和介绍中,搭建网页都会借助各种软件的帮助,比如网页运行的Apache…

Tomcat长轮询原理与源码解析

零丶长轮询的引入# 最近在看工作使用到的diamond配置中心原理,发现大多数配置中心在推和拉模型上做的选择出奇的一致选择了基于长轮询的拉模型 基于拉模型的客户端轮询的方案 客户端通过轮询方式发现服务端的配置变更事件。轮询的频率决定了动态配置获取的实时性。…

win10家庭版 WSL Centos7

win10家庭版 WSL Centos7虚拟机WSLCentos7虚拟机 以前在win系统上跑liunx系统一般是先安装个虚拟机软件,再在虚拟机上运行对于linux的镜像。 直到后来win推出了WSL。 WSL Windows Subsystem for Linux(简称WSL)是一个在Windows 10\11上能够…

力扣sql中等篇练习(二)

力扣sql中等篇练习(二) 1 第N高的薪水 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 -- 注意:limit函数是不能使用变量-1这种作为条件的,如N-1是不被允许的 CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGINdeclare m INT;SET mN-1;…

大厂敲门砖!!!让你轻松扫除通往大厂的障碍,一步到岸!!2023年究极最全(Java面试手册)!!!

又到了一年一度的大厂招牌环节,多少程序员在为了金三银四在前几个月疯狂卷面试题,却还是惨遭淘汰,今天给大家整理了一份最最最核心的java面试题,希望能对大家在进击大厂的道路上添一份力! 总纲: 由于文章篇…

Canal(2):Canal 部署与配置

1 mysql数据库配置 1.1新建数据库 1.2 新建测试表 CREATE TABLE user_info(id VARCHAR(255),name VARCHAR(255),sex VARCHAR(255) ); 1.3 修改配置文件开启 Binlog vim /etc/my.cnf server-id4 log-binmysql-bin binlog_formatrow binlog-do-dbcaneltestdb 1.4 重启MySQL使配…

Vue3 + TypeScript 实现自动打字、打字机动画、动画打字工具(TypeIt)

一、介绍 👵 👵 TypeIt是一个JavaScript库,用于创建简单而流畅的打字效果和动画效果。它可以用于网页开发中的很多场景,例如创建动态文字效果、制作页面过渡动画、增强用户体验等。 我们还可以利用它进行一些后端日志的回显&…

想让 ChatGPT 帮忙进行数据分析?你还需要做......

近年,火出圈的 ChatGPT 掀起了久违的人工智能的热潮,如何更好地让人工智能真正为企业所用,也成了近期的热门话题。大数据和人工智能两者相辅相成,人工智能的训练以大量数据作为基础,而数据的价值则需要人工智能的充分挖…

nacos和eureka的区别

nacos和eureka的区别 Eureka是什么 Eureka详解Nacos是什么 Nacos详解Nacos和Eureka的区别 CAP理论连接方式服务异常剔除操作实例方式自我保护机制 Eureka是什么 Eureka 是Spring Cloud 微服务框架默认的也是推荐的服务注册中心,由Netflix公司与2012将其开源出来,Eureka基于RE…

《剪花布条》:从花布条中尽可能剪出几块小饰条

目录 一、题目 二、思路 1、代码中要使用的String类中的方法 (1)判断 s 中是否有 t (2)将 s 分割 2、递归判断 三、代码 详细注释版本 简化注释版本 一、题目 题目:剪花布条 题目链接&#xf…

8、DRF实战总结:分页(Pagination)及DRF提供的分页类详解(附源码)

在前面的DRF系列教程中,以博客为例介绍了序列化器, 使用基于类的视图APIView和ModelViewSet开发了针对文章资源进行增删查改的完整API接口,并详细对权限和认证(含jwt认证)进行了总结与演示。在本篇文章中将向演示如何在Django REST Framework中使用分页。…

【MySQL】进阶查询-聚合查询和联合查询

文章目录1. 前言2. 表的设计2.1 一对一2.2 一对多2.3 多对多3.将查询结果放到另一个表中4. 聚合查询4.1 聚合函数4.2 GROUP BY4.3 HAVING5. 联合查询(多表查询)5.1 内连接5.2 外连接5.3 自连接5.4 子查询5.5 合并查询6. 总结1. 前言 文章主要围绕着以下三个问题: group by的作…

zookeeper介绍和搭建

zookeeper介绍和搭建一、zookeeper简介二、zookeeper工作机制三、zookeeper集群部署3.1 实验准备3.2 修改配置文件3.3 创建目录以及拷贝文件3.4 配置Zookeeper启动脚本3.5 查看启动状态一、zookeeper简介 1、zookeeper概念 ZooKeeper是一种为分布式应用所设计的高可用、高性能…

尚融宝20-实现用户注册和用户认证

目录 一、需求 二、前端整合发送验证码 三、实现用户注册 1、创建VO对象 2、定义常量 3、引入MD5工具类 4、Controller 5、Service 6、前端整合 四、实现用户登录 1、后端整合JWT 2、前端整合 五、校验用户登录 1、后端 2、前端 一、需求 二、前端整合发送验证码…

数据结构———一万字手撕八大排序算法

常见的排序算法1.排序算法的作用1.1列如我们在购物时1.2玩游戏时英雄战力的排行,都得用到排序算法2.常见排序算法的实现2.1冒泡排序时间复杂度计算:2.2直接插入排序时间复杂度计算:2.3选择排序时间复杂度计算:2.4希尔排序⭐时间复…

Qt音视频开发28-ffmpeg解码本地摄像头(yuv422转yuv420)

一、前言 一开始用ffmpeg做的是视频流的解析,后面增加了本地视频文件的支持,到后面发现ffmpeg也是支持本地摄像头设备的,只要是原则上打通的比如win系统上相机程序、linux上茄子程序可以正常打开就表示打通,整个解码显示过程完全一样,就是打开的时候要传入设备信息,而且…