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 (浏览器自动化测试工具,模拟可以调用浏览器模拟人操作浏览器)的更多相关文章

  1. Selenium浏览器自动化测试工具

    目录 Selenium浏览器自动化测试工具 Selenium模块在爬虫中的使用 Python简单使用Selenium Selenium的基本操作 Selenium爬取动态加载的数据 Selenium动 ...

  2. python模块介绍-locustio:性能测试工具locustio

    转自:http://automationtesting.sinaapp.com/blog/m_locustio_doc python测试文章 http://weibo.com/cizhenshi?is ...

  3. Selenium功能自动化测试工具

    Selenium也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Firefox.Mozilla Suite ...

  4. Selenide 阶段性总结介绍(UI自动化测试工具)

    今天给大家介绍一个比较新的UI自动化测试工具-- Selenide.确实是比较新的,国内应该还没有多少人用它.在百度和google上你只能搜到一个中文帖子简单介绍了一下.如果你想用这个工具,不可避免的 ...

  5. 爬虫模块之selenium模块

    一 模块的介绍 selenium模块最开始是一个自动化测试的工具,驱动浏览器完全模拟浏览器自动测试. from selenium import webdriver # 驱动浏览器 browser=we ...

  6. puppeteer:官方出品的chrome浏览器自动化测试工具

    puppeteer发布应该有一段时间了,这两天正好基于该工具写了一些自动化解决方案,在这里抛砖引给大家介绍一下. 官方描述: Puppeteer is a Node library which pro ...

  7. 爬虫模块介绍--request(发送请求模块)

    爬虫:可见即可爬   # 每个网站都有爬虫协议 基础爬虫需要使用到的三个模块 requests 模块  # 模拟发请求的模块 PS:python原来有两个模块urllib和urllib的升级urlli ...

  8. 爬虫模块介绍--Beautifulsoup (解析库模块,正则)

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时 ...

  9. Selenium 2自动化测试实战21【调用JavaScript(控制浏览器的滚动条)】

     一.调用JavaScript(控制浏览器的滚动条) WebDriver提供了execute_script()方法来执行JavaScript代码.用于调整浏览器滚动条位置的JavaScript代码如下 ...

随机推荐

  1. 七、Linux的权限命令

    1. 文件权限 r:对文件是指可读取内容 对目录是可以ls w:对文件是指可修改文件内容,对目录 是指可以在其中创建或删除子节点(目录或文件) x:对文件是指是否可以运行这个文件,对目录是指是否可以c ...

  2. 关于Servlet的一些归纳(1)

    1.servlet接口 含5个抽象放法 void init(ServletConfig config) throws ServletException //初始化Servlet void servic ...

  3. http/1.0/1.1/2.0与https的比较

    HTTP是HyperText Transfer Protocol的缩写,译为超文本传输协议.是一种应用于OSI七层模型中应用层的协议,是我们平常互联网网络通信传输的基础.它的作用就是规定了服务器和客户 ...

  4. 【转】 android5.1里面的user-app的默认权限设置!

    在 frameworks/base/services/core/java/com/android/server/AppOpsPolicy.java中:public boolean isControlA ...

  5. Judy Beta Postmortem

    设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 与Alpha阶段相同,我们的软件要解决的Julia程序的dubug功能.问题定义得比较清楚,具体分 ...

  6. 漫谈hashcode

    概要 对于hashcode,相信很多朋友都不陌生,应为我们很多时候都需要用到这个,比如hashMap中就用到了,根据key的hash值来决定value存放的位置,之后来取得时候直接到指定的位置上那就行 ...

  7. php短信验证码接口接入流程及代码示例

    对于绝大部分企业来说,所使用的短信验证码接口都是第三方短信服务商所提供,目前市场上短信服务商有很多,在此向大家推荐一家动力思维乐信,运营13年,值得信赖! 就拿动力思维乐信短信验证码接口为例,详细介绍 ...

  8. yuv2mp4

    >您使用什么类型的YUV像素格式?最常见的格式是YUV4:2:0平面8位(YUV420p).您可以键入ffmpeg -pix_fmts以获取所有可用格式的列表.>什么是帧率?在我的例子中, ...

  9. spring cloud + spring boot + springmvc+mybatis分布式微服务云架构

    做一个微服务架构需要的技术整理: View: H5.Vue.js.Spring Tag.React.angularJs Spring Boot/Spring Cloud:Zuul.Ribbon.Fei ...

  10. Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 阅读笔记

    Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks (使用循环一致的对抗网络的非配对图像-图 ...