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中getattr函数和hasattr函数作用详解
Jun 14 Python
Python制作Windows系统服务
Mar 25 Python
git进行版本控制心得详谈
Dec 10 Python
利用python打开摄像头及颜色检测方法
Aug 03 Python
解决Python对齐文本字符串问题
Aug 28 Python
Python二元赋值实用技巧解析
Oct 25 Python
使用python远程操作linux过程解析
Dec 04 Python
Python reversed函数及使用方法解析
Mar 17 Python
基于Tensorflow的MNIST手写数字识别分类
Jun 17 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 Python
利用Python网络爬虫爬取各大音乐评论的代码
Apr 13 Python
怎么用Python识别手势数字
Jun 07 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
php笔记之:AOP的应用
2013/04/24 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
php输入数据统一类实例
2015/02/23 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
显示、隐藏密码
2006/07/01 Javascript
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
使用jQuery在对象中缓存选择器的简单方法
2015/06/30 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
[04:44]DOTA2 2017全国高校联赛视频回顾
2017/08/21 DOTA
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
设计师珠宝:Ylang 23
2018/05/11 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
会计自我鉴定
2013/11/02 职场文书
入党转预备思想汇报
2014/01/07 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
家教广告词
2014/03/19 职场文书
信息员培训方案
2014/06/12 职场文书
节约用电标语
2014/06/17 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
python中pandas对多列进行分组统计的实现
2021/06/18 Python
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技