【Python】Selenium怎么切换浏览器的页面

我们在爬网使用Selenium进行测试的时候,有时候想要点击浏览器里面的网址,跳到另一个页面上,获取第二个页面的内容。

在这里插入图片描述
可是有时候从官网进去,点击跳转到下一个页面以后,却没法定位到下一个页面的元素,这时候就需要在多个浏览器标签页或窗口之间切换了,以下是切换浏览器页面的方法,这里主要使用的是window_handles进行切换:

1. 获取所有标签页句柄,并切换到特定标签页

如果是需要点击页面的某个元素进入到下一页,需要定位到跳转下一个浏览器页面的元素,点击后,等待获取所有的浏览器标签页的句柄。

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

# 创建WebDriver实例,指定WebDriver的路径
driver = webdriver.Chrome(executable_path='path/to/chromedriver')

# 打开目标网页
driver.get('https://XXX.com')

# 等待页面加载完成,然后定位元素

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '')))
# 点击元素
element.click()

# 等待新窗口打开,获取新窗口的句柄
WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) > 1) 

使用driver.window_handles来获取当前浏览器所有打开的标签页的句柄列表,这意味着可以看到当前的浏览器有多少个页面,最后以列表的形式呈现出来。

tabs = driver.window_handles
print(tabs)
print(len(tabs)) #打印列表的个数

接着使用driver.switch_to.window()方法,传入标签页句柄的位置,来切换到特定的标签页。

driver.switch_to.window(tabs[1])  # 切换到第二个标签页
driver.switch_to.window(tabs[2])  # 切换到第三个标签页

在新标签页中执行完操作后,可以关闭它并返回到原来的标签页,否则如果打开过多,可能会导致计算机资源不足,从而影响其他应用程序的性能,甚至可能导致浏览器或操作系统变慢或崩溃。

driver.close()  # 关闭当前标签页
driver.switch_to.window(tabs[0])  # 切换回第一个标签页

2. 打开新标签页,并连接新的网址

可以使用JavaScript来打开一个新标签页,并自动切换到新的空白标签页。

driver.execute_script("window.open();")

在这里插入图片描述
然后获取新的标签页句柄并切换:

new_tab = driver.window_handles[-1]  # 新标签页通常是列表中的最后一个
driver.switch_to.window(new_tab)

然后连接目标的网址,最后关闭这个窗口并返回到原来的标签页。

driver.close()  # 关闭当前标签页
driver.switch_to.window(tabs[0])  # 切换回第一个标签页

3.示例代码

点击网页元素,实现跳转的代码:

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

# 创建WebDriver实例,指定WebDriver的路径
driver = webdriver.Chrome(executable_path='path/to/chromedriver')

# 打开目标网页
driver.get('https://XXX.com')

# 等待页面加载完成,然后定位元素

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '')))
# 点击元素
element.click()

# 等待新窗口打开,获取新窗口的句柄
WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) > 1) 

driver.switch_to.window(driver.window_handles[-1])  # 切换到新标签页
#进行下一步对新标签页的操作,此部分自行编辑

# 关闭新标签页并返回到原标签页
driver.close()
driver.switch_to.window(driver.window_handles[0])  # 切换回原标签页

# 关闭新窗口
driver.close()

# 最后,关闭浏览器
driver.quit()

新建空白窗口后,连接网址的代码:

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

# 创建WebDriver实例,指定WebDriver的路径
driver = webdriver.Chrome(executable_path='path/to/chromedriver')

# 打开目标网页
driver.get('https://XXX.com')
sleep(3)

driver.execute_script("window.open();")
driver.switch_to.window(driver.window_handles[-1])  # 切换到新窗口

# 在新窗口中进行操作...
driver.get("http://www.XXX2.com")
sleep(3)

 # 切换回原标签页
driver.switch_to.window(driver.window_handles[0]) 

# 关闭新窗口
driver.close()

# 最后,关闭浏览器
driver.quit()

请注意,不同的浏览器可能在处理标签页和窗口时有细微的差别,在使用的过程中,注意浏览器的区别,上面使用的是谷歌浏览器。

相关推荐

  1. QT登录界面,(页面切换

    2024-07-16 15:32:08       30 阅读
  2. 深入理解浏览器页面渲染机制

    2024-07-16 15:32:08       41 阅读
  3. js怎样控制浏览器前进、后退、页面跳转

    2024-07-16 15:32:08       33 阅读
  4. uniapp怎么进行页面跳转

    2024-07-16 15:32:08       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 15:32:08       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 15:32:08       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 15:32:08       62 阅读
  4. Python语言-面向对象

    2024-07-16 15:32:08       72 阅读

热门阅读

  1. 观察者模式:构建响应式系统的基石

    2024-07-16 15:32:08       25 阅读
  2. 日常学习--Linux命令梳理--20240715

    2024-07-16 15:32:08       20 阅读
  3. Scala学习笔记17: Try与异常处理

    2024-07-16 15:32:08       23 阅读
  4. 全局变量 y1 会和 cmath 标准库中的变量产生冲突

    2024-07-16 15:32:08       19 阅读
  5. Solus Linux简介

    2024-07-16 15:32:08       24 阅读
  6. 0基础学python-8:if,while,for

    2024-07-16 15:32:08       24 阅读
  7. RPC 的原理和示例

    2024-07-16 15:32:08       24 阅读
  8. Log4j的原理及应用详解(三)

    2024-07-16 15:32:08       25 阅读
  9. 【TFTP工具(Trivial File Transfer Protocol)】

    2024-07-16 15:32:08       24 阅读
  10. ssh升级

    ssh升级

    2024-07-16 15:32:08      24 阅读
  11. 什么是PHP?

    2024-07-16 15:32:08       22 阅读