定位单个元素(满足条件的第一个)
定位——id
from selenium import webdriver from time import sleep # driver = webdriver.Chrome() driver = webdriver.Firefox() print(driver) driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html') driver.find_element_by_id('userA').send_keys('admin') driver.find_element_by_id('passwordA').send_keys('123456') sleep(3) driver.quit() # webdriver.Chrome(): # <selenium.webdriver.chrome.webdriver.WebDriver (session="62029fee957d5e7998b273910ef5fcd3")> # webdriver.Firefox(): # <selenium.webdriver.firefox.webdriver.WebDriver (session="dae518be-3521-4ebf-956f-4b1714fe97c2")> # # driver.find_element_by_id('userA') # <selenium.webdriver.remote.webelement.WebElement (session="90e008cfcd9ddf88b1cc72b013d0a72f", element="0.4901998456841512-1")>
定位——class
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html') telA = driver.find_element_by_class_name('telA') email = driver.find_element_by_class_name('emailA') # class = 'emailA dzyxA'中,取其中任意一个即可 telA.send_keys('18682971383') sleep(3) email.send_keys('3202242587@qq.com') sleep(3) driver.quit()
定位——name
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html') # 定位到的是第一个 username = driver.find_element_by_name('userA') password = driver.find_element_by_name('passwordA') sleep(3) username.send_keys('admin') password.send_keys('123456') sleep(3) driver.quit()
定位——link_text
from selenium import webdriver from time import sleep # 需要传入a标签全部文本,全部匹配 driver = webdriver.Chrome() driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html') sleep(3) driver.find_element_by_link_text('访问 新浪 网站').click() sleep(100) driver.quit()
定位——partial_link_text
from selenium import webdriver from time import sleep # partial_link_text为模糊匹配,需要传入a标签局部文本-能表达唯一性; # link_text全部匹配 driver = webdriver.Firefox() driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html') sleep(3) driver.find_element_by_partial_link_text('访问').click() sleep(100) driver.quit()
定位——tag_name
from selenium import webdriver from time import sleep # 返回:符合条件的第一个标签 driver = webdriver.Chrome() driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html') driver.find_element_by_tag_name('input').send_keys('admin') sleep(3) driver.quit()
定位一组元素
from selenium import webdriver
from time import sleep
# find_elements_by_XXX() 查找定位所有符合条件的元素
# 返回的是一个列表
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
sleep(3)
inputs = driver.find_elements_by_tag_name('input')
print(inputs)
inputs[0].send_keys('admin')
sleep(3)
inputs[1].send_keys('123321')
sleep(3)
inputs[2].send_keys('18682971383')
sleep(3)
driver.quit()
'''
driver.find_elements_by_tag_name('input'):
'''
# [<selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-1")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-2")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-3")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-4")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-5")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-6")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-7")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-8")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-9")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-10")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-11")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-12")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-13")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-14")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-15")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-16")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-17")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-18")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-19")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-20")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-21")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-22")>]
css定位
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
# 1、id选择器
driver.find_element_by_css_selector('#userA').send_keys('admin')
sleep(3)
# 2、class选择器 ''' ★ find_element_by_css_selector和find_element_by_class_name方法一样,和Xpath中不一样,Xpath必须要全匹配才行 '''
driver.find_element_by_css_selector('.telA').send_keys('18682971383')
sleep(3)
driver.find_element_by_css_selector('.emailA').send_keys('3202242587@qq.com') # class = 'emailA dzyxA'中,取其中任意一个即可
sleep(3)
# 3、元素选择器
driver.find_element_by_css_selector('input').send_keys('---hello')
sleep(3)
# 4、属性选择器
driver.find_element_by_css_selector('[type="password"]').send_keys('123321')
sleep(3)
# 5、层级选择器 可各种选择方式'混搭'
driver.find_element_by_css_selector('p [type="email"]').send_keys('3202242587@qq.com')
sleep(3)
driver.quit()
''' ❀
标签名[属性名]^='字符串' 开头
标签名[属性名]$='字符串' 结尾
标签名[属性名]*='字符串' 包含
'''
# 1. input[type^='p'] 说明:type属性以p字母开头的元素
# 2. input[type$='d'] 说明:type属性以d字母结束的元素
# 3. input[type*='w'] 说明:type属性包含w字母的元素
xpath定位
By.XPATH, "//*[@class='shop_name2']/*[contains(text(),'{}')]"
""" 通过特定文字信息定位目标元素,搜索范围是打开的所有页面 """
xpath = '//*[contains(text(),"text")]'
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
# 1.1、绝对路径
username = driver.find_element_by_xpath('/html/body/div/fieldset/form/p/input')
username.send_keys('admin')
sleep(3)
# 1.2、相对路径
''' ★
/代表:在当前'目录'下找;
//代表:在当前目录下的任意'目录'下找
'''
username = driver.find_element_by_xpath('//fieldset/form/p/input')
username.send_keys('---hello')
sleep(3)
# 2、利用元素的属性信息
username = driver.find_element_by_xpath('//*[@id="userA"]')
username.send_keys('---你好')
sleep(3)
email = driver.find_element_by_xpath('//*[@class="emailA dzyxA"]') # 属性值完全匹配
email.send_keys('3202242587@qq.com')
sleep(3)
# 3、层级与属性结合
username = driver.find_element_by_xpath('//*[@id="pa"]//input')
username.send_keys('---嗨')
# 4、属性与逻辑结合 解决元素之间的相同属性重名问题 与或非
tel = driver.find_element_by_xpath("//*[@id='telA' and @class='telA']")
tel.send_keys('18682971383')
sleep(3)
'''5、扩展'''
# //*[contains(@attribute,'Sxxx')] 属性值中含有xxx的元素
tel = driver.find_element_by_xpath("//*[contains(@id,'serA')]")
tel.send_keys('。。。。。。。。。')
sleep(3)
# //*[starts-with(@attribute,'xxx')] 属性值以xxx开头的元素
tel = driver.find_element_by_xpath("//*[starts-with(@id,'us')]")
tel.send_keys('%%%%%%%%%%')
sleep(3)
# //*[text()="xxx"] 文本内容是xxx的元素
driver.find_element_by_xpath('//*[text()="访问 新浪 网站"]').click()
sleep(3)
driver.quit()
下拉列表
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
select = Select(driver.find_element_by_css_selector('#selectA'))
select.select_by_visible_text('A广州')
sleep(3)
select.select_by_visible_text('A上海')
'''
Select类:
1. select_by_index() --> 根据option索引来定位,从0开始
2. select_by_value() --> 根据option属性 value值来定位
3. select_by_visible_text() --> 根据option显示文本来定位
'''
# from time import sleep
#
# from selenium import webdriver
#
# driver = webdriver.Chrome()
# driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
#
# sz = driver.find_element_by_css_selector('[value = "sz"]')
# sh = driver.find_element_by_css_selector('[value = "sh"]')
# gz = driver.find_element_by_css_selector('[value = "gz"]')
#
# sz.click()
# sleep(3)
# sh.click()
# sleep(3)
# gz.click()
弹出框
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
# 点击弹框
driver.find_element_by_css_selector('#alerta').click()
# 获取弹出框
alert = driver.switch_to.alert
sleep(2)
# 点击取消
print(alert.text)
alert.dismiss()
# HTML中常用的弹出框有三种:
# 1 alert 警告框
# 2 confirm 确认框
# 3 prompt 提示框
# 获取弹出框:alert = driver.switch_to.alert
# 处理方法:
# 1. text --> 返回alert/confirm/prompt中的文字信息
# 2. accept() --> 接受对话框选项
# 3. dismiss() --> 取消对话框选项
滚动条
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
# 1、设置JavaScritp脚本控制滚动条
js = "window.scrollTo(0,1000)"
js1 = "window.scrollTo(0,0)"
js2 = "window.scrollBy(0,90)" #以90为单位,从上到下一步一步往下拉
# 2、WebDriver调用js脚本方法
driver.execute_script(js)
sleep(2)
driver.execute_script(js1)
浏览器操作
webdriver操作浏览器方式
from selenium import webdriver from time import sleep from urllib import parse # 实例化浏览器 driver = webdriver.Chrome() # 输入url driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html') sleep(3) driver.maximize_window() # 定位元素 username = driver.find_element_by_css_selector('#userA') pwd = driver.find_element_by_css_selector('#passwordA') tel = driver.find_element_by_css_selector('#telA') email = driver.find_element_by_css_selector('[type = "email"]') button = driver.find_element_by_css_selector('p button') # 输入内容 username.send_keys('admin') pwd.send_keys('123456') tel.send_keys('18611111111') email.send_keys('123@qq.com') sleep(3) # 修改电话号码 tel.clear() tel.send_keys('18600000000') sleep(3) button.click() sleep(3) '''输出中文的url''' print(parse.unquote(driver.current_url)) driver.quit() # 1. maximize_window() 最大化浏览器窗口 --> 模拟浏览器最大化按钮 # 2. set_window_size(width, height) 设置浏览器窗口大小 --> 设置浏览器宽、高(像素点) # 3. set_window_position(x, y) 设置浏览器窗口位置 --> 设置浏览器位置 # 4. back() 后退 --> 模拟浏览器后退按钮 # 5. forward() 前进 --> 模拟浏览器前进按钮 # 6. refresh() 刷新 --> 模拟浏览器F5刷新 # 7. close() 关闭当前窗口 --> 模拟点击浏览器关闭按钮 # 8. quit() 关闭浏览器驱动对象 --> 关闭所有程序启动的窗口 # 9. title 获取页面title # 10. current_url 获取当前页面URL # title、current_url是属性
webdriver获取元素信息
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html') username = driver.find_element_by_id('userA') link1 = driver.find_elements_by_tag_name('a')[0] link2 = driver.find_elements_by_tag_name('a')[1] span = driver.find_element_by_tag_name('span') cancel = driver.find_element_by_id('cancelA') ly = driver.find_element_by_id('lyA') print(span.is_displayed()) # 是否显示 print(cancel.is_enabled()) # 是否可用 print(ly.is_selected()) # 是否选中 print(username.size) # 属性大小 print(link2.text) # 获取元素文本 print(link1.get_attribute('href')) # 获取属性值 sleep(3) driver.quit() # 1. size 返回元素大小 # 2. text 获取元素的文本 # 3. get_attribute("xxx") 获取属性值,传递的参数为元素的属性名 # 4. is_displayed() 判断元素是否可见 # 5. is_enabled() 判断元素是否可用 # 6. is_selected() 判断元素是否选中,用来检查复选框或单选按钮是否被选中 # 提示: # 1. size、text:为属性,调用时无括号;如:xxx.size
frame表单切换
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
driver.switch_to.frame('myframe1')
username = driver.find_element_by_css_selector('#userA')
username.send_keys('admin')
# ★ 在frame表单中操作其他页面,必须先回到默认frame,才能进一步操作
driver.switch_to.default_content() # 切换到默认frame
sleep(3)
driver.switch_to.frame('myframe2')
username = driver.find_element_by_css_selector('#userB')
username.send_keys('admin')
# HTML语言中,frame/iframe标签为表单框架,主要作用是在当前页面中指定区域显示另一页面元素
#
# 在WebDriver类库中封装了HTML页面中使用frame表单框架技术定位的方法
# 1 driver.switch_to.frame("...") 切换表单方法
# driver.switch_to.frame('frame_name') frame元素name值
# driver.switch_to.frame(1) frame元素id
# driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0]) frame元素对象
# 2 driver.switch_to.default_content() 恢复默认页面方法
多窗口切换
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
driver.find_element_by_css_selector('#ZCB').click()
driver.switch_to.window(driver.window_handles[1])
driver.find_element_by_css_selector('#userB').send_keys('18682971383')
# 在WebDriver中封装了获取当前窗口句柄方法和获取所有窗口句柄的方法以及切换指定句柄窗口的方法;
# 句柄:英文handle,窗口的唯一识别码
#
# 方法:
# 1 driver.current_window_handle 获取当前窗口句柄
# 2 driver.window_handles 获取所有窗口句柄
# 3 driver.switch_to.window(handle) 切换指定句柄窗口
# 在WebDriver中封装了获取当前窗口句柄方法和获取所有窗口句柄的方法以及切换指定句柄窗口的方法;
# 句柄:英文handle,窗口的唯一识别码
#
# 方法:
# 1 driver.current_window_handle 获取当前窗口句柄
# 2 driver.window_handles 获取所有窗口句柄
# 3 driver.switch_to.window(handle) 切换指定句柄窗口
webdriver键盘操作
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
username = driver.find_element_by_css_selector('#userA')
pwd = driver.find_element_by_css_selector('#passwordA')
username.send_keys('admin1')
sleep(2)
# 删除1 backspace 删除键
username.send_keys(Keys.BACK_SPACE)
sleep(2)
# 用户名全选
username.send_keys(Keys.CONTROL, 'a')
sleep(2)
# 复制用户名到剪贴板
username.send_keys(Keys.CONTROL, 'c')
sleep(2)
# 剪贴板内容粘贴到密码
pwd.send_keys(Keys.CONTROL, 'v')
sleep(2)
driver.quit()
# 1. send_keys(Keys.BACK_SPACE)删除键(BackSpace)
# 2. send_keys(Keys.SPACE)空格键(Space)
# 3. send_keys(Keys.TAB)制表键(Tab)
# 4. send_keys(Keys.ESCAPE)回退键(Esc)
# 5. send_keys(Keys.ENTER)回车键(Enter)
# 6. send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
# 7. send_keys(Keys.CONTROL,'c')复制(Ctrl+C)
webdriver鼠标操作
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
def right_mouse_click(driver_args, action_args):
driver_args.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
username = driver_args.find_element_by_css_selector('#userA')
action_args.context_click(username)
action_args.perform()
sleep(3)
def double_mouse_click(driver_args, action_args):
driver_args.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
username = driver_args.find_element_by_css_selector('#userA')
username.send_keys('admin')
action_args.double_click(username)
action_args.perform()
sleep(3)
def hover(driver_args, action_args):
driver_args.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
register = driver_args.find_element_by_css_selector('button')
action_args.move_to_element(register).perform()
sleep(3)
def drag(driver_args, action_args):
driver_args.get('file:///D:/phpStudy/WWW/auto/drag.html')
source = driver_args.find_element_by_css_selector('#div1')
target = driver_args.find_element_by_css_selector('#div2')
action_args.drag_and_drop(source, target)
action_args.perform()
sleep(3)
if __name__ == '__main__':
# 实例化浏览器
driver = webdriver.Chrome()
# 实例化一个鼠标行为对象
action = ActionChains(driver)
right_mouse_click(driver, action) # 1、右击
sleep(3)
double_mouse_click(driver, action) # 2、双击
sleep(3)
hover(driver, action) # 3、悬停
sleep(3)
drag(driver, action) # 4、拖动
sleep(3)
driver.quit()
'''
在WebDriver中将操作鼠标的方法封装在ActionChains类中
1. context_click() 右击 --> 此方法模拟鼠标右键点击效果
2. double_click() 双击 --> 此方法模拟双标双击效果
3. drag_and_drop() 拖动 --> 此方法模拟双标拖动效果
4. move_to_element() 悬停 --> 此方法模拟鼠标悬停效果
5. perform() 执行 --> 此方法用来执行以上所有鼠标方法
这些方法的返回值都是self,调用者
'''
设置元素等待
元素等待:WebDriver定位页面元素时如果未找到,会在指定时间内一直等待的过程;
为什么会有元素等待?
1. 由于网络速度原因
2. 电脑配置原因
3. 服务器处理请求原因
元素等待类型:
1. 显式等待
2. 隐式等待
显式与隐式区别:
1. 作用域:显式等待为单个元素有效,隐式为全局元素
2. 方法:显式等待方法封装在WebDriverWait类中,而隐式等待则直接通过浏览器实例化对象调用
显示等待
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
driver.implicitly_wait(5)
username = WebDriverWait(driver, 20, 1).until(lambda x: x.find_element_by_css_selector('#userA'))
pwd = driver.find_element_by_css_selector('#passwordA')
username.send_keys('admin')
sleep(2)
pwd.send_keys('123321')
# 显示等待:使WebDriver等待指定元素条件成立时,继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)
#
# WebDriverWait(driver, timeout, poll_frequency=0.5)
# 1). driver:浏览器对象
# 2). timeout:超时的时长,单位:秒
# 3). poll_frequency:检测间隔时间,默认为0.5秒
隐式等待
from selenium import webdriver
from time import sleep
# 实例化浏览器 输入网址
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
driver.implicitly_wait(10)
username = driver.find_element_by_css_selector('#userA')
username.send_keys('admin')
sleep(3)
driver.quit()
'''
隐式等待 :
1 自动化脚本只需设置一次,便可作用于全局元素
2 逻辑:定位到元素立即执行后续脚本;定位不到,等待最大时长内循环去定位,定位到执行后续脚本,仍没定位到,抛出异常NoSuchElementException
'''
窗口截图
import time
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
sleep(3)
driver.get_screenshot_as_file('C:/Users/32022/Desktop/%s.png' % time.strftime('%Y%m%d_%H%M%S'))
验证码处理
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
# 百度免登录: 键 BDUSS 在项目中,找开发问,然后将它们添加到cookie中即可实现免登录
driver.add_cookie({'name': 'BDUSS', 'value': 'jdwWmhiVDlkOGYzfjJQLXRwSXlIOUVEYVU3RmMwSzZ0bzRQVnoybHlxemdjeUZlSUFBQUFBJCQAAAAAAAAAAAEAAACdn5WGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODm-V3g5vldY'})
driver.refresh()
# cookie: https://www.jianshu.com/p/9a561b36e9f3
# 1. Cookie是一小段的文本信息;格式:python中的字典(键值对组成)
# 2. Cookie产生:客户端请求服务器,如果服务器需要记录该用户状态,就向客户端浏览器颁发一个Cookie格式
# 3. Cookie使用:当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器,服务器检查该Cookie,以此来辨认用户状态。
#
# WebDriver中对cookie操作提供相应的方法:
# 1. get_cookie(name) :name:为键名 获取指定cookie
# 2. get_cookies() 获取本网站所有本地cookies
# 3. add_cookie(str) :str:为python中的字典格式 添加cookie
#
# WebDriver类库中没有对验证码处理的方法,验证码处理方式:
# 1 去掉验证码 测试环境下-采用
# 2 设置万能验证码 生产环境-采用
# 3 验证码识别技术 通过Python-tesseract来识别图片类型验证码;识别率很难达到100%
# 4 记录cookie 通过记录cookie进行登录-推荐
# cookie是什么?
# 1. Cookie是由Web服务器生成的,并且保存在用户浏览器上的小文本文件,它可以包含用户相关的信息。
# 2. Cookie数据格式:键值对组成(python中的字典)
# 3. Cookie产生:客户端请求服务器,如果服务器需要记录该用户状态,就向客户端浏览器颁发一个Cookie
# 数据
# 4. Cookie使用:当浏览器再次请求该网站时,浏览器把请求的数据和Cookie数据一同提交给服务器,服务
# 器检
# 查该Cookie,以此来辨认用户状态。
#
# cookie的应用场景
# 1. 实现会话跟踪,记录用户登录状态
# 2. 实现记住密码和自动登录的功能
# 3. 用户未登录的状态下,记录购物车中的商品
By
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
driver.find_element(By.ID, "userA").send_keys("admin")
sleep(3)
driver.find_element(By.NAME, "passwordA").send_keys("123456")
sleep(3)
driver.find_element(By.CLASS_NAME, "telA").send_keys("18611111111")
sleep(3)
driver.find_element(By.TAG_NAME, 'input').send_keys("123")
sleep(3)
driver.find_element(By.LINK_TEXT, '访问 新浪 网站').click()
sleep(3)
driver.find_element(By.PARTIAL_LINK_TEXT, '访问').click()
sleep(3)
driver.find_element(By.XPATH, '//*[@class="emailA dzyxA"]').send_keys('234@qq.com')
sleep(3)
driver.find_element(By.CSS_SELECTOR, '.emailA').send_keys("123@126.com")
sleep(3)
driver.quit()
# find_element_by_XXX 底层是调用的By类方法进行的封装的
# 虽然方法一样,但WebDriver推荐 find_element_by_xxx()这种方法
def find_element_by_id(self, id_):
"""Finds an element by id.
:Args:
- id\_ - The id of the element to be found.
:Usage:
driver.find_element_by_id('foo')
"""
return self.find_element(by=By.ID, value=id_)