常用API(续)

1.下载文件

       Firefox浏览器配置:配置火狐浏览器的首选项---下载相关的首选项

import time

from selenium import webdriver

fp = webdriver.FirefoxProfile()

# browser.download.folderList 设置成2表示使用自定义的路径,0下载到桌面,1使用默认地址
fp.set_preference("browser.download.folderList",2)

# browser.download.manager.showWhenStarting 是否显示开始下载
# True表示显示,False表示不显示
fp.set_preference("browser.download.manager.showWhenStarting",False)

# 设置自定义下载的路径
fp.set_preference("browser.download.dir",'d:\\')

# 是否需要弹窗询问
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")

driver = webdriver.Firefox(firefox_profile=fp)

driver.get('https://pypi.org/project/selenium/#files')

time.sleep(5)
driver.find_element_by_partial_link_text('selenium-4.9.1').click()

Chrome浏览器配置:

import time

from selenium import webdriver

# download.default_directory 配置下载路径
# profile.default_content_settings.popups 取消弹窗询问
pres = {
    "download.default_directory": "D://",
    "profile.default_content_settings.popups": 0
}

options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', pres)

driver = webdriver.Chrome(options=options)

driver.get('https://pypi.org/project/selenium/#files')

time.sleep(5)
driver.find_element_by_partial_link_text('selenium-4.9.1').click()

cookie 处理:

1. Cookie是一小段的文本信息;格式:python中的字典(键值对组成)

    2. Cookie产生:客户端请求服务器,如果服务器需要记录该用户状态,就向客户端浏览器颁发一个Cookie格式

    3. Cookie使用:当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器,服务器检查该Cookie,以此来辨认用户状态。

操作cookie 的方法有:

get_cookies()            获得所有cookie 信息
get_cookie(name)         返回特定name 有cookie 信息
add_cookie(cookie_dict)  添加cookie,必须有name 和value 值
delete_cookie(name)      删除特定(部分)的cookie 信息
delete_all_cookies()     删除所有cookie 信息
#   cookie:
#   通过cookie识别用户是谁
#   网页上查看cookie:
#   1.打开F12,点击application
#   2.在左侧选择cookie

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('https://baidu.com/')
#   获取所有cookies:
li = driver.get_cookies()
print(li)

#   获取某一条指定name的cookie
print(driver.get_cookie('stats_session_id'))

#   添加cookie:
li1 = {
    'name':'Tabb',
    'value':'11111'
}
print(driver.add_cookie(li1))

#   删除cookie:
# driver.delete_cookie('name')
#   删除所有cookie:
# driver.delete_all_cookies()

验证码处理:

1.在测试环境去掉验证码--需要开发配合

2.设置万能码--程序后门

3.图片验证码识别技术,python-tesseract --不稳定

4.cookie伪装:

import time

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('http://www.baidu.com')

# 伪装了已经登录的cookie
cookie_list = [
    {"name": "BDUSS",
     "value": "pJd3NZM0xMZXpZVW9Uck9ULVNQSTlublRNLXhJTkNwM0NNaH5iQ21HUk5CSlZrSVFBQUFBJCQAAAAAAAAAAAEAAAAPcn9Rt-i~8bXE0cC44Nfw1d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE13bWRNd21kYl"},
    {"name": "BDUSS_BFESS",
     "value": "pJd3NZM0xMZXpZVW9Uck9ULVNQSTlublRNLXhJTkNwM0NNaH5iQ21HUk5CSlZrSVFBQUFBJCQAAAAAAAAAAAEAAAAPcn9Rt-i~8bXE0cC44Nfw1d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE13bWRNd21kYl"}
]

# 把cookie添加到原本的cookies里面
for cookie in cookie_list:
    driver.add_cookie(cookie)

time.sleep(5)

# 刷新浏览器
driver.refresh()

time.sleep(10)

driver.quit()

上传文件:

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('file:///C:/Users/Administrator/Desktop/%E8%AF%BE%E4%BB%B6/%E8%AF%BE%E4%BB%B6/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8CA.html')


#   定位文件上传按钮
li = driver.find_element_by_name('upfilea')
#   使用send.keys(r文件路径)上传
li.send_keys(r'D:\ERROR.TXT')

元素等待:

什么是元素等待:WebDriver定位页面元素时如果未找到,会在指定时间内一直等待的过程

selenium中常用的等待时间方式有三种:显式等待、隐式等待、sleep

1.强制等待:

1.强制等待: 无论元素是否加载完毕,都要等待这么久
time.sleep(秒数)

2.隐式等待:

隐式等待:driver.implicitly_wait(10)
    等待页面元素加载完毕,最多等10秒钟时间,往下执行查找元素
    如果页面所有元素在 3 秒加载完毕,那么就只等待3秒钟

    缺点:1.需要等待整个页面加载完毕之后才会往下执行,
          但是存在页面还未加载完毕,想要操作的元素已经加载完毕,因此会浪费等待时间

        2.超过等待时间之后,如果页面还未加载完毕,接着往下执行
          有可能存在元素找不到的问题

    优点:针对driver的整个周期有效,只需要设置一次
2.隐形等待:
driver.implicitly_wait(秒数)

3.显示等待:

显示等待:
        from selenium.webdriver.support.wait import WebDriverWait
        WebDriverWait
            WebDriverWait(driver,超时时间,检测频率,忽略异常)

            查找某个元素,一直查找10秒钟,每个0.5秒检测一次,存在则返回元素,不存在抛出TimeoutException的异常
            其中until方法的message参数是可选抛出异常信息的参数
            element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId"),message="报错信息")

                实现逻辑分析:
                    1.WebDriverWait(driver, 10)实例化一个显式等待类
                    2.调用until方法,把匿名函数传给 method 参数
                    3.method 参数使用 method(self._driver)来达到查找元素的功能


# 例如:
from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

# element = driver.find_element_by_id('kw')
# element.send_keys("111")

#  lambda 形式参数 : 代码表达式
# 变量 = lambda 形式参数 : 代码表达式
# 变量(实际参数)
element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id('kw'), "输入框没有找到")
element.send_keys("111")

time.sleep(5)
driver.quit()
EC模块:expected_conditions
   是selenium官方封装的一些用来断言的方法
   断言:判断预期结果和实际结果是否相符合
from selenium import webdriver
import time
#   导入
from selenium.webdriver.support.wait import WebDriverWait
#   导入:expected_conditions  as 取别名 Ec
from selenium.webdriver.support import expected_conditions as Ec

driver = webdriver.Chrome()
driver.get('https://baidu.com/')

#   判断网页title是否是特定文本,相同返回True,不同返回False
li = Ec.title_is('百度一下,你就知道')(driver)
print(li)
#   判断网页是否包含特定文本,包含返回True,不同返回False
# li = Ec.title_contains('百度一下')(driver)
# print(li)
time.sleep(3)
driver.quit()

EC模块和显示等待结合:

import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()

driver.get('http://www.baidu.com')

locator = ("id", "kw")
# EC和显示等待结合使用
ele = WebDriverWait(driver, 10).until(EC.presence_of_element_located(locator), message='输入框找不到')
ele.send_keys("1111")

time.sleep(10)
driver.quit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值