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实现自动登录人人网并采集信息的方法
Jun 28 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
Python2与python3中 for 循环语句基础与实例分析
Nov 20 Python
Django实战之用户认证(初始配置)
Jul 16 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
解决安装python库时windows error5 报错的问题
Oct 21 Python
详解PyCharm+QTDesigner+PyUIC使用教程
Jun 13 Python
python开启debug模式的方法
Jun 27 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
一文轻松掌握python语言命名规范规则
Jun 18 Python
python3代码输出嵌套式对象实例详解
Dec 03 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 类商品秒杀计时实现代码
2010/05/05 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
js判断字符长度及中英文数字等
2014/03/19 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
javascript圆盘抽奖程序实现原理和完整代码例子
2014/06/03 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
详细解析Python当中的数据类型和变量
2015/04/25 Python
Python检测网站链接是否已存在
2016/04/07 Python
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
Python实现元素等待代码实例
2019/11/11 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
python实现单机五子棋
2020/08/28 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
学生安全承诺书
2014/05/22 职场文书
市级三好学生评语
2014/12/29 职场文书
自主招生自荐信格式
2015/03/04 职场文书
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis