python爬虫--selenium模块


Posted in Python onMarch 31, 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 相关文章推荐
python 正则式 概述及常用字符
May 07 Python
Python网页解析利器BeautifulSoup安装使用介绍
Mar 17 Python
在Python程序中实现分布式进程的教程
Apr 28 Python
Python3写入文件常用方法实例分析
May 22 Python
Android应用开发中Action bar编写的入门教程
Feb 26 Python
Python装饰器基础详解
Mar 09 Python
python django 访问静态文件出现404或500错误
Jan 20 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
May 15 Python
django传值给模板, 再用JS接收并进行操作的实例
May 28 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
python使用pygame创建精灵Sprite
Apr 06 Python
Python实现灰色关联分析与结果可视化的详细代码
Mar 25 Python
【超详细】八大排序算法的各项比较以及各自特点
pandas 操作 Excel操作总结
Mar 31 #Python
字典算法实现及操作 --python(实用)
如何利用python和DOS获取wifi密码
python爬虫selenium模块详解
Mar 30 #Python
python将图片转为矢量图的方法步骤
Mar 30 #Python
一文搞懂如何实现Go 超时控制
You might like
MySql中正则表达式的使用方法描述
2008/07/30 PHP
用PHP实现递归循环每一个目录
2010/08/08 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
php获取根域名方法汇总
2014/10/28 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
JavaScript知识点整理
2015/12/09 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
axios基本入门用法教程
2017/03/25 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python3实现并发检验代理池地址的方法
2016/09/18 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
财务会计实习报告体会
2013/12/20 职场文书
会计工作态度自我评价
2015/03/06 职场文书
民事调解书范文
2015/05/20 职场文书
刑事上诉状(量刑过重)
2015/05/23 职场文书
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python