爬虫模块介绍--selenium (浏览器自动化测试工具,模拟可以调用浏览器模拟人操作浏览器)
selenium主要的用途就是控制浏览器,模仿真人操作浏览器的行为
模块安装:pip3 install selenium
需要控制的浏览器
from selenium import webdriver # 调用这个模块
browser=webdriver.Chrome() # 控制谷歌浏览器
PS:调用谷歌浏览器需要下载一个驱动:http://npm.taobao.org/mirrors/chromedriver/2.38/ # 下载对应版本的即可
PS:解压后得到一个exe程序,可以放到项目的根路径,也可以放到python的根路径下(放入python的安装路径下不用在代码中配置驱动路径)
browser=webdriver.Firefox() # 控制火狐浏览器
browser=webdriver.PhantomJS()
browser=webdriver.Safari() # 控制苹果的浏览器
browser=webdriver.Edge() # 控制ie浏览器
from selenium.webdriver.common.keys import Keys # 导入这个模块就是可以模拟键盘操作
from selenium import webdriver # 导入这个模块可以控制浏览器
selenium模块下的所有方法
find_element和find_elements的区别,没有s的就是只找出匹配的第一个,有s的就是找出匹配到所有的
find_element_by_id # 根据id查找控件
find_element_by_link_text # 根据链接的名字模糊查找控件
PS:注意这个链接就是只link类型的标签,非链接标签用这个是无法找到控件的
find_element_by_partial_link_text # 模糊匹配
find_element_by_tag_name # 通过标签名查找
find_element_by_class_name # 根据类名查找控件
find_element_by_name # 根据标签名查找控件
find_element_by_css_selector # 通过css选择器取控件
find_element_by_xpath
上述均可以改写成find_element(By.ID,'kw')的形式
find_elements_by_xxx的形式是查找到多个元素,结果为列表
selenium 模块的基本使用
from selenium import webdriver
import time
bro = webdriver.Chrome() # 实例化对象,这个对象就是需要控制的浏览器
bro.get('http://www.baidu.com') # 向一个地址发送一个请求
print(bro.page_source) # 拿到的页面内容用page_source
time.sleep(5) bro.close() # 这个就是关闭浏览器,一定要写
根据id查找控件
from selenium import webdriver
import time '''打开百度在百度搜索西瓜'''
try:
bro = webdriver.Chrome() # 实例化对象,这个对象就是需要控制的浏览器
bro.get('http://www.baidu.com') # 向一个地址发送一个请求
input_k = bro.find_element_by_id('kw') # 根据id找到控件
key = input('请输入内容: ')
input_k.send_keys(key) # 向控件写入内容
time.sleep(10)
except Exception as e:
print(e) # finally就是不管在什么情况下都关闭浏览器
finally:
bro.close() # 这个就是关闭浏览器,一定要写
from selenium import webdriver
import time 自动登录百度
try:
bro = webdriver.Chrome() # 实例化对象,这个对象就是需要控制的浏览器 # 隐式等待,一般都用隐式等待
bro.implicitly_wait(3) # 隐示等待 所有标签在找的时候,没有加载就等三秒 bro.get('http://www.baidu.com') # 向一个地址发送一个请求
time.sleep(3) login_btn = bro.find_element_by_link_text('登录') # 通过链接名查找到登陆的控件
login_btn.click() # 点击控件
login_user = bro.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn') # 通过di找到用户名登陆的控件
login_user.click() # 点击控件
username_input = bro.find_element_by_id('TANGRAM__PSP_10__userName') # 通过id找到输入账号的控件
username_input.send_keys('15618935321') # 输入账号
password_input = bro.find_element_by_id('TANGRAM__PSP_10__password') # 通过id找到输入密码的控件
password_input.send_keys('Pq12344321') # 输入密码
time.sleep(3) # 这里一定要等待几秒,因为验证码的页面时动态生成的,所以程序直接走是取不到验证码发送控件的,隐式等待无效,如果不等待几秒,则程序直接报错取不到验证码的控件
login_code = bro.find_element_by_id('TANGRAM__PSP_10__submit') # 找到登陆确定的控件
login_code.click() # 点击控件
time.sleep(5)
click_ver_code = bro.find_element_by_id('TANGRAM__39__button_send_mobile') # 找到发送验证码的控件
click_ver_code.click() # 点击控件
ver_code = bro.find_element_by_id('TANGRAM__39__input_vcode') # 找到输入验证码的控件
ver_input = input('请输入验证码: ') # 让用户输入验证码
time.sleep(30)
ver_code.send_keys(ver_input) # 将输入的内容写到控件
log_10 = bro.find_element_by_id('TANGRAM__39__button_submit') # 找到确定控件
log_10.click() # 点击确定登陆成功
time.sleep(30)
except Exception as e:
print(e) # finally就是不管在什么情况下都关闭浏览器
finally:
bro.close() # 这个就是关闭浏览器,一定要写
PS:程序走的很快,一瞬间,但是页面加载内容需要时间,所以需要用到隐式等待
wait = WebDriverWait(broswer, 3) # 显示等待,元素没加载出来,就等三秒,指定控件等待,每个控件都要写比较麻烦
broswer.implicitly_wait(3) # 隐示等待 所有标签在找的时候,没有加载就等三秒,只要在开头写一个比较方便
PS:对于动态生成的页面隐式等待是无效的,所以针对这种页面在程序中必须让程序time.sleep等待几秒才能取到控件
爬取京东手机商品的信息
from selenium import webdriver
from selenium.webdriver.common.keys import Keys # 控制键盘需要这个模块
from selenium.webdriver import ActionChains # 控制键盘需要这个模块组合Keys模块使用
import time,requests # 首页的操作
def spider():
try:
# 进入首页输入搜索信息
bro = webdriver.Chrome() # 指定浏览器
bro.implicitly_wait(5) # 隐式等待
bro.get('https://www.jd.com/') # 打开首页
bro.maximize_window() # 这个参数是将浏览器全屏
input_serch = bro.find_element_by_id('key') # 获取输入框
input_serch.send_keys('手机') # 输入内容
input_serch.send_keys(Keys.ENTER) # 这个就是对着输入框模拟前盘敲回车
time.sleep(3)
actions = ActionChains(bro) # 实例化对象用来模拟浏览器的滚动条向下拉
for i in range(0,5):
time.sleep(1)
actions.key_down(Keys.PAGE_DOWN).perform() # 这个方法是按一次键盘PgDn的按键,方法每次只能按一下,所以需要for循环让页面到底部
# 调用方法
get_goods(bro)
except Exception as e:
print(e)
finally:
bro.close() count = 0 # 这个是计数器 def get_goods(bro):
# 取出商品信息
li_list = bro.find_elements_by_class_name('gl-item')
global count
for li in li_list:
# 通过css选择器找出控件
p_name = li.find_element_by_css_selector('.p-name a').get_attribute('title') # 取标签里面的属性
price = li.find_element_by_css_selector('.p-price i').text # 取出控件里面的字符
commit = li.find_element_by_css_selector('.p-commit strong a').text # 取出控件里面的字符
url =li.find_element_by_css_selector('.p-name a').get_attribute('href') # 驱取出控件里面的属性的值
img_url = li.find_element_by_css_selector('.p-img a img').get_attribute('src') # 取到标签内的属性
# 调用保存图片方法
# save_img(img_url)
count += 1
print(
'''
序号:%s
商品名称: %s
商品价格:%s
商品地址: %s
商品评论数: %s
商品图片地址: %s
'''%(count,p_name,price,url,commit,img_url)
) # 点击下一页
click_next = bro.find_element_by_css_selector('.pn-next em')
time.sleep(2)
click_next.click()
time.sleep(5)
# 这里调用进入首页函数,这就是递归
get_goods(bro)
def save_img(data):
'''保存函数'''
import time
res = requests.get(data)
with open('img/%s.jpg'%(time.time()),'wb')as f:
f.write(res.content) if __name__ == '__main__':
spider()
selenium的其他方法
清空输入框
import time
time.sleep(3) input_tag=browser.find_element_by_id('twotabsearchtextbox')
input_tag.clear() #清空输入框
input_tag.send_keys('iphone7plus')
button=browser.find_element_by_css_selector('#nav-search > form > div.nav-right > div > input')
button.click() 调用js代码:可以用js代码获取页面的信息
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素 try:
browser=webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('alert("hello world")') #打印警告
finally:
browser.close()
打开选项卡和选项卡的切换
import time
from selenium import webdriver browser=webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()') # window.open就是新建一个选项卡,调用的就是windows print(browser.window_handles) #获取所有的选项卡
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(10)
browser.switch_to_window(browser.window_handles[0])
browser.get('https://www.sina.com.cn')
browser.close()
爬虫模块介绍--selenium (浏览器自动化测试工具,模拟可以调用浏览器模拟人操作浏览器)的更多相关文章
- Selenium浏览器自动化测试工具
目录 Selenium浏览器自动化测试工具 Selenium模块在爬虫中的使用 Python简单使用Selenium Selenium的基本操作 Selenium爬取动态加载的数据 Selenium动 ...
- python模块介绍-locustio:性能测试工具locustio
转自:http://automationtesting.sinaapp.com/blog/m_locustio_doc python测试文章 http://weibo.com/cizhenshi?is ...
- Selenium功能自动化测试工具
Selenium也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Firefox.Mozilla Suite ...
- Selenide 阶段性总结介绍(UI自动化测试工具)
今天给大家介绍一个比较新的UI自动化测试工具-- Selenide.确实是比较新的,国内应该还没有多少人用它.在百度和google上你只能搜到一个中文帖子简单介绍了一下.如果你想用这个工具,不可避免的 ...
- 爬虫模块之selenium模块
一 模块的介绍 selenium模块最开始是一个自动化测试的工具,驱动浏览器完全模拟浏览器自动测试. from selenium import webdriver # 驱动浏览器 browser=we ...
- puppeteer:官方出品的chrome浏览器自动化测试工具
puppeteer发布应该有一段时间了,这两天正好基于该工具写了一些自动化解决方案,在这里抛砖引给大家介绍一下. 官方描述: Puppeteer is a Node library which pro ...
- 爬虫模块介绍--request(发送请求模块)
爬虫:可见即可爬 # 每个网站都有爬虫协议 基础爬虫需要使用到的三个模块 requests 模块 # 模拟发请求的模块 PS:python原来有两个模块urllib和urllib的升级urlli ...
- 爬虫模块介绍--Beautifulsoup (解析库模块,正则)
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时 ...
- Selenium 2自动化测试实战21【调用JavaScript(控制浏览器的滚动条)】
一.调用JavaScript(控制浏览器的滚动条) WebDriver提供了execute_script()方法来执行JavaScript代码.用于调整浏览器滚动条位置的JavaScript代码如下 ...
随机推荐
- Vue的自定义组件之间的数据传递
一,父级传向子级 1,在子级的属性中添加props:['myname',......],参数可以传多个,看具体而定: 2,在父级data中定义好需要传递的变量数据,例如name:"rose& ...
- 最新的 cocoapods 安装与使用(2019.04)
cocoapods简介: cocoapods 是iOS的类库管理工具,可以让开发者很方便集成各种第三方库,而不用去网站上一个个下载,再一个个文件夹的拖进项目中,还得添加相关的系统依赖库.只需要安装好c ...
- CodeForce-955C
C. Sad powerstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutput ...
- h5或者微信端吊起app
[https://www.cnblogs.com/shadajin/p/5724117.html]! 魔窗sdk http://www.magicwindow.cn/doc/universal-lin ...
- 解决eclipse的自动换行问题。
安装方法:使用Eclipse 的自动升级功能,菜单栏选Help → install new Software 点解Add按钮,在“ Name ”中填入“ wordwrap ”,“ URL ”中填入“ ...
- 部署安装kubernetes client-python,执行pip install setup.py时报错
之前在本地安装过kubernetes的python库,安装下来一切正常,但今天换到测试机器上去部署,确保错了,具体步骤如下. 第一步,克隆代码,执行以下命令: # git clone --rec ...
- generator mybatis逆向工程
mybatis逆向工程:根据数据库中的表在项目中生成对应的 实体类,dao接口与mapper.xml映射文件 在eclipse中,以插件的形式的存在,把设置好的配置文件,直接通过eclipse中的插件 ...
- 原生js实现淘宝图片切换
这个淘宝图片切换具体效果就是:鼠标移上底部一行中的小图片,上面大图片区域就会显示对应的图片. gif图片看起来还挺酷的,其实实现很简单,用原生js绑定事件改变大图片区域的src. 上代码,html部分 ...
- 网站优化之Apache2.4GZIP功能
现在主流浏览器都支持资源文件压缩传输(通过设置http header的Content-Encoding=gzip). 网站优化之一就是开通服务器端的gzip功能,通过对资源文件压缩传输,加快了页面响应 ...
- java往MongDB导入大量数据
好几月没写博客了~~~ --------------------- 在公司最近在搞用java往MongDB导入数据 现在是我刚导入2000W条数据了 所以就先写上吧,废话也不多说了 MongDB 我本 ...