Python爬虫之selenium高级功能
Python爬虫之selenium高级功能
原文地址
表单操作
元素拖拽
页面切换
弹窗处理
表单操作
表单里面会有文本框、密码框、下拉框、登陆框等。
这些涉及与页面的交互,比如输入、删除、点击等。
前提是找到页面中的元素。
例如下面有一个表单输入框:
<input type="text" name="passwd" id="passwd-id" />
获取这个元素的方法:
element = driver.find_element_by_id("passwd-id") element = driver.find_element_by_name("passwd") element = driver.find_elements_by_tag_name("input") element = driver.find_element_by_xpath("//input[@id='passwd-id']")
注意:使用 xpath 的时候还需要注意的是,如果有多个元素匹配了 xpath,它只会返回第一个匹配的元素。如果没有找到,那么会抛出 NoSuchElementException
的异常。
获取元素之和就要进行输入与点击操作了
输入:
element.send_keys("some text")
点击:
利用 Keys 这个类来模拟点击某个按键,当然首先你要获取按键元素。
element.send_keys("and some", Keys.ARROW_DOWN)
第二种方法:我们获取了按键元素,我们就可以使用click方法点击了
button = broswer.find_element_by_class_name('btn-search') #点击按钮 button.click()
删除:
当你元素使用send.keys方法输入字符后,输入的内容不会自动清除,如果我们要输入第二次,就要把第一次的内容删除掉:
element.clear()
上面都是简单的操作,如果我们遇到下拉框应该怎么办呢
WebDriver 中提供了一个叫 Select 的方法,可以帮助我们完成这些事情。
可以根据索引来选择,可以根据值来选择,可以根据文字来选择。
from selenium.webdriver.support.ui import Select select = Select(driver.find_element_by_name('name')) select.select_by_index(index) select.select_by_visible_text("text") select.select_by_value(value)
取消全部选择:
select = Select(driver.find_element_by_id('id')) select.deselect_all()
获取已选选择:
select = Select(driver.find_element_by_xpath("xpath")) all_selected_options = select.all_selected_options
获取可选选项:
options = select.options
最后提交表单:
driver.find_element_by_id("submit").click()
注意:WebDriver 会在表单中寻找它所在的表单,如果发现这个元素并没有被表单所包围,那么程序会抛出 NoSuchElementException
的异常。
元素拖拽
要完成元素的拖拽,首先你需要指定被拖动的元素和拖动目标元素,然后利用 ActionChains 类来实现。
element = driver.find_element_by_name("source") target = driver.find_element_by_name("target")from selenium.webdriver import ActionChains action_chains = ActionChains(driver) action_chains.drag_and_drop(element, target).perform()
这样就实现了元素从 source 拖动到 target 的操作。
页面切换
一个浏览器肯定会有很多窗口,所以我们肯定要有方法来实现窗口的切换。切换窗口的方法如下:
driver.switch_to_window("windowName")
另外你可以使用 window_handles 方法来获取每个窗口的操作对象。例如:
for handle in driver.window_handles:driver.switch_to_window(handle)
另外切换 frame 的方法如下
driver.switch_to_frame("frameName.0.child")
这样焦点会切换到一个 name 为 child 的 frame 上。
弹窗处理
当你出发了某个事件之后,页面出现了弹窗提示,那么你怎样来处理这个提示或者获取提示信息呢?
alert = driver.switch_to_alert()
通过上述方法可以获取弹窗对象。
转载于:https://www.cnblogs.com/-wenli/p/10897363.html
Python爬虫之selenium高级功能相关推荐
- [Python爬虫]使用Selenium操作浏览器订购火车票
这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分 [Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium) [Python爬虫]使用Python爬取静态网页-斗 ...
- python爬虫之selenium,谷歌无头浏览器
python爬虫之selenium和PhantomJS 主要的内容 lenium hantomjs 无头浏览器 的懒加载 一 什么是selenium? 介绍 它是python中的一个第三方库,对外提供 ...
- 从入门到入土:Python爬虫学习|Selenium自动化模块学习|简单入门|轻松上手|自动操作浏览器进行处理|chrome|PART01
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- python爬虫——使用selenium爬取微博数据(一)
python爬虫--使用selenium爬取微博数据(二) 写在前面 之前因为在组里做和nlp相关的项目,需要自己构建数据集,采用selenium爬取了几十万条微博数据,学习了很多,想在这里分享一下如 ...
- Python爬虫之selenium库使用详解
Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...
- python 模拟浏览器selenium_浅谈python爬虫使用Selenium模拟浏览器行为
前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...
- Python 爬虫 之 Selenium 模拟打开操作浏览器爬取斗鱼全部视播相关信息,并json保存信息
Python 爬虫 之 Selenium 模拟打开操作浏览器爬取斗鱼全部视播相关信息,并json保存信息 基础: Python 爬虫 之 Selenium.webdriver 的安装,以及模拟打开操作 ...
- python抓取文献关键信息,python爬虫——使用selenium爬取知网文献相关信息
python爬虫--使用selenium爬取知网文献相关信息 写在前面: 本文章限于交流讨论,请不要使用文章的代码去攻击别人的服务器 如侵权联系作者删除 文中的错误已经修改过来了,谢谢各位爬友指出错误 ...
- python爬虫——用selenium爬取淘宝商品信息
python爬虫--用selenium爬取淘宝商品信息 1.附上效果图 2.淘宝网址https://www.taobao.com/ 3.先写好头部 browser = webdriver.Chrome ...
最新文章
- 学习Linux命令神器-看不懂直接给你解释
- python socket发送组播数据_python3通过udp实现组播数据的发送和接收操作
- 不懂编程可以自学python吗-我不会编程,也可能学会Python吗?
- linux 截取后缀名,Shell 截取文件名和后缀
- 使用oracle sql profile固定执行计划
- 如何用阿里云服务器建立一个wordpress网站?
- c语言输出字母随机数,你好,怎样用c语言输出一个1到100的随机数
- C# 设定TextBox 只能输入正数/负数/小数 By KEYPRESS 事件
- webpack系列-优化
- SAXReader的使用
- USB驱动之常规usb鼠标驱动
- python统计英文单词个数_统计英文单词的个数的python代码 及 字符串分割
- 两轮自平衡机器人(一)---Simscape物理建模
- 如何记账能简单高效,记账全攻略来了
- 微信“15。。。。。”背后的故事
- 福利:工作经常用到的Mac软件整理
- 删除文件后,磁盘可用空间并没有释放怎么办?
- linux设备驱动那点事儿之SD卡驱动理论篇
- 微信小程序登录密码MD5加密
- C语言之int k,j,s; for (k=2;k6;k++,k++)/*for(k=2;k6;k=k+2)*/ {s=1; for(j=k;j6;j++) s+=j; }输出结果为10
热门文章
- java程序设计基础(第3版)实验指导_清华大学出版社-图书详情-《Java程序设计基础(第5版)实验指导与习题解答》...
- layui 如何动态加载局部页面_从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!
- python knnmatch_opencv python 特征匹配
- 大数据处理与分析方向主要干什么_不了解干法制砂?6个影响干法制砂效果的主要因素及干法制砂生产加工7大技术要点分析...
- python中的作用域_python 模块的作用域
- java 双循环是如何执行的_java – 双循环赛
- python图纸教程_python入门教程 python入门神图一张
- linux man 手册翻译,close (linux man) 翻译
- java 数据库操作教程_数据库基本操作:增删改查及联表操作
- vue element form 默认校验