爬虫模块介绍--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代码如下 ...
随机推荐
- 根据关键字获取高德地图poi信息
根据关键字获取高德地图poi信息 百度地图和高德地图都提供了根据关键字获取相应的poi信息的api,不过它们提供给普通开发者使用的次数有限无法满足要求.其次百度地图返回的poi中位置信息不是经纬度,而 ...
- MOS管应用概述(四):基本参数
mos管的基本参数,大家熟悉的必然是Ids电流,Ron导通电阻,Vgs的阈值电压,Cgs.Cgd.Cds这几项,然而在高速应用中,开关速度这个指标比较重要.<ignore_js_op> 上 ...
- Altium Designer 使用中的小技巧1
在布线的过程中所学到的一点技巧:在没有画原理图的情况下,直接绘制PCB板,需要敷铜Ppolygon pour,但没有网络标号,就无法连上要连的网络,焊盘,怎么办呢?需要事先将需要连接在一起的元器件(焊 ...
- python 全栈开发笔记 1
将自己的姓名用进制表示出来 #自己姓名的进制表示 name=input('请输入你的名字:') for i in name: print(i) # python 3 中是按字符进行循环的 bytes_ ...
- java 秒时间格式化
public static String durationFormat(Integer totalSeconds) { if (totalSeconds == null || totalSeconds ...
- clusterware启动顺序——OHASD
Clusterware启动顺序 [root@ebsdb1 etc]# crsctl check crs CRS-4638: Oracle High Availability Services is ...
- Problem E: 平面上的点和线——Point类、Line类 (V)
Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定,两点确定一条线段.现在我们封装一个“Point类”和“Line类”来实现平面上的点的操作. 根据“append ...
- vue-cli title 里面怎动态显示文字
在路由里每个都添加一个meta[{ path:'/login', meta: { title: '登录页面' }, component:'login' }] main.js里面加如下代码: ...
- pytest自动化6:pytest.mark.parametrize装饰器--测试用例参数化
前言:pytest.mark.parametrize装饰器可以实现测试用例参数化. parametrizing 1. 下面是一个简单是实例,检查一定的输入和期望输出测试功能的典型例子 2. 标记单 ...
- Linux:OpenSUSE系统的安装
又过了比较长的时间,基本上都是一周一更了,这期我们就来演示Linux系统中OpenSUSE系统的安装吧! 安装OpenSUSE系统 系统映像文件下载 OpenSUSE 15下载地址: https:// ...