Selenium库
'''自动化测试工具,支持多种浏览器。爬虫中主要用来解决JavaScrip渲染的问题。'''
'''基本使用'''
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe") #声明一个浏览器驱动对象,参数为浏览器驱动的路径。
try:
browser.get("https://www.baidu.com") #跳出浏览器访问IP
input = browser.find_element_by_id("kw") #找到ID为kw的元素赋值给input,即百度输入框
input.send_keys('Python') #输入框输入关键字Python
input.send_keys(Keys.ENTER) #敲回车键
wait = WebDriverWait(browser,10)
wait.until(EC.presence_of_element_located((By.ID,'content_left'))) #等待元素ID为content_left的元素加载出来
print(browser.current_url) #输出浏览器当前的url
print(browser.get_cookies())
print(browser.page_source) #输出网页源代码
finally:
browser.close() '''声明浏览器对象'''
# browser = webdriver.Chrome()
# browser = webdriver.Firefox()
# browser = webdriver.Edge()
# browser = webdriver.PhantomJS()
# browser = webdriver.Safari() '''访问网页'''
print("-访问网页-"*20)
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe") #browser.close()执行之后,需再次声明才能使用。
browser.get("https://www.taobao.com")
print(browser.page_source)
browser.close() '''查找元素'''
print("-查找元素-"*20)
#单个元素
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe")
browser.get("https://www.taobao.com")
input_first = browser.find_element_by_id('q')
input_first2 = browser.find_element(By.ID,'q')
input_second = browser.find_element_by_css_selector('#q')
input_third = browser.find_element_by_xpath('//*[@id="q"]')
print(input_first,input_first2,input_second,input_third)
browser.close()
#类似方法
#find_element_by_name、find_element_by_xpath、find_element_by_link、
#find_element_by_partial_link_text、find_element_by_tag_name、
#find_element_by_class_name、find_element_by_css_selector
#多个元素
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe")
browser.get("https://www.taobao.com")
list = browser.find_elements_by_css_selector('.service-bd li') #返回一个列表
print(list,'\n')
list = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')
print(list,'\n')
browser.close()
#类似方法
#find_element_by_name、find_element_by_xpath、find_element_by_link、
#find_element_by_partial_link_text、find_element_by_tag_name、
#find_element_by_class_name、find_element_by_css_selector '''元素交互操作:对获取的元素调用交互方法'''
import time
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe")
browser.get("https://www.taobao.com")
input = browser.find_element_by_id('q')
input.send_keys('iPhone')
time.sleep(1) #睡眠1秒
input.clear()
input.send_keys('iPad')
button = browser.find_element_by_class_name("btn-search")
button.click()
#交互动作:将动作附加到动作链中串行执行
from selenium.webdriver import ActionChains
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe")
url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url)
browser.switch_to.frame('iframeResult') #根据ID找到网页的frame
source = browser.find_element_by_css_selector("#draggable") #根据ID找到网页的拖拽元素
target = browser.find_element_by_css_selector("#droppable") #根据ID找到网页的被拖拽元素
actions = ActionChains(browser)
actions.drag_and_drop(source,target)
actions.perform() '''执行JavaScript'''
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe") #声明一个浏览器驱动对象,参数为浏览器驱动的路径。
browser.get("https://www.zhihu.com/explore")
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("To Button")') '''获取元素信息'''
#获取属性
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe") #声明一个浏览器驱动对象,参数为浏览器驱动的路径。
url = "https://www.zhihu.com/explore"
browser.get(url)
logo = browser.find_element_by_id('zh-top-link-logo')
print(logo)
print(logo.get_attribute('class')) #得到logo的class属性值
#获取文本值
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.text)
#获取ID、位置、标签名、大小
print(input.id)
print(input.location)
print(input.tag_name)
print(input.size) '''Frame'''
from selenium.common.exceptions import NoSuchElementException
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe") #声明一个浏览器驱动对象,参数为浏览器驱动的路径。
url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url)
browser.switch_to.frame('iframeResult')
source = browser.find_element_by_css_selector('#draggable')
print(source)
try:
logo = browser.find_element_by_class_name('logo')
except NoSuchElementException:
print('NO LOGO')
browser.switch_to.parent_frame()
logo = browser.find_element_by_class_name('logo')
print(logo)
print(logo.text) '''等待'''
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
#隐式等待:当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将等待指定时间,然后再找一次,若还找不到则抛出NoSuchElementException,
#换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认的时间是0。
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe") #声明一个浏览器驱动对象,参数为浏览器驱动的路径。
browser.implicitly_wait(10)
browser.get("https://www.zhihu.com/explore")
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)
# 显示等待:在设定等待时间内查找元素,若找到则继续执行其他操作;若到了指定时间找不到则TimeoutException
browser.get("https://www.taobao.com/")
wait = WebDriverWait(browser,1)
input = wait.until(EC.presence_of_element_located((By.ID,'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))
print(input,button)
#可以做为判断的有:
# title_is 标题是某内容
# title_contains 标题包含某内容
# presence_of_element_located 元素加载出,传入定位元组,如(By.ID,'p')
# visibility_of_element_located 元素可见,传入定位元组
# visibility_of 可见,传入元素对象
# presence_of_all_elements_located 所有元素加载出
# text_to_be_present_in_element 某个元素文本包含某文字
# text_to_be_present_in_element_value 某个元素值包含某文字
# frame_to_be_available_and_switch_to_it frame加载并切换
# invisibility_of_element_located 元素不可见
# element_to_be_clickable 元素可点击
# staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
# element_to_be_selected 元素可选择,传元素对象
# element_located_to_be_selected 元素可选择,传入定位元祖
# element_selection_state_to_be 传入元素对象以及状态,想等返回True
# element_located_selection_state_to_be 传入定位元祖以及装填,相等返回True,否则返回False
# alert_is_present 是否出现Alert '''前进后退'''
import time
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe") #声明一个浏览器驱动对象,参数为浏览器驱动的路径。
browser.get("https://www.baidu.com")
browser.get("https://www.taobao.com")
browser.get("https://www.python.org")
browser.back()
time.sleep(1)
browser.forward()
browser.close() '''cookies'''
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe") #声明一个浏览器驱动对象,参数为浏览器驱动的路径。
browser.get("https://www.zhihu.com/explore")
print(browser.get_cookies(),'\n')
browser.add_cookie({'name':'name','domain':'www.zhihu.com','value':'germey'})
print(browser.get_cookies(),'\n')
browser.delete_all_cookies()
print(browser.get_cookies()) '''选项卡管理'''
import time
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe") #声明一个浏览器驱动对象,参数为浏览器驱动的路径。
browser.get("https://www.baidu.com/")
browser.execute_script('window.open()')
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])
browser.get("https://www.taobao.com")
time.sleep(1)
browser.switch_to_window(browser.window_handles[0])
browser.get("https://python.org") '''异常处理'''
from selenium.common.exceptions import TimeoutException,NoSuchElementException
browser = webdriver.Chrome("D:\ASoft\Python\chromedriver\chromedriver.exe") #声明一个浏览器驱动对象,参数为浏览器驱动的路径。
try:
browser.get("https://www.baidu.com/")
except TimeoutException:
print('Time Out')
try:
browser.find_element_by_id('hello')
except NoSuchElementException:
print('No Element')
finally:
browser.close()
Selenium库的更多相关文章
- 为采集动态网页安装和测试Python Selenium库
1. 引言上一篇<为编写网络爬虫程序安装Python3.5>中测试小例子对静态网页做了一个简单的采集程序,而动态网页因为需要动态加载js获取数据,所以使用urllib直接openurl已经 ...
- python利用selenium库识别点触验证码
利用selenium库和超级鹰识别点触验证码(学习于静谧大大的书,想自己整理一下思路) 一.超级鹰注册:超级鹰入口 1.首先注册一个超级鹰账号,然后在超级鹰免费测试地方可以关注公众号,领取1000积分 ...
- python爬虫---selenium库的用法
python爬虫---selenium库的用法 selenium是一个自动化测试工具,支持Firefox,Chrome等众多浏览器 在爬虫中的应用主要是用来解决JS渲染的问题. 1.使用前需要安装这个 ...
- python爬虫笔记----4.Selenium库(自动化库)
4.Selenium库 (自动化测试工具,支持多种浏览器,爬虫主要解决js渲染的问题) pip install selenium 基本使用 from selenium import webdriver ...
- Python3 使用selenium库登陆知乎并保存cookie为本地文件
Python3 使用selenium库登陆知乎并保存cookie为本地文件 学习使用selenium库模拟登陆知乎,并将cookie保存为本地文件,然后供以后(requests模块)使用,用selen ...
- Python爬虫-- selenium库
selenium库 selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(S ...
- PYTHON 爬虫笔记七:Selenium库基础用法
知识点一:Selenium库详解及其基本使用 什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium ...
- python爬虫---从零开始(六)Selenium库
什么是Selenium库: 自动化测试工具,支持多种浏览器.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera ...
- Python:利用 selenium 库抓取动态网页示例
前言 在抓取常规的静态网页时,我们直接请求对应的 url 就可以获取到完整的 HTML 页面,但是对于动态页面,网页显示的内容往往是通过 ajax 动态去生成的,所以如果是用 urllib.reque ...
- 浅谈python中selenium库调动webdriver驱动浏览器的实现原理
最近学web自动化时用到selenium库,感觉很神奇,遂琢磨了一下,写了点心得. 当我们输入以下三行代码并执行时,会发现新打开了一个浏览器窗口并访问了百度首页,然而这是怎么做到的呢? from se ...
随机推荐
- Java中数组、List、Set互相转换
数组转List String[] staffs = new String[]{"Tom", "Bob", "Jane"}; List sta ...
- 自动化测试基础篇--Selenium判断元素是够存在
摘自https://www.cnblogs.com/sanzangTst/p/8376101.html selenium+python处于学习阶段,功能实现之后开始整理之前写的代码,突然发现一个功能没 ...
- C# -- 使用Aspose.Cells创建和读取Excel文件
使用Aspose.Cells创建和读取Excel文件 1. 创建Excel Aspose.Cells.License li = new Aspose.Cells.License(); li.SetLi ...
- May 24. 2018 Week 21st Thursday
Man errs so long as he strives. 失误是进取的代价. It is not important that the man in the arena didn't win, ...
- MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法
MATLAB常微分方程数值解 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.一阶常微分方程初值问题 2.欧拉法 3.改进的欧拉法 4.四阶龙格库塔 ...
- Alpha阶段 - 博客链接合集
Alpha阶段 - 博客链接合集 项目Github地址 安卓端(Stardust):https://github.com/StardustProject/Stardust 服务器端(Gravel):h ...
- 团队作业——Beta冲刺
团队作业--Beta冲刺 经过紧张的Alpha阶段,很多组已经从完全不熟悉语言和环境,到现在能够实现初步的功能.下一阶段即将加快编码进度,完成系统功能.强化软件工程的体会.Beta阶段的冲刺时间为期5 ...
- nosql:文件存储和sql数据库存储形式之外的存储系统都是nosql
为了设计一个比较好的磁盘缓存,我调查了大量的开源库,包括 TMDiskCache.PINDiskCache.SDWebImage.FastImageCache 等,也调查了一些闭源的实现,包括 NSU ...
- 详解Transformer模型(Atention is all you need)
1 概述 在介绍Transformer模型之前,先来回顾Encoder-Decoder中的Attention.其实质上就是Encoder中隐层输出的加权和,公式如下: 将Attention机制从Enc ...
- icon图标库记录
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 阿里巴巴: http://iconfont.cn/ 可以下载图标 github : x ...