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. python学习------socket编程

    一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...

  2. vs code编写的时候自动回车的原因

    今天在书写一个空白的scss文件的时候,刚打2个字就自动回车换行了: 测试了几次,发现了规律就是输入停下来0.5秒左右就会自动换行,比如,打了2个中文,再连续打一个句子,键盘虽然在动,但是vs cod ...

  3. Angular cli 发布自定义组件

    建立工作空间 ng new Test --style=scss //Angular6.x及以下可以使用这个命令指定使用.scss样式表 ng new Test                      ...

  4. 安装SQl Server 报错 "需要 Microsoft.NET Framework 3.5 ServicePack 1" 解决方法

    前言 之前装Sql Server都没遇到过这样的问题, 昨天重装了系统之后, 然后安装SQl Server 报错,提示 "需要 Microsoft.NET Framework 3.5 Ser ...

  5. js中三种弹出框

    javascript的三种对话框是通过调用window对象的三个方法alert(),confirm()和prompt()来获得,可以利用这些对话框来完成js的输入和输出,实现与用户能进行交互的js代码 ...

  6. JVM CUP占用率过高排除方法,windows环境

    jdk自带的jvisualvm可以看到程序CPU使用率,但是无法确定具体的线程,想要确定到具体的线程需要借用到微软的Process Explorer 具体排除方法: 一:打开资源管理器,找到cup占用 ...

  7. BigDecimal类的用法

    (一)BigDecimal类的常用的几个构造方法 BigDecimal(int):将int表示形式转换为BigDecimal对象 BigDecimal(String):将字符串表示形式转换为BigDe ...

  8. ansible资产配置

    参考链接:https://www.cnblogs.com/iois/p/6403761.html ansible主机组的使用,我们在对一个集群进行管理的时候集群会有很多角色,在执行统一命令操作的时候我 ...

  9. Django中STATIC_URL、STATIC_ROOT、STATICFILES_DIRS 的区别关系

    首先,我们配置静态文件,要在setting.py里面加入如下几行代码: settings.py # the settings above # STATIC SETTINGS STATIC_URL = ...

  10. elasticsearch(6) 映射和分析

    类似关系型数据库中每个字段都有对应的数据类型,例如nvarchar.int.date等等,elasticsearch也会将文档中的字段映射成对应的数据类型,这一映射可以使ES自动生成的,也是可以由我们 ...