Python爬虫信息输入及页面的切换方法


Posted in Python onMay 11, 2018

实现网页的键盘输入操作

from selenium.webdriver.common.keys import Keys 
动态网页有时需要将鼠标悬停在某个元素上,相应的列表选项才能显示出来。 
而爬虫在工作的时候也需要相应的操作,才能获得列表项。 
driver.find_element_by_class_name(...).send_keys(需要输入的字串) 
#find_element_by_class_name可以是find_element_by_link_text、find_element_by_id等其他方式 
#send_keys一些特殊字符串,可以通过help(Keys)显示出来,如实现按回车操作需要使用Keys.ENTER

实现网页上的鼠标的动作

driver.find_element_by_link_text('更多').click()#需要指示到/a链接的位置

#同样find_element_by_link_text可以是find_element_by_id等类似的其他方式

使用ActionChains可以实现鼠标的更多操作

from selenium.webdriver.common.action_chains import *

ActionChains中的操作:

click() -- 单击、click_and_hold()-- 按下鼠标左键在一个元素上、context_click() --单击、double_click()--双击、drag_and_drop()--拖动、key_down()、key_up()、move_by_offset()、move_to_elment()、move_to_elment_with_offset()

动态网页鼠标操作及遇到的问题

动态网页有时需要将鼠标悬停在某个元素上,相应的列表选项才能显示出来。而爬虫在工作的时候也需要相应的操作,才能获得列表项。

#首先需要将鼠标停留到相应的元素
chain = ActionChains(driver)
moveelment = driver.find_element_by_xpath("...")
chain.move_to_element(moveelment).perform()
driver.find_element_by_xpath("//div[@class='search-condition c5 drop-down']/a/div").click()
#而后进行选择列表项
driver.find_element_by_xpath("//ul[@id='category_list']/li[1]/a").click()
driver.find_element_by_xpath("//ul[@id='category_list']/li[2]/a").click()

而当想要进行多列操作时出现了问题:driver.find_element_by_xpath("//ul[@id='category_list']/li[2]/a").click()一直无法成功仔细debug发现:在人工浏览查看相应列表时,全屏情况下列表显示是3列,而当需要聚焦特殊网页时,通过解析current_url进行比较即可,是否存在更好的方法。如果窗口很小就只能显示第一列的值。所以尝试将爬虫后台浏览器窗口设置成最大化,程序正常工作,如下:

#... ... 
driver.find_element_by_xpath("//ul[@id='category_list']/li[1]/a").click() 
driver.maximize_window()  
time.sleep(1) 
driver.find_element_by_xpath("//ul[@id='category_list']/li[2]/a").click()

关于窗口的页面切换方式

经常在网页操作时,会弹出新的页面,而爬虫需要程序进行窗口间的切换。

#切换网页,以获取新弹出的网页窗口 
for handle in driver.window_handles: 
  driver.switch_to_window(handle) 
  print('current url:%s'%driver.current_url)

当需要聚焦特殊网页时,通过解析current_url进行比较即可,是否存在更好的方法。

以上这篇Python爬虫信息输入及页面的切换方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python获取指定路径下所有指定后缀文件的方法
May 26 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
Django rest framework工具包简单用法示例
Jul 20 Python
python 用下标截取字符串的实例
Dec 25 Python
python 利用pandas将arff文件转csv文件的方法
Feb 12 Python
python 读写excel文件操作示例【附源码下载】
Jun 19 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
Jun 21 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
520使用Python实现“我爱你”表白
May 20 Python
Python加速程序运行的方法
Jul 29 Python
基于python模拟bfs和dfs代码实例
Nov 19 Python
对python-3-print重定向输出的几种方法总结
May 11 #Python
利用Python如何实现数据驱动的接口自动化测试
May 11 #Python
Python数据结构之图的应用示例
May 11 #Python
python 重定向获取真实url的方法
May 11 #Python
基于python 爬虫爬到含空格的url的处理方法
May 11 #Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
May 11 #Python
解决Python网页爬虫之中文乱码问题
May 11 #Python
You might like
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
表单提交验证类
2006/07/14 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
[01:58]最残酷竞争 2016国际邀请赛中国区预选赛积分循环赛回顾
2016/06/28 DOTA
Python数组条件过滤filter函数使用示例
2014/07/22 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
Python中装饰器高级用法详解
2017/12/25 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
一道SQL存储过程面试题
2016/10/07 面试题
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
资源环境与城市管理专业推荐信
2013/11/30 职场文书
函授教育个人学习的自我评价
2013/12/31 职场文书
小学生家长评语大全
2014/02/10 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫
js 实现验证码输入框示例详解
2022/09/23 Javascript