selenium模块
什么是selenium
一款基于浏览器自动化的模块
和爬虫的关联
模拟登陆
获取动态数据
#演示程序 from selenium import webdriver from time import sleep # 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的 driver = webdriver.Chrome(r'./chromedriver.exe') # 用get打开百度页面 driver.get("http://www.baidu.com") # 查找页面的“设置”选项,并进行点击 driver.find_elements_by_link_text('设置')[0].click() sleep(2) # # 打开设置后找到“搜索设置”选项,设置为每页显示50条 driver.find_elements_by_link_text('搜索设置')[0].click() sleep(2) # 选中每页显示50条 m = driver.find_element_by_id('nr') sleep(2) m.find_element_by_xpath('//*[@id="nr"]/option[3]').click() m.find_element_by_xpath('.//option[3]').click() sleep(2) # 点击保存设置 driver.find_elements_by_class_name("prefpanelgo")[0].click() sleep(2) # 处理弹出的警告页面 确定accept() 和 取消dismiss() driver.switch_to_alert().accept() sleep(2) # 找到百度的输入框,并输入 美女 driver.find_element_by_id('kw').send_keys('美女') sleep(2) # 点击搜索按钮 driver.find_element_by_id('su').click() sleep(2) # 在打开的页面中找到“Selenium - 开源中国社区”,并打开这个页面 driver.find_elements_by_link_text('美女_百度图片')[0].click() sleep(3) # 关闭浏览器 driver.quit()
selenium如何获取动态加载数据
环境的安装:pip install selenium
基本使用流程
1.from selenium import webdriver
2.结合着某一款浏览器驱动程序实例化一个浏览器对象 bro=webdriver.Chrome(executable_path='./chromedriver.exe')
3.下载浏览器驱动:http://chromedriver.storage.googleapis.com/index.html 将下载的驱动放在对应爬虫项目的文件夹里面
3.1查看驱动和浏览器版本的映射系:http://blog.csdn.net/huilan_same/article/details/51896672
4.发起请求: bro.get(url='http://125.35.6.84:81/xk/')
5.通过xpath或者bs4 获取当前页面的源码数据
page_text=bro.page_source soup=BeautifulSoup(page_text,'lxml') dl_list=soup.select('#gzlist > li > dl') for dl in dl_list: print(dl.string)
编写自动化操作代码
#low版爬取药监局的数据
from bs4 import BeautifulSoup #引入webdriver from selenium import webdriver #实例化浏览器对象,参数executable_path bro=webdriver.Chrome(executable_path='./chromedriver.exe') #发起一个请求 bro.get(url='http://125.35.6.84:81/xk/') #获取当前浏览器页面的源码数据 page_text=bro.page_source soup=BeautifulSoup(page_text,'lxml') dl_list=soup.select('#gzlist > li > dl') for dl in dl_list: print(dl.string)
selenium的详细用法
1.实例化浏览器(参数为浏览器的驱动) bro = webdriver.Chrome(executable_path='./chromedriver.exe')
2.发起请求 bro.get('https://www.taobao.com/')
3.通过find系列定位标签 search_input = bro.find_element_by_id('q')
find_element_by_id
find_element_by_xpath
4.执行js代码,滚动刷新 bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
5.点击按钮事件 btn.click()
6.退出浏览器 bro.quit()
from selenium import webdriver from time import sleep #实例化一个浏览器对象 bro = webdriver.Chrome(executable_path='./chromedriver.exe') bro.get('https://www.taobao.com/') #在淘宝首页搜索框中录入一个商品名称 search_input = bro.find_element_by_id('q') #find系列的函数是用作于定位标签 #向定位到的标签中录入一个商品名称 search_input.send_keys('华为') sleep(2) #如何执行js代码,滚动刷新 bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') sleep(2) bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') sleep(2) btn = bro.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button') btn.click() sleep(2) bro.quit()
执行动作链
原文地址:https://www.cnblogs.com/l1222514/p/11042470.html
- 在网页里让文本框只能输入数字的一种方法。外加回车换Tab
- 如何用Python从零开始实现简单的线性回归
- 使命必达: 深入剖析WCF的可靠会话[编程篇](上)
- 页面回发后,让页面自动滚动到指定位置的一种简单的方法
- [自定义服务器控件] 第二步:下拉列表框。
- WCF服务端运行时架构体系详解[中篇]
- [自定义服务器控件] 第三步:CheckBoxList。
- 用Keras通过Python进行卷积神经网络的手写数字识别
- 反射的另类实现。(不知道这么用还算不算反射了?)
- 如何让普通变量也支持事务回滚?
- What is "Type" in managed heap?
- 一个特殊场景的 LR 预测优化 Trick
- 你知道Unity IoC Container是如何创建对象的吗?
- 发布一个锁定行列的一种方法。(实现Excel里的冻结窗格的功能)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- AtCoder Beginner Contest 155
- Codeforces Round #620 (Div. 2) A~~D
- DFS+记忆化搜索 -- 简单练习
- AtCoder Beginner Contest 154
- map + pair用法练习
- 蛇形矩阵
- 【SpringBoot WebFlux 系列】 header 参数解析
- URL 去重的 6 种方案!(附详细实现代码)
- 原生JS封装拖动验证滑块你会吗?
- 企业远程视频会议云服务EasyRTC-SFU版本支持 https 功能设计逻辑
- python之编码解码、字符串常用方法
- python之列表
- 一文带你深入理解Mysql索引底层数据结构与算法
- CGI & FastCGI
- 可输出sql的PrepareStatement封装