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重新引入被覆盖的自带function
Jul 16 Python
python数据结构之列表和元组的详解
Sep 23 Python
python中matplotlib的颜色及线条控制的示例
Mar 16 Python
完美解决安装完tensorflow后pip无法使用的问题
Jun 11 Python
详解python的argpare和click模块小结
Mar 31 Python
Python3.5内置模块之time与datetime模块用法实例分析
Apr 27 Python
python实现beta分布概率密度函数的方法
Jul 08 Python
python matplotlib 绘图 和 dpi对应关系详解
Mar 14 Python
基于Python的Jenkins的二次开发操作
May 12 Python
python 利用toapi库自动生成api
Oct 19 Python
Python如何批量生成和调用变量
Nov 21 Python
python中time tzset()函数实例用法
Feb 18 Python
python将图片转为矢量图的方法步骤
Mar 30 #Python
一文搞懂如何实现Go 超时控制
golang中的空接口使用详解
Mar 30 #Python
在 Golang 中实现 Cache::remember 方法详解
Mar 30 #Python
Python离线安装openpyxl模块的步骤
解决Jupyter-notebook不弹出默认浏览器的问题
Python爬取科目四考试题库的方法实现
You might like
discuz的php防止sql注入函数
2011/01/17 PHP
destoon官方标签大全
2014/06/20 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
PHP分页类集锦
2014/11/18 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
php中二分法查找算法实例分析
2016/09/22 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
2010/06/11 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
JQuery写动态树示例代码
2013/07/31 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
2016/10/10 Javascript
AngularJS 中的数据源的循环输出
2017/10/12 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
Python分析学校四六级过关情况
2017/11/22 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
python 判断网络连通的实现方法
2018/04/22 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
Python hashlib模块实例使用详解
2019/12/24 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
大学新闻系自荐书
2014/05/31 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书
php png失真的原因及解决办法
2021/11/17 PHP