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上基于Markov链生成伪随机文本的教程
Apr 17 Python
在Django中创建动态视图的教程
Jul 15 Python
Fiddler如何抓取手机APP数据包
Jan 22 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
使用Python脚本和ADB命令实现卸载App
Feb 10 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
May 08 Python
Python3.X 线程中信号量的使用方法示例
Jul 24 Python
pyspark操作MongoDB的方法步骤
Jan 04 Python
Python实现网站表单提交和模板
Jan 15 Python
Python基于gevent实现高并发代码实例
May 15 Python
python 使用cycle构造无限循环迭代器
Dec 02 Python
Python爬取科目四考试题库的方法实现
Mar 30 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日期处理函数 整型日期格式
2011/01/12 PHP
PHP禁止页面缓存的代码
2011/10/23 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
jQuery JSON的解析方式分享
2011/04/05 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
2011/04/16 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
javaScript实现一个队列的方法
2020/07/14 Javascript
寻找网站后台地址的python脚本
2014/09/01 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
计算机专业毕业生自荐信范文
2014/03/06 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
详解Redis复制原理
2021/06/04 Redis
mysql序号rownum行号实现方式
2022/12/24 MySQL