Python_selenium案例:
selenium案例
#coding=utf-8
#select下拉框处理
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
#导入select方法
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
#隐式等待10秒
driver.implicitly_wait(10)
#鼠标移动到"设置"按钮
mouse=driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(mouse).perform()
#点击"搜索设置"
driver.find_element_by_link_text("搜索设置").click()
#强制等待4秒,注意:这里使用隐式等待或显式等待都将无法获取元素
time.sleep(4)
#分两步,先定位下拉框,再点击选项
choice = driver.find_element_by_name("NR")
Select(choice).select_by_index(2)
time.sleep(2)
driver.find_element_by_xpath("//div[@id='gxszButton']/a[1]").click()
time.sleep(2)
driver.switch_to.alert.accept()
#跳转到百度首页后,进行搜索表
driver.find_element_by_id('kw').send_keys("python")
driver.find_element_by_id('su').click()
selenium打开网页+悬浮+点击+进入百度页面+输入关键词+搜索
cookie登陆(百度)
#coding=utf8
from selenium import webdriver
import time
import pprint base_url = "https://www.baidu.com"
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get(base_url)
#打印所有cookie
pprint.pprint(driver.get_cookies())
1.拿到未登录的cookie
#coding=utf-8
from selenium import webdriver
import time
import pprint
base_url = "https://www.baidu.com"
usr_name = "正牌冰峰汽水"
usr_pwd = "yanyan8174" driver = webdriver.Chrome()
driver.implicitly_wait(10) #清除所有cookie
driver.delete_all_cookies()
driver.get(base_url)
pprint.pprint(driver.get_cookies()) driver.find_element_by_link_text("登录").click()
time.sleep(2)
driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
time.sleep(2)
driver.find_element_by_css_selector("#TANGRAM__PSP_10__userName").send_keys(usr_name)
driver.find_element_by_css_selector("#TANGRAM__PSP_10__password").send_keys(usr_pwd)
time.sleep(10)
#在这个等待的时间里去手动输入验证码 driver.find_element_by_css_selector("#TANGRAM__PSP_10__submit").click()
time.sleep(3)
#打印登录后的cookie
pprint.pprint(driver.get_cookies())
2.正常登陆拿到登陆后的cookie
#coding=utf-8
from selenium import webdriver
import time base_url = "https://www.baidu.com"
driver = webdriver.Chrome()
driver.implicitly_wait(10) #清除所有cookie
driver.delete_all_cookies()
driver.get(base_url) cookie_1 = {'httpOnly': True,
'secure': False,
'value': '1',
'name': 'HOSUPPORT',
'domain': '.passport.baidu.com',
'path': '/',
'expiry': 1768236049.395134
}
cookie_2 = {'httpOnly': True,
'secure': False,
'value': 'fi_PncwhpxZ%7ETaKAcaFAwWer%7EzluYq4tLyhh8G8D-51Jh32rZKfPIAaPUksyRGhrJ-ndBYw3t-vNiNSFW6D',
'name': 'UBI',
'domain': '.passport.baidu.com',
'path': '/',
'expiry': 1768236050.02163} cookie_3 = {'httpOnly': False,
'secure': False,
'value': 'f39184d315d7eacfb7b1f37fc37f5e72',
'name': 'FP_UID',
'domain': '.baidu.com',
'path': '/',
'expiry': 2556057600}
#测试后发现就添加这个cookie即可
cookie_4 = {} #添加cookie
driver.add_cookie(cookie_4)
#driver.add_cookie(cookie_2)
#driver.add_cookie(cookie_3)
time.sleep(2)
driver.refresh()
3.模拟登陆
cookie登陆+手动输入验证码
#coding=utf-8
from selenium import webdriver
import time
import pprint
base_url = "http://www.xx007.cn/login.asp"
usr_name = "benq81"
usr_pwd = "jenny8174" driver = webdriver.Chrome()
driver.implicitly_wait(10) #清除所有cookie
driver.delete_all_cookies()
driver.get(base_url)
pprint.pprint(driver.get_cookies()) driver.refresh()
driver.find_element_by_name("username").send_keys(usr_name)
driver.find_element_by_name("password").send_keys(usr_pwd)
time.sleep(10)
#在这个等待的时间里去手动输入验证码 driver.find_element_by_css_selector('body > table:nth-child(12) > tbody > tr:nth-child(12) > td > input[type="submit"]').click()
time.sleep(2)
#打印登录后的cookie
pprint.pprint(driver.get_cookies())
1.拿到未登录的cookie+手动输入验证码
#coding=utf-8
from selenium import webdriver
import time
import pprint
base_url = "http://www.xx007.cn/" driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get(base_url)
pprint.pprint(driver.get_cookies())
cookie01=driver.get_cookie('DvForum')
cookie01_value=cookie01['value'].split("=")[-1]
print(cookie01_value)
cookie01={'domain': 'www.xx007.cn',
'expiry': 1511971.2069744722,
'httpOnly': False,
'name': 'DvForum',
'path': '/',
'secure': False,
'value': 'userid=555232&usercookies=2&userhidden=2&password=CgWJBnM9970wE057&userclass=%B4%BF%C2%F2%BC%D2%BB%E1%D4%B1&username=benq81&StatUserID=368139236'
}
cookie02={'domain': 'www.xx007.cn',
'httpOnly': False,
'name': 'upNum',
'path': '/',
'secure': False,
'value': '0'}
cookie03={'domain': 'www.xx007.cn',
'httpOnly': False,
'name': 'ASPSESSIONIDSATQDDSQ',
'path': '/',
'secure': False,
'value': 'IHDFJPPALBLMOJLCHCHHBFKD'} driver.delete_all_cookies()
time.sleep(2)
driver.add_cookie(cookie01)
driver.add_cookie(cookie02)
driver.add_cookie(cookie03)
#打印登录后的cookie
time.sleep(4)
driver.refresh()
2.模拟登陆
使用unittest框架编写测试用例
# coding=utf-8
'''
Project:基础类BasePage,封装所有页面公用的方法,
定义open函数,重定义find_element,switch_frame,send_keys等函数。
在初始化方法中定义驱动driver,基本url,title
WebDriverWait提供了显式等待方式。
'''
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC class BasePage(object):
"""
BasePage封装所有页面都公用的方法,例如driver, url ,FindElement等
"""
#初始化driver、url、pagetitle等
#实例化BasePage类时,最先执行的就是__init__方法,该方法的入参,其实就是BasePage类的入参。
def __init__(self, selenium_driver, base_url, pagetitle):
self.driver = selenium_driver
self.base_url = base_url
self.pagetitle = pagetitle #通过title断言进入的页面是否正确。
#使用title获取当前窗口title,检查输入的title是否在当前title中,返回比较结果(True 或 False)
def on_page(self, pagetitle):
return pagetitle in self.driver.title #打开页面,并校验页面链接是否加载正确
#以单下划线_开头的方法,在使用import *时,该方法不会被导入,保证该方法为类私有的。
def _open(self, url, pagetitle):
#使用get打开访问链接地址
self.driver.get(url)
self.driver.maximize_window()
#使用assert进行校验,打开的窗口title是否与配置的title一致。调用on_page()方法
assert self.on_page(pagetitle), "打开开页面失败 %s"%url #定义open方法,调用_open()进行打开链接
def open(self):
self._open(self.base_url, self.pagetitle) #重写元素定位方法
def find_element(self,*loc):
try:
#确保元素是可见的。
#注意:以下入参为元组的元素,需要加*。Python存在这种特性,就是将入参放在元组里。
#WebDriverWait(self.driver,10).until(lambda driver: driver.find_element(*loc).is_displayed())
#注意:以下入参本身是元组,不需要加*
WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc))
return self.driver.find_element(*loc)
except:
print("%s 页面中未能找到 %s 元素"%(self, loc)) #重写switch_frame方法
def switch_frame(self, loc):
return self.driver.switch_to.frame(loc) #定义script方法,用于执行js脚本,范围执行结果
def script(self, src):
self.driver.execute_script(src) #重写定义send_keys方法
def send_keys(self, loc, vaule, clear_first=True, click_first=True):
try:
print("使用send_keys")
loc = getattr(self,"_%s"% loc) #getattr相当于实现self.loc
if click_first:
self.find_element(*loc).click()
if clear_first:
self.find_element(*loc).clear()
self.find_element(*loc).send_keys(vaule)
except AttributeError:
print ("%s 页面中未能找到 %s 元素"%(self, loc))
test_pagePage.py
# coding=utf-8
'''
Project:页面基本操作方法:如open,input_username,input_password,click_submit
'''
from selenium.webdriver.common.by import By
from test_basePage import BasePage #继承BasePage类
class LoginPage(BasePage):
#定位器,通过元素属性定位元素对象
username_loc =(By.NAME,'email')
password_loc =(By.NAME,'password')
submit_loc =(By.ID,'dologin')
span_loc =(By.CSS_SELECTOR,"div.error-tt>p")
dynpw_loc =(By.ID,"lbDynPw")
userid_loc =(By.ID,"spnUid") #操作
#通过继承覆盖(Overriding)方法:如果子类和父类的方法名相同,优先用子类自己的方法。
#打开网页
def open(self):
#调用page中的_open打开连接
self._open(self.base_url, self.pagetitle)
#输入用户名:调用send_keys对象,输入用户名
def input_username(self, username):
self.find_element(*self.username_loc).send_keys(username) #输入密码:调用send_keys对象,输入密码
def input_password(self, password):
self.find_element(*self.password_loc).send_keys(password) #点击登录:调用click对象,点击登录
def click_submit(self):
self.find_element(*self.submit_loc).click() #用户名或密码不合理是Tip框内容展示
def show_span(self):
return self.find_element(*self.span_loc).text #切换登录模式为动态密码登录(IE下有效)
def swich_DynPw(self):
self.find_element(*self.dynpw_loc).click() #登录成功页面中的用户ID查找
def show_userid(self):
return self.find_element(*self.userid_loc).text
test_loginPage
# coding=utf-8
'''
Project:页面基本操作方法:如open,input_username,input_password,click_submit
'''
from selenium.webdriver.common.by import By
from test_basePage import BasePage #继承BasePage类
class LoginPage(BasePage):
#定位器,通过元素属性定位元素对象
username_loc =(By.NAME,'email')
password_loc =(By.NAME,'password')
submit_loc =(By.ID,'dologin')
error_loc =(By.XPATH,"//div[@class='ferrorhead']")
userid_loc=(By.ID,"spnUid")
frame_loc="x-URS-iframe" #操作
#通过继承覆盖(Overriding)方法:如果子类和父类的方法名相同,优先用子类自己的方法。 #输入用户名:调用send_keys对象,输入用户名
def input_username(self, username):
self.find_element(*self.username_loc).send_keys(username) #输入密码:调用send_keys对象,输入密码
def input_password(self, password):
self.find_element(*self.password_loc).send_keys(password) #点击登录:调用click对象,点击登录
def click_submit(self):
self.find_element(*self.submit_loc).click() #切换到用户登录框的iframe中
def switch_to_frame(self):
self.switch_frame(self.frame_loc) #用户名或密码不合理是Tip框内容展示
def show_error(self):
try:
WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(self.error_loc))
return self.find_element(*self.error_loc).text
except:
return False #切换登录模式为动态密码登录(IE下有效)
def swich_DynPw(self):
self.find_element(*self.dynpw_loc).click()
#登录成功后获取当前窗口的title
def check_current_title(self):
return self.driver.title #登录成功页面中的用户ID查找
def show_userid(self):
return self.find_element(*self.userid_loc).text
tets_126_loginPage.py
# -*- coding:utf8 -*-
'''
Project:使用unittest框架编写测试用例。
'''
import unittest,time
from test_126_loginPage import LoginPage
from selenium import webdriver class Caselogin126mail(unittest.TestCase):
"""
登录126邮箱的case
"""
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(30)
self.url ="http://www.126.com"
self.username ="zhpmiss@126.com"
self.password ="zhou0829miss@" #用例执行体
def test_login_mail(self):
#声明LoginPage类对象
login_page = LoginPage(self.driver, self.url, "网易")
#调用打开页面组件
login_page.open()
#切换到登录框Frame
time.sleep(4)
login_page.switch_to_frame()
#调用用户名输入组件
login_page.input_username(self.username)
#调用密码输入组件
login_page.input_password(self.password)
#调用点击登录按钮组件
login_page.click_submit()
if login_page.show_error():
print("测试帐号密码有误的情况下是否弹出提示框:")
self.assertEqual(login_page.show_error(),"帐号或密码错误")
else:
print("测试帐号密码正确的情况下是否进入确定页面:")
self.assertEqual(login_page.show_userid(),'zhpmiss@126.com')
def tearDown(self):
print("测试完毕")
#self.driver.quit() if __name__ == "__main__":
unittest.main()
test_126.py
完整案例:1、今日头条
from selenium import webdriver
from lxml import etree
from pyquery import PyQuery as pq
import time driver = webdriver.Chrome() #实例化
driver.maximize_window() #窗口最大化
driver.get('https://www.toutiao.com/')
driver.implicitly_wait(10) #隐性等待10s【必须有,多加几个】
driver.find_element_by_link_text('科技').click()
driver.implicitly_wait(10) #隐性等待10s
for i in range(3):
js = "var q = document.documentElement.scrollTop="+str(i*500)
driver.execute_script(js)
time.sleep(2) time.sleep(5)
page = driver.page_source
doc = pq(page) #用pyquery实例化一下
doc = etree.HTML(str(doc))
contents = doc.xpath('//div[@class="wcommonFeed"]/ul/li')
print(contents) #这是一个对象
print("--------------------------")
for x in contents:
title = x.xpath('div/div[1]/div/div[1]/a/text()')
if title:
title = title[0]
# with open('toutiao.txt','a+',encoding='utf8')as f:
# f.write(title+'\n')
print(title)
else:
pass
抓取今日头条——科技 内容title
Python_selenium案例:的更多相关文章
- 数据库优化案例——————某市中心医院HIS系统
记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...
- SQL Server内存遭遇操作系统进程压榨案例
场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的 ...
- solr_架构案例【京东站内搜索】(附程序源代码)
注意事项:首先要保证部署solr服务的Tomcat容器和检索solr服务中数据的Tomcat容器,它们的端口号不能发生冲突,否则web程序是不可能运行起来的. 一:solr服务的端口号.我这里的sol ...
- Yeoman 官网教学案例:使用 Yeoman 构建 WebApp
STEP 1:设置开发环境 与yeoman的所有交互都是通过命令行.Mac系统使用terminal.app,Linux系统使用shell,windows系统可以使用cmder/PowerShell/c ...
- 了不起的 nodejs-TwitterWeb 案例 bug 解决
了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端 ...
- 一个表缺失索引发的CPU资源瓶颈案例
背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...
- 【Machine Learning】决策树案例:基于python的商品购买能力预测系统
决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...
- Redis简单案例(二) 网站最近的访问用户
我们有时会在网站中看到最后的访问用户.最近的活跃用户等等诸如此类的一些信息.本文就以最后的访问用户为例, 用Redis来实现这个小功能.在这之前,我们可以先简单了解一下在oracle.sqlserve ...
- springmvc+bootstrap+jquerymobile完整搭建案例(提供下载地址)
用一张简单的截图说明下,然后提供一个下载地址. bootstrap的大部分样式官方都是写好的,所以只需要class="官方样式即可",具体可以看官方的案例,下面来个地址 http: ...
随机推荐
- 【Luogu】P3369 【模板】普通平衡树(树状数组)
P3369 [模板]普通平衡树(树状数组) 一.树状数组 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构. ...
- 3.QOpenGLWidget-通过着色器来渲染渐变三角形
在上章2.通过QOpenGLWidget绘制三角形,我们学习绘制三角形还是单色的,本章将为三角形每个顶点着色. 1.着色器描述 着色器的开头总是要声明版本,接着是输入和输出变量.uniform和m ...
- Synergy屏幕共享键鼠 (for Mac&Ubuntu)
Synergy屏幕共享键鼠(for Mac&Ubuntu) 1. 简介 一套键盘和鼠标,操控多台电脑,下面介绍下Mac和Ubuntu之间的共享.(synergy分为服务端和客户端,把插着鼠 ...
- day74:drf:drf其他功能:认证/权限/限流/过滤/排序/分页/异常处理&自动生成接口文档
目录 1.django-admin 2.认证:Authentication 3.权限:Permissions 4.限流:Throttling 5.过滤:Filtering 6.排序:OrderingF ...
- Aspose.Words实现邮件合并功能和打印
前言 最近公司要做一个B/S架构的web打印系统,主要是可以上传.下载.邮件合并.打印等等,还有就是角色的分配.用户的创建.日志记录等等,跟一般的web系统一样.可能不一样的就是需求:想把excel的 ...
- ORA-28000错误解决方案
当使用SQL*Plus登录时,Oracle数据库时提示"ORA-28000:帐号被锁定". 导致出现改错误的原因是:在oracle database 11g中,默认在default ...
- 《Clojure编程》笔记 第3章 集合类与数据结构
目录 背景简述 第3章 集合类与数据结构 3.1 抽象优于实现 3.1.1 Collection 3.1.2 Sequence 3.1.3 Associative 3.1.4 Indexed 3.1. ...
- [Luogu P3953] 逛公园 (最短路+拓扑排序+DP)
题面 传送门:https://www.luogu.org/problemnew/show/P3953 Solution 这是一道神题 首先,我们不妨想一下K=0,即求最短路方案数的部分分. 我们很容易 ...
- React react-redux props或state更新视图无法重新渲染问题
记录学习React时自己是如何挖坑把自己埋了的过程:children以及其它props被修改时相关组件无法重新渲染(做了两天) 父组件代码: class UserHome extends Compon ...
- 使用rabbitmq实现集群im聊天服务器消息的路由
这个地址图文会更清晰:https://www.jianshu.com/p/537e87c64ac7 单机系统的时候,客户端和连接都有同一台服务器管理. image.png 在本地维护一份userI ...