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 相关文章推荐
python人人网登录应用实例
Sep 26 Python
python实现连接mongodb的方法
May 08 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
python pcm音频添加头转成Wav格式文件的方法
Jan 09 Python
Python3中编码与解码之Unicode与bytes的讲解
Feb 28 Python
python SVD压缩图像的实现代码
Nov 05 Python
python如何查看安装了的模块
Jun 23 Python
pytorch 多分类问题,计算百分比操作
Jul 09 Python
Python常用类型转换实现代码实例
Jul 28 Python
python dict如何定义
Sep 02 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 Python
python 如何用map()函数创建多线程任务
Apr 07 Python
python将图片转为矢量图的方法步骤
Mar 30 #Python
一文搞懂如何实现Go 超时控制
golang中的空接口使用详解
Mar 30 #Python
在 Golang 中实现 Cache::remember 方法详解
Mar 30 #Python
Python离线安装openpyxl模块的步骤
解决Jupyter-notebook不弹出默认浏览器的问题
Python爬取科目四考试题库的方法实现
You might like
php摘要生成函数(无乱码)
2012/02/04 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
jQuery实现获取元素索引值index的方法
2016/09/18 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
零基础写python爬虫之神器正则表达式
2014/11/06 Python
python删除过期文件的方法
2015/05/29 Python
python实现键盘输入的实操方法
2019/07/16 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
python基础 range的用法解析
2019/08/23 Python
python的setattr函数实例用法
2020/12/16 Python
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
临床医师专业个人自我评价范文
2013/11/07 职场文书
初中三年毕业生的自我评价分享
2014/02/14 职场文书
财务科科长岗位职责
2014/03/10 职场文书
售房协议书范本
2015/08/11 职场文书
小学班主任工作随笔
2015/08/15 职场文书
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python