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 拷贝对象(深拷贝deepcopy与浅拷贝copy)
Sep 06 Python
python3访问sina首页中文的处理方法
Feb 24 Python
Python获取电脑硬件信息及状态的实现方法
Aug 29 Python
Python文件和目录操作详解
Feb 08 Python
用Python的线程来解决生产者消费问题的示例
Apr 02 Python
对于Python的Django框架部署的一些建议
Apr 09 Python
简介二分查找算法与相关的Python实现示例
Aug 26 Python
pyqt5简介及安装方法介绍
Jan 31 Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 Python
关于pytorch中全连接神经网络搭建两种模式详解
Jan 14 Python
关于matplotlib-legend 位置属性 loc 使用说明
May 16 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
Jan 08 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
php简单图像创建入门实例
2015/06/10 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
jquery 淡入淡出效果的简单实现
2014/02/07 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
深入理解Python中字典的键的使用
2015/08/19 Python
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
Python中的self用法详解
2019/08/06 Python
python实现串口通信的示例代码
2020/02/10 Python
python连接mongodb集群方法详解
2020/02/13 Python
Python devel安装失败问题解决方案
2020/06/09 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
大学生军训自我评价分享
2013/11/09 职场文书
2014年元旦活动方案
2014/02/15 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
MySql新手入门的基本操作汇总
2021/05/13 MySQL
详解Spring事件发布与监听机制
2021/06/30 Java/Android
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android
Python实现为PDF去除水印的示例代码
2022/04/03 Python
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js