python爬虫selenium模块详解


Posted in Python onMarch 30, 2021

selenium模块

selenium基本概念

selenium优势

  • 便捷的获取网站中动态加载的数据
  • 便捷实现模拟登陆

selenium使用流程:

1.环境安装:pip install selenium

2.下载一个浏览器的驱动程序(谷歌浏览器)

3.实例化一个浏览器对象

基本使用

代码

from selenium import webdriver
from lxml import etree
from time import sleep

if __name__ == '__main__':

 bro = webdriver.Chrome(r"E:\google\Chrome\Application\chromedriver.exe")
 bro.get(url='http://scxk.nmpa.gov.cn:81/xk/')

 page_text = bro.page_source
 tree = etree.HTML(page_text)
 li_list = tree.xpath('//*[@id="gzlist"]/li')
 for li in li_list:
  name = li.xpath('./dl/@title')[0]
  print(name)
 sleep(5)
 bro.quit()

基于浏览器自动化的操作

代码

#编写基于浏览器自动化的操作代码

- 发起请求: get(url)

- 标签定位: find系列的方法

- 标签交互: send_ keys( 'xxx' )

- 执行js程序: excute_script('jsCod')

- 前进,后退: back(),forward( )

- 关闭浏览器: quit()

代码

https://www.taobao.com/

from selenium import webdriver
from time import sleep

bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe")

bro.get(url='https://www.taobao.com/')

#标签定位
search_input = bro.find_element_by_id('q')
sleep(2)
#执行一组js代码,使得滚轮向下滑动
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(2)
#标签交互
search_input.send_keys('女装')
button = bro.find_element_by_class_name('btn-search')
button.click()

bro.get('https://www.baidu.com')
sleep(2)
bro.back()
sleep(2)
bro.forward()
sleep(5)
bro.quit()

selenium处理iframe:

- 如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id)

- 动作链(拖动) : from selenium. webdriver import ActionChains
	- 实例化一个动作链对象: action = ActionChains (bro)
	- click_and_hold(div) :长按且点击操作
	- move_by_offset(x,y)
	- perform( )让动作链立即执行
	- action.release( )释放动作链对象

代码

https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable

from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe")

bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')

bro.switch_to.frame('iframeResult')

div = bro.find_element_by_id('draggable')

#动作链
action = ActionChains(bro)
action.click_and_hold(div)

for i in range(5):
 action.move_by_offset(17,0).perform()
 sleep(0.3)

#释放动作链
action.release()

bro.quit()

selenium模拟登陆QQ空间

代码

https://qzone.qq.com/

from selenium import webdriver
from time import sleep


bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe")
bro.get('https://qzone.qq.com/')
bro.switch_to.frame("login_frame")

switcher = bro.find_element_by_id('switcher_plogin')
switcher.click()

user_tag = bro.find_element_by_id('u')
password_tag = bro.find_element_by_id('p')
user_tag.send_keys('1234455')
password_tag.send_keys('qwer123')
sleep(1)

but = bro.find_element_by_id('login_button')
but.click()

无头浏览器和规避检测

代码

from selenium import webdriver
from time import sleep
#实现无可视化界面
from selenium.webdriver.chrome.options import Options
#实现规避检测
from selenium.webdriver import ChromeOptions

#实现无可视化界面
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
#实现规避检测
option = ChromeOptions()
option.add_experimental_option('excludeSwitches',['enable-automation'])

bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe",chrome_options=chrome_options,options=option)

bro.get('https://www.baidu.com')
print(bro.page_source)
sleep(2)
bro.quit()

到此这篇关于python爬虫selenium模块详解的文章就介绍到这了,更多相关python爬虫selenium模块内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
python绘制直方图和密度图的实例
Jul 08 Python
python设计tcp数据包协议类的例子
Jul 23 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
pandas DataFrame创建方法的方式
Aug 02 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
python扫描线填充算法详解
Feb 19 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
如何通过Python实现RabbitMQ延迟队列
Nov 28 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 Python
selenium+超级鹰实现模拟登录12306
Jan 24 Python
python将图片转为矢量图的方法步骤
Mar 30 #Python
一文搞懂如何实现Go 超时控制
golang中的空接口使用详解
Mar 30 #Python
在 Golang 中实现 Cache::remember 方法详解
Mar 30 #Python
Python离线安装openpyxl模块的步骤
解决Jupyter-notebook不弹出默认浏览器的问题
Python爬取科目四考试题库的方法实现
You might like
zf框架的Filter过滤器使用示例
2014/03/13 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
简明 Python 基础学习教程
2007/02/08 Python
python读取html中指定元素生成excle文件示例
2014/04/03 Python
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
pandas实现选取特定索引的行
2018/04/20 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
CentOS7安装Python3的教程详解
2019/04/10 Python
python交易记录链的实现过程详解
2019/07/03 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
python多进程重复加载的解决方式
2019/12/13 Python
鲜果饮品店创业计划书
2014/01/21 职场文书
行政办公室岗位职责
2014/03/18 职场文书
捐书仪式主持词
2015/07/04 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
mysql的数据压缩性能对比详情
2021/11/07 MySQL