Python零基础之selenium进阶(多窗口和页面等待)

Python零基础之selenium进阶 - 多窗口和页面等待

1. selenium中的页面等待

  • 主要分为三种:固定等待,隐式等待,显式等待
    • 固定等待:通过time.sleep()实现,等待一段时间,这个时间可以是固定值也可以配合random模块调整为随机值
    • 隐式等待:通过.implicitly()实现,有等待条件,一般为有匹配对象就立刻结束等待时间,运行效率较高,但存在被反爬的风险
    • 显式等待:通过WebDriverWait()实现,与隐式等待类似,但增加了异常处理的条件,程序更为友好,但导入的模块较多,代码书写较为复杂,故使用较少

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


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

# 1. 定长等待
time.sleep(3)
driver.find_element_by_id('kw').send_keys('hello')
time.sleep(3)
print('sleep完啦')

# 2. 隐式等待
# 找到了就立刻返回,不是必须等完10秒
# 特点:运行效率高,节省时间
driver.implicitly_wait(10)
# 清楚数据
driver.find_element_by_id('kw').clear()
driver.implicitly_wait(10)
driver.find_element_by_id('kw').send_keys('你好')
print('implicitly完啦')

# 3. 显式等待
try:
    element = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'su')))
    print('webDriverWait元素加载结束啦')
    element = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.ID, 'su')))
    print('webDriverWait所有满足条件的元素加载结束啦')
    element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'su')))
    print('webDriverWait满足条件的元素可以点击啦')
finally:
    driver.quit()

2. selenium多窗口

  • 当需要打开多个窗口时:
    • .execute_script(‘window.open(“url”)’)
    • 新打开的窗口会被放到当前index值为[0]的窗口后边
  • 当需要对多个窗口进行操作时:
    • .switch_to.window(driver.window_handles[索引值])
  • 当需要关闭当前页面时:
    • .close()
  • 当需要关闭所有页面时:
    • .quit()
from selenium import webdriver
import time

driver = webdriver.Chrome()

driver.get('https://www.baidu.com')
# 会覆盖百度的页面
# driver.get('https://www.douban.com')
time.sleep(2)

# 会打开新的标签页面,可以理解为另外开的
driver.execute_script('window.open("https://www.douban.com")')
time.sleep(2)

# 新打开的会被放在主页面[0]的后边,也就是百度关闭前始终是[0],搜狐是[1],豆瓣是[2]
driver.execute_script('window.open("https://www.sohu.com")')
time.sleep(2)

# 操作会对当前页面进行操作
driver.find_element_by_id('kw').send_keys('哈哈,我是当前页面')
time.sleep(2)
# 关闭了当前页面,也就是第一个get的页面,只有这个才是当前页面
# driver.close()
# target window already closed from unknown error: web view not found
# 第二次关闭会提示页面已关闭,找不到该页面

print('-'*50)

# 切换窗口 switch_to.windows切换
driver.switch_to.window(driver.window_handles[0])
print(driver.current_url)
driver.switch_to.window(driver.window_handles[1])
print(driver.current_url)
driver.switch_to.window(driver.window_handles[2])
print(driver.current_url)
print('-'*50)

# 在这个位置关闭了主页面以后,百度会变成[0],搜狐会变成[1]
# 因为当前切换到的主页面[2]豆瓣,已经被关闭
driver.close()

driver.switch_to.window(driver.window_handles[0])
print(driver.current_url)
driver.switch_to.window(driver.window_handles[1])
print(driver.current_url)

print('-'*50)

time.sleep(2)

# 关闭所有页面
driver.quit()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Selenium是一个用于自动化Web应用程序测试的工具,它可以模拟用户在浏览器中的操作。如果你想一步提升你的Selenium技能,以下是一些的建议: 1. 学习页面对象模型(Page Object Model,POM):POM是一种设计模式,它将页面的每个元素和操作封装到一个对象中。通过使用POM,你可以更好地组织和维护你的测试代码。 2. 切换到不同的浏览器:除了常见的浏览器如Chrome和Firefox,Selenium还支持其他浏览器。尝试在不同的浏览器上运行你的测试,以确保你的应用程序在各种环境下都能正常工作。 3. 学习显式和隐式等待等待Selenium中非常重要的概念。显式等待是指在特定条件满足之前一直等待,而隐式等待是指在整个测试过程中都等待一段固定的时间。了解如何使用这些等待方法可以提高你的测试的准确性和可靠性。 4. 学习处理弹窗和框架:有些Web应用程序使用弹窗或框架来展示内容。学习如何在Selenium中处理这些弹窗和框架,以便你能够完成更复杂的测试任务。 5. 学习使用测试框架:Selenium本身只提供了基本的操作方法,但你可以结合使用测试框架如JUnit或TestNG来更好地组织和管理你的测试代码。 6. 学习使用Selenium Grid:如果你需要在多个机器上并行运行测试,可以学习使用Selenium Grid。它可以帮助你扩展你的测试并加快执行速度。 这些是Selenium的一些建议,希望对你有帮助!如果你有任何一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kingx3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值