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脚本操作MongoDB的教程
Apr 16 Python
Python中http请求方法库汇总
Jan 06 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
python学生管理系统代码实现
Apr 05 Python
利用python的socket发送http(s)请求方法示例
May 07 Python
在VS2017中用C#调用python脚本的实现
Jul 31 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
Python笔记之代理模式
Nov 20 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 Python
详解anaconda离线安装pytorchGPU版
Sep 08 Python
Python日志器使用方法及原理解析
Sep 27 Python
python将图片转为矢量图的方法步骤
Mar 30 #Python
一文搞懂如何实现Go 超时控制
golang中的空接口使用详解
Mar 30 #Python
在 Golang 中实现 Cache::remember 方法详解
Mar 30 #Python
Python离线安装openpyxl模块的步骤
解决Jupyter-notebook不弹出默认浏览器的问题
Python爬取科目四考试题库的方法实现
You might like
基于empty函数的判断详解
2013/06/17 PHP
smarty中js的调用方法示例
2014/10/27 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
javascript 有用的脚本函数
2009/05/07 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
Python中属性和描述符的正确使用
2016/08/23 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
2014年法制宣传日活动方案
2014/11/02 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS