作者:夏欣晴 | 来源:互联网 | 2023-10-12 21:54
有时候需要在多窗口切换,webdriver提供了switch_to_window()方法支持切换窗口;fromseleniumimportwebdriverimportos,tim
有时候需要在多窗口切换,webdriver提供了switch_to_window()方法支持切换窗口;
from selenium import webdriver
import os,time
driver = webdriver.Chrome()
frist_url = "http://www.baidu.com"
driver.get(frist_url)
#获取百度登录窗口句柄
login_windows = driver.current_window_handle
driver.find_element_by_link_text(u"登录").click()
driver.find_element_by_id("jgwab").click()
# 获取当前已打开所有窗口的句柄
all_handles = driver.window_handles
for handles in all_handles:
if handles == login_windows:
driver.switch_to_window(handles)
driver.find_element_by_xpath("//*[@id='TANGRAM__PSP_2__closeBtn']").click()
print("当前页面标题是:",driver.title)
else:
driver.switch_to_window(handles)
print("新打开页面的标题是:", driver.title)
脚本的实现思路:
先获取到打开页面的窗口句柄,然后新打开一个页面;获取到所有窗口的句柄;在所有窗口句柄中循环,如果句柄=百度的窗口句柄,就是百度页面,操作百度页面元素;否则就是新打开的页面,输入页面标题;
这里我们用到了几种新的方法:
current_window_handle #获取当前页面的句柄
window_handles #获取所有窗口的句柄
switch_to_window #切换窗口
2. 警告框处理
实际工作中我们会碰到弹窗提示的情况(alert、confirm、prompt),在webdriver中我们会使用switch_to_alert()方法定位,然后使用text/accept/dismiss/send_keys按需操作;
- text 返回alert、confirm、prompt的文字信息;
- accept 点击确认按钮;
- dismiss 点击取消按钮;
- send_keys 输入值(没有对话框就不要用了,会报错);
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import os,time
driver = webdriver.Chrome()
frist_url = "http://www.baidu.com"
driver.get(frist_url)
link = driver.find_element_by_link_text(u"设置")
#设置鼠标悬停
ActionChains(driver).move_to_element(link).perform()
#打开搜索设置
driver.find_element_by_class_name("setpref").click()
time.sleep(2)
#点击保存设置按钮
driver.find_element_by_xpath('//*[@]/a[1]').click()
time.sleep(2)
#关闭弹框
driver.switch_to_alert().accept()
3. 上传文件
web页面的上传一般有以下几种方式:
普通上传:
普通的附件上传都是将本地文件的路径作为一个值放到input标签中,通过form表单提交的时候将将这个值提交给服务器。
插件上传:
一般指基于Flash与Javascript或Ajax等技术实现的上传功能或插件。
3.1 send_keys上传
通过input标签实现的上传,可以将其看成是一个输入框,通过send_keys传入本地文件路径从而模拟上传功能;
"en">
"UTF-8">
class=
"row_filuid">
class="span6 well">
upload_file
"file" name="file"/>
upfile.html