爬虫模块介绍--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代码如下 ...
随机推荐
- Spring _day02_IoC注解开发入门
1.Spring IoC注解开发入门 1.1 注解开发案例: 创建项目所需要的jar,四个基本的包(beans core context expression ),以及两个日志记录的包,还要AOP的包 ...
- python基础之作业1---用户登录
作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 import sys, os, getpass os.system('clear')i = 0while i < 3: ...
- python中的内置函数getattr()介绍及示例
在python的官方文档中:getattr()的解释如下: ? 1 2 3 getattr(object, name[, default]) Return the value of the nam ...
- Linux磁盘故障案例
原因:由于另外一块磁盘不存在,但是配置文件/etc/fstab中又有挂载的配置,挂载出问题就导致这样的故障. 输入root密码进去 编辑/etc/fstab文件把箭头指向的这一行注释掉或者删除掉.然后 ...
- 自己练习的一个小的demo的时候a标签关于href链接的问题
一.Js的几种调用方法(参考总结的) 1.a href="javascript:js_method();" 这是常用的方法,但是这种方法在传递this等参数的时候很容易出问题,而且 ...
- Ubuntu中的出现:主文件夹的内容跑在桌面显示解决方案。同时 vim编辑器的操作
在终端窗口进入中文件夹 输入命令:cd .config/ 然后找到user-dirs.dirs 输入命令:vim user-dirs.dirs 在vim中安 i 即可进行插入操作 把对应的中文件中的文 ...
- axis2设置soap1.1或soap1.2协议
现在Axis.Axis2都是同时支持SOAP1.1和SOAP1.2的.即在服务器端发布一个WebService服务之后,客户端既可以通过SOAP1.1版本来访问服务器的服务,也可以通过SOAP1.2版 ...
- ubuntu配置neuwork网络
ubuntu 网络配置 检查网络配置命令:ifconfig 一.通过配置文件配置 新手没怎么用过Ubuntu,所以走了不少弯路,网上找了很多方法,大都没对我起到帮助作用,所以把自己的配置方法写一写. ...
- 网络-Cisco
选择题(每题2分,共20分) 1.192.168.11.1/23的网络地址是( A) A.192.168.10.0 B.192.168.11.0 C.192.168.10.255 D.192.168 ...
- 关于springboot项目中自动注入,但是用的时候值为空的BUG
最近想做一些web项目来填充下业余时间,首先想到了使用springboot框架,毕竟方便 快捷 首先:去这里 http://start.spring.io/ 直接构建了一个springboot初始化的 ...