'''自动化测试工具,支持多种浏览器。爬虫中主要用来解决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库的更多相关文章

  1. 为采集动态网页安装和测试Python Selenium库

    1. 引言上一篇<为编写网络爬虫程序安装Python3.5>中测试小例子对静态网页做了一个简单的采集程序,而动态网页因为需要动态加载js获取数据,所以使用urllib直接openurl已经 ...

  2. python利用selenium库识别点触验证码

    利用selenium库和超级鹰识别点触验证码(学习于静谧大大的书,想自己整理一下思路) 一.超级鹰注册:超级鹰入口 1.首先注册一个超级鹰账号,然后在超级鹰免费测试地方可以关注公众号,领取1000积分 ...

  3. python爬虫---selenium库的用法

    python爬虫---selenium库的用法 selenium是一个自动化测试工具,支持Firefox,Chrome等众多浏览器 在爬虫中的应用主要是用来解决JS渲染的问题. 1.使用前需要安装这个 ...

  4. python爬虫笔记----4.Selenium库(自动化库)

    4.Selenium库 (自动化测试工具,支持多种浏览器,爬虫主要解决js渲染的问题) pip install selenium 基本使用 from selenium import webdriver ...

  5. Python3 使用selenium库登陆知乎并保存cookie为本地文件

    Python3 使用selenium库登陆知乎并保存cookie为本地文件 学习使用selenium库模拟登陆知乎,并将cookie保存为本地文件,然后供以后(requests模块)使用,用selen ...

  6. Python爬虫-- selenium库

    selenium库 selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(S ...

  7. PYTHON 爬虫笔记七:Selenium库基础用法

    知识点一:Selenium库详解及其基本使用 什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium ...

  8. python爬虫---从零开始(六)Selenium库

    什么是Selenium库: 自动化测试工具,支持多种浏览器.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera ...

  9. Python:利用 selenium 库抓取动态网页示例

    前言 在抓取常规的静态网页时,我们直接请求对应的 url 就可以获取到完整的 HTML 页面,但是对于动态页面,网页显示的内容往往是通过 ajax 动态去生成的,所以如果是用 urllib.reque ...

  10. 浅谈python中selenium库调动webdriver驱动浏览器的实现原理

    最近学web自动化时用到selenium库,感觉很神奇,遂琢磨了一下,写了点心得. 当我们输入以下三行代码并执行时,会发现新打开了一个浏览器窗口并访问了百度首页,然而这是怎么做到的呢? from se ...

随机推荐

  1. ASP.NET MVC之从控制器传递数据到视图方式

    为了演示,先定义一个类 新建基本项目在Models文件夹下定义如下类: public class Person { public int Id { get; set; } public string ...

  2. 消除Warning: Using a password on the command line interface can be insecure的提示

    最近在部署Zabbix时需要用脚本取得一些MySQL的返回参数,需要是numberic格式的,但是调用脚本时总是输出这一句: Warning: Using a password on the comm ...

  3. 3d max 动作Take 001改名

    问题描述 带动作的Fbx文件导入Unity之后,动作名字为Take 001,如下所示: 在max那边是没有办法改名的,只能在Unity中改名. 方法1 1. 选中动画文件,按Ctrl + D,复制一份 ...

  4. [Hive_11] Hive 的高级聚合函数

    0. 说明 Hive 的高级聚合函数 union all | grouping sets | cube | rollup pv //page view 页面访问量 uv //user view 访问人 ...

  5. Lingo求解线性规划案例4——下料问题

    凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 造纸厂接到定单,所需卷纸的宽度和长度如表 卷纸的宽度 长度 5 7 9 10000 30000 20000 工 ...

  6. CSS 简介、 选择器、组合选择器

    #CSS 装饰器引入<!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  7. .Net下的全局异常捕获问题

    全局异常捕获主要目标并不是为了将异常处理掉防止程序崩溃.因为当错误被你的全局异常捕获器抓到的时候,已经证实了你程序中存在BUG. 一般而言,我们的全局异常捕获主要作用就是接收到异常之后进行异常的反馈. ...

  8. IOT,笔记:avrdude: ser_open(): can't open device "\\.\COM3": 系统找不到指定的文件。

    1.下载驱动:https://www.arduino.cc/ 下载后解压 2.UNO板子以及驱动的相关设置 将UNO板子用数据线连接到电脑上,设置驱动: 打开设备管理器----->找到端口--- ...

  9. Java和Php比较

    这样从几个方面来看:一.运行机制:Java代码被编译成字节码后,会在虚拟机里由JIT进行二次编译成为本地码,据传言其执行速度可以和C++相媲美,经过我自己测试,用Java实现一个简单的Memcache ...

  10. Nginx代理与负载均衡

    序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...