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使用nntp读取新闻组内容的方法
May 08 Python
Python制作简易注册登录系统
Dec 15 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
快速了解Python相对导入
Jan 12 Python
python 调用有道api接口的方法
Jan 03 Python
Django如何开发简单的查询接口详解
May 17 Python
python3.7 sys模块的具体使用
Jul 22 Python
Python实现数值积分方式
Nov 20 Python
Django DRF认证组件流程实现原理详解
Aug 17 Python
python实现扫雷游戏的示例
Oct 20 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
Oct 27 Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 Python
【超详细】八大排序算法的各项比较以及各自特点
pandas 操作 Excel操作总结
Mar 31 #Python
字典算法实现及操作 --python(实用)
如何利用python和DOS获取wifi密码
python爬虫selenium模块详解
Mar 30 #Python
python将图片转为矢量图的方法步骤
Mar 30 #Python
一文搞懂如何实现Go 超时控制
You might like
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
基于vue.js实现的分页
2018/03/13 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
uni-app 支持多端第三方地图定位的方法
2020/01/03 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
Swiper实现导航栏滚动效果
2020/10/16 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
简单实现Python爬取网络图片
2018/04/01 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
Python 学习教程之networkx
2019/04/15 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
Python目录和文件处理总结详解
2019/09/02 Python
python3 xpath和requests应用详解
2020/03/06 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
创先争优活动承诺书
2014/08/30 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技