Python爬虫实现selenium处理iframe作用域问题


Posted in Python onJanuary 27, 2021

项目场景:

在使用selenium模块进行数据爬取时,通常会遇到爬取iframe中的内容。会因为定位的作用域问题爬取不到数据。

问题描述:

我们以菜鸟教程的运行实例为案例。
按照正常的定位

Python爬虫实现selenium处理iframe作用域问题

会以文本块生成xpath为/html/body/text()。这样的话根据xpath进行如下代码编写。

#!/user/bin/
# -*- coding:UTF-8 -*-
# Author:Master

from selenium import webdriver
import time

driver = webdriver.Chrome(executable_path="./chromedriver")
driver.get('https://www.runoob.com/try/runcode.php?filename=HelloWorld&type=python3')
time.sleep(2)
text = driver.find_element_by_xpath('/html/body').text
print(text)
time.sleep(5)
driver.quit()

执行结果:

Python爬虫实现selenium处理iframe作用域问题

很明显这并不是想要的结果。

原因分析:

当我们打开抓包工具定位到Hello, World!文本的时候会发现,该文本是在一个iframe中。这样的话我们xpath所定位到的内容则是大的html中的路径。我们需要的内容则是在iframe中的小的html中。

解决方案:

通过分析发现,想要解决问题的实质就是改变作用域。通过switch_to.frame(‘id')方法来改变作用域就可以了。

重新编写代码:

#!/user/bin/
# -*- coding:UTF-8 -*-
# Author:Master

from selenium import webdriver
import time

driver = webdriver.Chrome(executable_path="./chromedriver")
driver.get('https://www.runoob.com/try/runcode.php?filename=HelloWorld&type=python3')
time.sleep(2)
driver.switch_to.frame('iframeResult')
text = driver.find_element_by_xpath('/html/body').text
print(text)
time.sleep(5)
driver.quit()

查看运行结果:

Python爬虫实现selenium处理iframe作用域问题

到此这篇关于Python爬虫实现selenium处理iframe作用域问题的文章就介绍到这了,更多相关selenium iframe作用域内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python执行shell获取硬件参数写入mysql的方法
Dec 29 Python
python登陆asp网站页面的实现代码
Jan 14 Python
Python根据区号生成手机号码的方法
Jul 08 Python
python的else子句使用指南
Feb 27 Python
深入解析Python中的上下文管理器
Jun 28 Python
Python实现字符串格式化的方法小结
Feb 20 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
python爬虫获取新浪新闻教学
Dec 23 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
Jun 03 Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 Python
python正则表达式匹配IP代码实例
Dec 28 Python
python中如何打包用户自定义模块
Sep 23 Python
python利用appium实现手机APP自动化的示例
Jan 26 #Python
python 基于opencv去除图片阴影
Jan 26 #Python
python中用ggplot绘制画图实例讲解
Jan 26 #Python
python中altair可视化库实例用法
Jan 26 #Python
用Python制作音乐海报
Jan 26 #Python
python中pyqtgraph知识点总结
Jan 26 #Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 #Python
You might like
PHP 正则表达式常用函数
2014/08/17 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
js数组操作学习总结
2013/11/04 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
JS跨域问题详解
2014/11/25 Javascript
javascript的push使用指南
2014/12/05 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
python处理Excel xlrd的简单使用
2017/09/12 Python
Python贪心算法实例小结
2018/04/22 Python
python字典改变value值方法总结
2019/06/21 Python
Python 变量的创建过程详解
2019/09/02 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
文明学生标兵事迹
2014/01/21 职场文书
人事专员工作职责
2014/02/22 职场文书
公司副总经理任命书
2014/06/05 职场文书
2014年食堂工作总结
2014/11/20 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
Redis数据同步之redis shake的实现方法
2022/04/21 Redis
MySQL主从切换的超详细步骤
2022/06/28 MySQL
Spring boot admin 服务监控利器详解
2022/08/05 Java/Android