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每隔N秒运行指定函数的方法
Mar 16 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
使用Python脚本来控制Windows Azure的简单教程
Apr 16 Python
浅谈python中的变量默认是什么类型
Sep 11 Python
Python语言实现百度语音识别API的使用实例
Dec 13 Python
对Python3使运行暂停的方法详解
Feb 18 Python
python 叠加等边三角形的绘制的实现
Aug 14 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
python构造函数init实例方法解析
Jan 19 Python
python能做哪方面的工作
Jun 15 Python
python super()函数的基本使用
Sep 10 Python
Python接口自动化测试框架运行原理及流程
Nov 30 Python
【超详细】八大排序算法的各项比较以及各自特点
pandas 操作 Excel操作总结
Mar 31 #Python
字典算法实现及操作 --python(实用)
如何利用python和DOS获取wifi密码
python爬虫selenium模块详解
Mar 30 #Python
python将图片转为矢量图的方法步骤
Mar 30 #Python
一文搞懂如何实现Go 超时控制
You might like
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
JavaScript 学习点滴记录
2009/04/24 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
详解vue-router基本使用
2017/04/18 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
Python模块学习 filecmp 文件比较
2012/08/27 Python
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
python logging日志模块的详解
2017/10/29 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
python 自动重连wifi windows的方法
2018/12/18 Python
python多进程并发demo实例解析
2019/12/13 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
python爬虫基础之urllib的使用
2020/12/31 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
TCP/IP的分层模型
2013/10/27 面试题
酒店采购员岗位职责
2014/03/14 职场文书
民主生活会汇报材料
2014/12/15 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
会议主持人开场白台词
2015/05/28 职场文书
张思德观后感
2015/06/09 职场文书
李强感恩观后感
2015/06/17 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL