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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
Python实现给文件添加内容及得到文件信息的方法
May 28 Python
Python使用迭代器捕获Generator返回值的方法
Apr 05 Python
python中安装模块包版本冲突问题的解决
May 02 Python
Python冲顶大会 快来答题!
Jan 17 Python
Python列表(List)知识点总结
Feb 18 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 Python
Python参数类型以及常见的坑详解
Jul 08 Python
浅析pandas 数据结构中的DataFrame
Oct 12 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
python入门之算法学习
Apr 22 Python
python 离散点图画法的实现
Apr 01 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 radio 单选框获取与保持值的实现代码
2010/05/15 PHP
php中用foreach来操作数组的代码
2011/07/17 PHP
php文件缓存方法总结
2016/03/16 PHP
Div Select挡住的解决办法
2008/08/07 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
vue中watch的用法汇总
2020/12/28 Vue.js
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
详解Python核心对象类型字符串
2018/02/11 Python
python实现京东秒杀功能
2018/07/30 Python
对Python中plt的画图函数详解
2018/11/07 Python
python3 线性回归验证方法
2019/07/09 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
外联部演讲稿
2014/05/24 职场文书
中秋手机店促销方案
2014/06/16 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis