Selenium Webdriver之文件上传操作、文件下载操作、WebDriver的高级特性、时间等待、其他设置、配置CHrome浏览器、SSL证书错误处理

一、文件上传操作

1、直接上传

send_keys()
driver.find_element_by_id('uploadFile').send_keys("D://Users//TestFile//test.text")

2、使用Autolt上传

1)、文件上传

driver.find_element_by_id('fileupload-btn).click()
os.system(r"D://Users//TestFile//test.text")

2)、Autolt的使用

①、Autolt工具主要用来操作Windows上的窗口;
②、Autolt官方地址:https://www.autoitscript.com/site/
③、Autolt下载地址:https://www.autoitscript.com/site/autoit/downloads/
在这里插入图片描述
④、在文件上传主要用到如下功能

1、AutoIt Windows Info:用于定位元素,识别并获取WIndows上的控件信息;
2、SciTE Script Editor:用于编辑脚本,将获取的元素写成AutoIt执行脚本;
3、Compile Script to.exe:用于将编写好的脚本AutoIt转成可执行文件.exe;
4、Run Script:用于执行AutoIt脚本;

⑤、打开AutoIt Windows Info,鼠标拖动工具上的【Finder Tool】图标至需要识别的控件上,控件的标识信息会显示在工具的下方。

二、文件下载操作

手动修改浏览器的下载路径和通过WebDriver的options设置修改浏览器的下载路径。

1、手动修改
在这里插入图片描述
2、通过options修改

在Chrome文件下载中可以通过设置字段值改变文件的下载路径

1、download.default_directory:设置下载路径
2、download.prompt_for_download:设置为False则在下载时不需要提示

三、WebDriver的高级特性

1、cookie操作

对cookie的操作常用于绕过登录,WebDriver针对cookie提供了诸如读取、添加、删除等方法。

1、get_cookies():以字典的形式返回cookie所有信息;
2、get_cookie(name):返回cookie字典中key为name的值;
3、add_cookie(cookie_dict):手动添加cookie;
4、delete_cookie(name):删除cookie字典中key为name的值;
5、delete_all_cookies():删除所有cookie信息;

2、JavaScript调用

driver.execute_script("document.getElementById('id')")

3、屏幕截图

1、save_screenshot():获取当前窗口的屏幕截图,并且以png文件格式存储;
2、get_screenshot_as_base64():以base64编码字符串的形式获取当前窗口的屏幕截图;
3、get_screenshot_as_file():获取当前窗口的屏幕截图,使用完整的路径;
4、get_screenshot_as_png():以二进制数据形式获取当前窗口的屏幕截图;

四、时间等待

1、强制等待

import time
time.sleep(5)			#时间单位默认为秒

2、隐式等待

driver.implicitly_wait(10)
driver.find_element_by_id("id").click()

设置隐式等待的时间为10秒,如果找到元素则立即执行下一个动作click,不会完全等够10秒才去执行下一个动作;如果超过10秒还没有找到该元素,则抛出未能定位到该元素的错误。

3、显示等待

导入WebDriverWait:
from selenium.webdriver.support.ui import WebDriverWait
class WebDriverWait(object):
    def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):
driver:webdriver实例:Chrome等;
timeout:超时时间;
poll_frequency:调用后面操作的频率,默认为0.5s;
ignored_exceptions:忽略的异常,默认为NoSuchElementException;
导入:expected_conditions:
from selenium.webdriver.support import expected_conditions

五、其他设置

1、限制页面加载时间

set_page_load_timeout(time):设置页面加载的超时时间;
driver.set_page_load_timeout(30)

2、获取环境信息

capabilities[]
driver.capabilities['browserVersion']
browserVersion:获取浏览器版本信息;
browserName:获取浏览器名称信息;
platformName:获取操作系统名称;
proxy:获取代理信息;
timeouts:获取超时时间(返回的是一个字典);
超时时间返回3个设置值:
1、implicit:查找元素的超时时间,单位毫秒,默认为0;
2、pageLoad:等待文档完全加载的时间,单位毫秒,默认为30秒;
3、script:加载脚本的超时时间,单位毫秒,默认为30秒;

六、配置Chrome浏览器

1、屏蔽浏览器对Selenium的检测

在使用Selenium时,浏览器会检测是被自动测试软件控制,而非人的行为,会提示“Chrome正受到自动测试软件的控制”。

解决办法:屏蔽浏览器的检测

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches',['enable-automation'])
driver = webdriver.Chrome(options=options)

ChromeOptions是一个配置Chrome启动时属性的类,使用该类可以对Chrome进行一些设置:

1、设置Chrome二进制文件的位置(binary_location)
2、添加启动参数(add_argument)
3、添加拓展应用(add_extension,add_encoded_extension)
4、添加实验性质的设置参数(add_experimental_option)
5、设置调试器地址(debugger_address)

2、禁止图片和视频加载

options = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images":2}
options.add_experimental_option('prefs',prefs)
driver = webdriver.Chrome(chrome_options=options)

3、添加扩展插件

options = webdriver.ChromeOptions()
options.add_extension('C:/extension/xxxx.crx')
driver = webdriver.Chrome(chrome_options=options)

4、设置编码

options = webdriver.ChromeOptions()
options.add_argument('lang=zh_CN.UTF-8')
driver = webdriver.Chrome(chrome_options=options)

5、其他参数

1、添加代理:options.add_argument("--proxy-server=http://192.10.1.1:8888")
2、模拟移动设备:options.add_argument( )
3、禁用JS:options.add_argument("--disable-javascript")
4、禁用插件:options.add_argument("--disable-plugins")
5、禁用java:options.add_argument("--disable-java")
6、启动时最大化:options.add_argument("--disable-maximized")

七、SSL证书错误处理

1、Chrome浏览器

options = webdriver.ChromeOptions()
options.add_argument("--ignore-certificate-errors")
driver = webdriver.Chrome(chrome_options=options)
您可以使用以下代码来设置请求次数: ```python from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities caps = DesiredCapabilities.CHROME caps['loggingPrefs'] = {'performance': 'ALL'} options = webdriver.ChromeOptions() options.add_argument('--ignore-certificate-errors') options.add_argument('--ignore-ssl-errors') options.add_argument('--disable-extensions') options.add_argument('--disable-gpu') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--disable-infobars') options.add_argument('--disable-notifications') options.add_argument('--disable-popup-blocking') options.add_argument('--disable-web-security') options.add_argument('--disable-logging') options.add_argument('--log-level=3') driver = webdriver.Chrome(desired_capabilities=caps, options=options) driver.execute_cdp_cmd('Network.enable', {}) driver.execute_cdp_cmd('Network.setCacheDisabled', {'cacheDisabled': True}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'Referer': 'https://www.google.com/'}}) driver.execute_cdp_cmd('Network.setRequestInterception', {'patterns': [{'urlPattern': '*', 'resourceType': 'Document', 'interceptionStage': 'HeadersReceived'}]}) driver.execute_cdp_cmd('Network.interceptRequest', {'urlPattern': '*', 'resourceType': 'Document', 'interceptionStage': 'HeadersReceived', 'handler': 'Network.continueInterceptedRequest'}) driver.execute_cdp_cmd('Network.setBlockedURLs', {'urls': ['*.jpg', '*.jpeg', '*.png', '*.gif', '*.css', '*.js', '*.svg', '*.woff', '*.woff2', '*.ttf', '*.eot', '*.ico']}) driver.execute_cdp_cmd('Network.setCookie', {'name': 'cookie_name', 'value': 'cookie_value', 'url': 'https://www.google.com/'}) driver.execute_cdp_cmd('Network.setCookies', {'cookies': [{'name': 'cookie_name', 'value': 'cookie_value', 'url': 'https://www.google.com/'}]}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'Referer': 'https://www.google.com/'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'Accept-Language': 'en-US,en;q=0.9'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'Accept-Encoding': 'gzip, deflate, br'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'Connection': 'keep-alive'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'Upgrade-Insecure-Requests': '1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'Cache-Control': 'max-age=0'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'Pragma': 'no-cache'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'TE': 'Trailers'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'DNT': '1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Requested-With': 'XMLHttpRequest'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-For': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Real-IP': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Client-IP': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Remote-IP': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Originating-IP': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Host': 'www.google.com'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-Host': 'www.google.com'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-Proto': 'https'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-Scheme': 'https'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-Port': '443'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-For-Original': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Real-IP-Original': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Client-IP-Original': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Remote-IP-Original': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Originating-IP-Original': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Host-Original': 'www.google.com'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-Host-Original': 'www.google.com'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-Proto-Original': 'https'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-Scheme-Original': 'https'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-Port-Original': '443'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-For-Client-IP': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Real-IP-Client-IP': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Client-IP-Client-IP': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Remote-IP-Client-IP': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Originating-IP-Client-IP': '127.0.0.1'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Host-Client-IP': 'www.google.com'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-Host-Client-IP': 'www.google.com'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-Proto-Client-IP': 'https'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-Scheme-Client-IP': 'https'}}) driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'X-Forwarded-Port-Client-IP': '443'}}) url = 'https://www.google.com/' for i in range(10): driver.get(url) ``` 这段代码可以设置请求次数为10次,您可以根据需要进行修改。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值