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

selenium抓取今日头条,滚动向下拿50页,保存到文本文件

Python_selenium案例:的更多相关文章

  1. 数据库优化案例——————某市中心医院HIS系统

    记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...

  2. SQL Server内存遭遇操作系统进程压榨案例

    场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的 ...

  3. solr_架构案例【京东站内搜索】(附程序源代码)

    注意事项:首先要保证部署solr服务的Tomcat容器和检索solr服务中数据的Tomcat容器,它们的端口号不能发生冲突,否则web程序是不可能运行起来的. 一:solr服务的端口号.我这里的sol ...

  4. Yeoman 官网教学案例:使用 Yeoman 构建 WebApp

    STEP 1:设置开发环境 与yeoman的所有交互都是通过命令行.Mac系统使用terminal.app,Linux系统使用shell,windows系统可以使用cmder/PowerShell/c ...

  5. 了不起的 nodejs-TwitterWeb 案例 bug 解决

    了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端 ...

  6. 一个表缺失索引发的CPU资源瓶颈案例

    背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...

  7. 【Machine Learning】决策树案例:基于python的商品购买能力预测系统

    决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...

  8. Redis简单案例(二) 网站最近的访问用户

    我们有时会在网站中看到最后的访问用户.最近的活跃用户等等诸如此类的一些信息.本文就以最后的访问用户为例, 用Redis来实现这个小功能.在这之前,我们可以先简单了解一下在oracle.sqlserve ...

  9. springmvc+bootstrap+jquerymobile完整搭建案例(提供下载地址)

    用一张简单的截图说明下,然后提供一个下载地址. bootstrap的大部分样式官方都是写好的,所以只需要class="官方样式即可",具体可以看官方的案例,下面来个地址 http: ...

随机推荐

  1. Anno 框架 增加缓存、限流策略、事件总线、支持 thrift grpc 作为底层传输

    github 地址:https://github.com/duyanming/dymDemo dym 分布式开发框架 Demo 熔断 限流 事件总线(包括基于内存的.rabbitmq的) CQRS D ...

  2. phpstorm 注解路由插件

    idea-php-annotation-plugin 设置 插件 搜索 安装 重启

  3. mysql间隙锁 转

    前面一文 mysql锁 介绍了mysql innodb存储引擎的各种锁,本文介绍一下innodb存储引擎的间隙锁,就以下问题展开讨论 1.什么是间隙锁?间隙锁是怎样产生的? 2.间隙锁有什么作用? 3 ...

  4. laravel服务容器 转

    laravel框架底层解析 本文参考陈昊<Laravel框架关键技术解析>,搭建一个属于自己的简化版服务容器.其中涉及到反射.自动加载,还是需要去了解一下. laravel服务容器 建立项 ...

  5. sql server 2008 r2 直接下载地址,可用迅雷下载

    sqlserver 2008 r2 直接下载地址,可用迅雷下载 下载sqlserver 2008 r2 ,微软用了一个下载器,经过从下载器上,将他的地址全部用键盘敲了下来.最终的简体中文版地址如下: ...

  6. ffmpeg+Python实现B站MP4格式音频与视频的合并

    目录 安装 官网下载 环境变量 验证 ffmpeg的使用 Python实现自动处理 文件结构 番剧缓存结构 常规缓存结构 文件信息 代码 具体代码 代码说明 安装 官网下载 http://ffmpeg ...

  7. ng中的ng-content ng-template ng-container

    在angular中,有这样三个自带的标签,但是在angular的文档中没有说明,只有在api中有简单的描述,摸索了半天才搞懂是咋回事. ng-content <div> <ng-co ...

  8. iOS 14 egret 游戏卡顿问题分析和部分解决办法

    现象 总体而言,iOS 14 渲染性能变差,可以从以下三个测试看出. 测试1:简单demo,使用egret引擎显示3000个图(都是同一个100*100 png 纹理),逐帧做旋转.(博客园视频播放可 ...

  9. App测试工具大全,收藏这篇就够了

    随着移动互联网的高速发展,App 应用非常火,测试工程师也会接触到各种 app 应用.除了人工测试之外,也可以通过一些测试工具来提高我们的测试效率,以下对于我用过或听过的 app 测试工具做了一个统一 ...

  10. 彻底弄懂设置根元素字体大小calc(100vw/18.75) 实现rem自适应

    rem 是相对文档根元素(html)字体大小的尺寸单位,当元素的尺寸或文字字号等使用 rem 单位时,会随着根元素的 font-size 变化而变化,那么在不同分辨率的设备下动态设置根元素的字体大小就 ...