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的Django框架中的数据库配置指南
Jul 17 Python
python利用MethodType绑定方法到类示例代码
Aug 27 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 Python
Django 跨域请求处理的示例代码
May 02 Python
python中aioysql(异步操作MySQL)的方法
Apr 11 Python
python实现趣味图片字符化
Apr 30 Python
python使用mitmproxy抓取浏览器请求的方法
Jul 02 Python
Django中celery执行任务结果的保存方法
Jul 12 Python
详解Python3 pandas.merge用法
Sep 05 Python
python 遍历pd.Series的index和value
Nov 26 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
Apr 22 Python
Python urlopen()参数代码示例解析
Dec 10 Python
【超详细】八大排序算法的各项比较以及各自特点
pandas 操作 Excel操作总结
Mar 31 #Python
字典算法实现及操作 --python(实用)
如何利用python和DOS获取wifi密码
python爬虫selenium模块详解
Mar 30 #Python
python将图片转为矢量图的方法步骤
Mar 30 #Python
一文搞懂如何实现Go 超时控制
You might like
php PDO中文乱码解决办法
2009/07/20 PHP
PHP实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
PHP计算加权平均数的方法
2015/07/16 PHP
3种php生成唯一id的方法
2015/11/23 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
JS获取后台Cookies值的小例子
2013/03/04 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
[03:24]CDEC.Y赛前采访 努力备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
Python截图并保存的具体实例
2021/01/14 Python
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
个人求职简历的自我评价
2013/10/19 职场文书
董事长职责范文
2013/11/08 职场文书
学生评语大全
2014/04/18 职场文书
物流专业求职信
2014/06/30 职场文书
基层工作经验证明样本
2014/11/16 职场文书
嘉宾邀请函
2015/01/31 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书