Python利用selenium+Beautifulsoup破解动态class/id并提取相应文本的方法

2023-11-02

最近小白掌柜接了领导一项任务,要全程自动化的注册一个网站并登录网站后逗留一段时间再离开,起初觉得这个应该难度不会太大,就欣然接受了。谁知,拿到具体需求后一分析纳尼??在这里插入图片描述这个里面其实有好多难点,but本着我就是进阶的小白在这里插入图片描述还是决定挑战下去!今天先不说其他的难点,只说关于如何提取动态class/id里面的文本(就是注册后网站一般都会给邮箱发一个验证码,要提取的就是它在这里插入图片描述)的问题!!!

进入正题,因为项目领导给的验证邮箱是雅虎的,所以我就按照之前的方法进行自动登录并查看邮件再提取验证码这个思路。自动登录没有问题,查看邮件也没有问题,重点来了!!!当打开邮件到提取验证码标签的时候发现无法定位的问题!因为每刷新一次页面,验证码前面p标签的class属性值就变化一次。。。然后细看这段HTML代码,发现他是字母+数字的组合形式,而且不止是验证码这里是动态class,连上面的父元素都是动态的id。。。:在这里插入图片描述
顿时觉得雅虎的技术人员此刻是这样的表情在这里插入图片描述
但是这怎么能难倒我们这样的技术宅,马上谷歌起来,经过一番查找,终于让我找到了解决的办法,感谢这位大佬的指点 。解决动态id/class有四种方法:
在这里插入图片描述
发现雅虎邮件这里不适合第一种方法,第二种貌似可以,第三种不稳定,第四种对浏览器的支持情况不一样;所以综上就选择了第二种:使用相对关系定位。回到雅虎邮件的页面,发现就算是使用相对关系来定位好像也不太可行在这里,因为验证码的父元素也是动态id,父元素的父元素也是在这里插入图片描述。。。
在这里插入图片描述
so,如何解决呢???于是小白掌柜又再去看了一下大佬的另一篇对父节点跟子节点定位的详解的文章,突然看到这里的:
在这里插入图片描述
灵光一闪,nth-child?咦,何不找一下p标签总共有多少个,再看含有验证码的p标签是第几个。为了验证这个猜想,小白掌柜又回到雅虎邮件这个页面,打开F12,并按下Ctrl+F来查找p标签,如图:
p标签总数
幸运的是,整个页面居然只有7个p标签,而我要提取的含有验证码的p标签在第四个:
在这里插入图片描述
因此决定采用selenium+Beautifulsoup的方法来提取这个验证码文本,具体的代码如下:

# -*- coding: utf-8 -*-
from selenium import webdriver
import time
import bs4
from bs4 import BeautifulSoup

driver = webdriver.Chrome()
driver.maximize_window()
#将浏览器最大化
driver.get('https://login.yahoo.com/?.src=ym&.lang=en-US&.intl=us&authMechanism=primary&done=https%3A%2F%2Fmail.yahoo.com%2Fd&eid=100&add=1')
time.sleep(4)
driver.find_element_by_id('login-username').send_keys('your yahoo email')
#输入你的邮箱
driver.find_element_by_id('login-signin').click()
time.sleep(3)
driver.find_element_by_css_selector('input#login-passwd').send_keys('your password')
#输入你的密码
driver.find_element_by_id('login-signin').click()
time.sleep(5)
driver.find_element_by_css_selector('span.o_h.G_e.J_x.en_N').click()
#点击验证码邮件
time.sleep(4)
soup = BeautifulSoup(driver.page_source, "html.parser")
#解析打开的邮件页面
p_selectors = soup.find_all('p')[4]
#定位到验证码的p标签,是第四个
code = p_selectors.text
print(code)
driver.quit()

至此我们再运行一下,就可以成功提取到邮件里面的验证码文本了!!!
在这里插入图片描述
这里要感谢这位大佬的文章所带来的思路,当然这只是这次项目中的一个难点,其他的等做完再一一记录下来。

参考:
Python selenium —— 父子、兄弟、相邻节点定位方式详解
Python selenium —— 动态id、class怎么定位

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python利用selenium+Beautifulsoup破解动态class/id并提取相应文本的方法 的相关文章

随机推荐

  • string转换成int的几种方式

    写在前面 遇到了多次oj的题目需要将string转换为int或者将int转换为string 每次遇到都是现查 一直没有好好的总结导致总是忘记 现在做个总结 首先是今天遇到的方式 采用string头文件里定义的string类型转换的函数 st
  • springboot项目配置多数据库连接

    前言 之前编写了一篇maven项目创建多数据库的方法 现在对springboot更了解之后 将把springboot项目配置多数据库的方法贴出来 从项目开始创建到调用数据库依次写出来 PS 本项目使用的是IDEA进行创建 创建springb
  • engine.js[dwr]javascript

    Copyright 2005 Joe Walker Licensed under the Apache License Version 2 0 the License you may not use this file except in
  • SQL注入绕过的姿势

    1 注释符绕过 常用的注释符有 1 注释内容 2 注释内容 3 注释内容 eg union select 1 2 union select 1 2 构造闭合 union select 1 2 2 大小写绕过 常用于 waf的正则对大小写不敏
  • 搭建和部署nuxt项目

    说在前面的话 vue js开发的SPA是不利于seo的 搜索引擎对它支持的并不是太好 百度根本就不可以在SPA应用的页面抓取数据 这对很看重seo优化的网站来说肯定是不能容忍的 而使用nuxt开发的网站就可以让爬虫爬取 而且它是基于vue
  • 神经网络轮廓特征是什么,神经网络轮廓特征图

    神经网络 的四个基本属性是什么 神经网络 的四个基本属性 1 非线性 非线性是自然界的普遍特征 脑智能是一种非线性现象 人工神经元处于两种不同的激活或抑制状态 它们在数学上是非线性的 由阈值神经元组成的网络具有更好的性能 可以提高网络的容错
  • 游学电子教您:如何给原子的imx6开发板烧录Linux系统

    义县游学电子科技有限公司官方帐号 科技爱好者 今天游学电子带您一起学习下imx6开发板如何烧录系统 使用的开发板是原子的 这里有个注意的地方是我们烧录的系统是到emmc中 而非sd卡中 01 步骤方法 把开发板的启动拨码开关拨到 USB 模
  • FPN、PAN在计算机视觉(CV)领域的意思

    FPN Feature Pyramid Network的首字母缩写 即特征金字塔网络的意思 PAN Pixel Aggregation Network的首字母缩写 即像素聚合网络的意思 名词出处 Path Aggregation Netwo
  • 2022-03-14

    一 你在工作中用到了什么设计模式 怎么用的 1 单例模式 编写kafka共用sdk写入的时候 使用了单例模式 不管new多少次kafkaProducer实例 最终都是一个 采用了静态内部类初始化方式 使用阿里云oss sdk的时候 创建的c
  • 【Git系列】Git下载与安装教程

    Git下载与安装教程 1 下载 2 安装 其他系列 Git最详细的体系化教程 1 下载 官网下载地址 https git scm com downloads 淘宝镜像下载地址 http npm taobao org mirrors git
  • YOLOv2论文理解

    YOLO9000 Better Faster Stronger 论文YOLO9000 Better Faster Stronger的主要内容有三点 1 作者提出了YOLOv2 YOLOv2在YOLOv1的基础上 使用新的网络结构 darkn
  • 西瓜书学习笔记第5章【神经网络】

    西瓜书学习笔记第5章 神经网络 5 1神经元模型 5 2 感知机与多层网络 一 感知机 二 多层功能神经元 多层网络 5 3误差逆传播算法 反向传播 BP 算法 对各个参数更新公式的推导 早停 early stopping 正则化 regu
  • SQL Server修改数据

    本篇主要讲解的是SQL Server 中修改数据的几种语句 INSERT语句 INSERT INTO SELECT语句 UPDATE语句 DELETE语句 一 INSERT语句 INSERT语句向表中添加新行 以下是INSERT语句的最基本
  • 比较IP代理与路由器获取IP地址的三大差异

    在今天的文章中 我们将与大家一起探讨IP代理与路由器获取IP地址的差异 这两种方式在获取IP地址上有一些区别 而这些区别会对我们的网络使用体验产生影响 今天我们深入分析并提供一些实际的例子与操作经验 稳定性差异 通过路由器获取IP地址时 我
  • 字段明明存在,用Web API使用该字段进行查询报错?

    我是微软Dynamics 365 Power Platform方面的工程师罗勇 也是2015年7月到2018年6月连续三年Dynamics CRM Business Solutions方面的微软最有价值专家 Microsoft MVP 欢迎
  • (一)MyBatis

    一 MyBatis特性 1 MyBatis 是支持定制化 SQL 存储过程以及高级映射的优秀的持久层框架 2 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 3 MyBatis可以使用简单的XML或注解用于配置
  • Unity——射线检测

    1 new Raw cube0 transform Vector3 forward 射线 第一个参数 射线的起始点 第二参数 射线的方向 myray new Ray this gameObject transform position Ve
  • Flutter系列之Navigator组件使用

    PS 想做一件事很容易 真正去做一件事很困难 同系列文章如下 Flutter系列之Navigator使用详解 Flutter系列之Flex布局详解 Flutter系列之图片加载详解 Flutter系列之Widget生命周期 Flutter系
  • 基于AT指令开发短信程序

    基于AT指令开发短信程序 本人的专职工作是做手机底层软件中SMS和CBS的功能模块软件 对SMS的PDU格式可以说是比较了解 在网上查找了一下感觉目前国内公开的软件大多功能比较单一 主要特点如下 1 支持分页短信 最大可以支持15个分页 可
  • Python利用selenium+Beautifulsoup破解动态class/id并提取相应文本的方法

    最近小白掌柜接了领导一项任务 要全程自动化的注册一个网站并登录网站后逗留一段时间再离开 起初觉得这个应该难度不会太大 就欣然接受了 谁知 拿到具体需求后一分析纳尼 这个里面其实有好多难点 but本着我就是进阶的小白还是决定挑战下去 今天先不