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 ...
随机推荐
- 在CentOS上配置SAMBA共享目录(转载)
在CentOS上配置SAMBA共享目录 From: https://blog.csdn.net/qiumei1101381170/article/details/53265341 2016年11月21 ...
- 前后端分离djangorestframework——权限组件
权限permissions 权限验证必须要在认证之后验证 权限组件也不用多说,读了源码你就很清楚了,跟认证组件很类似 具体的源码就不展示,自己去读吧,都在这里: 局部权限 设置model表,其中的ty ...
- Incorrect key file for table错误解决方法
问题现象: alter table portal_app_xxxx_xxx add devno varchar(64) NOT NULL DEFAULT '' COMMENT '设备机编',add s ...
- python3使用selenium + Chrome基础操作代码
selenium是Python的第三方库,使用前需要安装.但是如果你使用的是anaconda,就可以省略这个步骤,为啥?自带,任性. 安装命令: pip install selenium (一)使用s ...
- jQuery -- 光阴似箭(四):jQuery 遍历
jQuery -- 知识点回顾篇(四):jQuery 遍历 通过 jQuery 遍历,您能够从被选(当前的)元素开始,轻松地在家族树中向上移动(祖先),向下移动(子孙),水平移动(同胞).这种移动被称 ...
- Ubuntu下使用终端ssh访问设置了密钥的云服务器
首先先安装OpenSSH客户端,可以直接apt-get安装 sudo apt-get install openssh-server 然后将私钥权限修改为600 chmod 600 keyfile 最后 ...
- LeetCode算法题-Add Digits(Java实现-3种解法)
这是悦乐书的第199次更新,第207篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第63题(顺位题号是258).给定非负整数num,重复添加其所有数字,直到结果只有一位数 ...
- MVC+EF 序列化类型为“System.Data.Entity.DynamicProxies.__的对象时检测到循环引用
用MVC+EF做简单查询时,返回json格式数据出现问题 原代码: public ActionResult JSon({ NorthwindEntities db = new NorthwindEnt ...
- Win10 开始运行不保存历史记录原因和解决方法
Win10 开始运行命令以后,再次打开就没有任何历史记录了,常规方法是桌面-右键-个性化-开始-显示最常用的应用..可是打开是灰色的不可选. 每次打开开始都没有以前的记录..比如需要打开下regedi ...
- Django-rest-framework 接口实现 Serializer 使用
Django接口实现 DRF 使用 以下模块 实现 json数据 序列化 博客: https://www.cnblogs.com/liwenzhou/p/9959979.html Django RES ...