
本文介绍了一种使用 Selenium 获取由 JavaScript 代码触发的重定向 URL,同时保持在当前页面不跳转的方法。通过修改 JavaScript 代码,将目标 URL 存储到全局变量中,然后使用 Selenium 获取该变量,从而避免页面跳转。该方法适用于按钮触发复杂 JavaScript 函数的情况,绕过直接点击按钮导致页面重定向的问题。
在 Web 自动化测试中,经常会遇到点击按钮后由 JavaScript 代码触发页面重定向的情况。直接使用 driver.current_url 获取 URL 会导致页面跳转,这在某些场景下是不可接受的,例如需要在当前页面继续执行其他操作。本文提供了一种解决方案,通过修改 JavaScript 代码,在不跳转页面的情况下获取目标 URL。
核心思路:
- 定位导致重定向的 JavaScript 代码。
- 修改 JavaScript 代码,阻止重定向,并将目标 URL 存储到全局变量。
- 使用 Selenium 执行 JavaScript 代码,获取全局变量中的 URL。
具体步骤:
立即学习“Java免费学习笔记(深入)”;
步骤 1:定位 JavaScript 代码
首先需要找到负责重定向的 JavaScript 代码。Chrome 开发者工具提供了强大的调试功能,可以帮助我们定位代码。
- 打开 Chrome 开发者工具 (F12)。
- 切换到 "Sources" (或 "源代码") 标签。
- 使用 Event Listener Breakpoints 功能。在 "Event Listener Breakpoints" 面板中,展开 "Script" (或 "脚本"),勾选 "click" 事件。
- 点击页面上的目标按钮。
- 开发者工具会自动在 JavaScript 代码中暂停,方便我们逐步调试,找到负责重定向的代码。 还可以添加 Event Listener Breakpoints for the load event。
步骤 2:修改 JavaScript 代码
找到负责重定向的代码后,需要修改它,阻止页面跳转,并将目标 URL 存储到全局变量 target_url 中。
例如,如果 JavaScript 代码如下:
window.location.href = "https://www.example.com/new_page";
可以修改为:
target_url = "https://www.example.com/new_page"; // window.location.href = "https://www.example.com/new_page"; // 注释掉重定向的代码
步骤 3:使用 Resource Override 扩展自动修改 JavaScript 代码
手动修改 JavaScript 代码比较繁琐,可以使用 Chrome 扩展 Resource Override 来自动完成。
Resource Override 允许我们拦截特定的网络请求,并使用本地文件替换响应内容。
- 安装 Resource Override 扩展。
- 配置 Resource Override,拦截包含重定向代码的 JavaScript 文件。
- 使用修改后的 JavaScript 文件替换原始文件。
步骤 4:Selenium 获取 URL
在 Selenium 中,可以使用 driver.execute_script() 方法执行 JavaScript 代码,并获取全局变量 target_url 的值。
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("your_website_url")
# 点击按钮 (假设按钮的 id 是 "my_button")
button = driver.find_element("id", "my_button")
button.click()
# 获取 target_url 的值
my_target_url = driver.execute_script("return target_url;")
print(my_target_url)
driver.quit()注意事项:
- 确保在执行 driver.execute_script() 之前,JavaScript 代码已经执行完毕,并且 target_url 已经被赋值。
- 如果 JavaScript 代码中使用了异步操作,需要等待异步操作完成后再获取 target_url 的值。
- 如果页面上存在多个按钮触发 JavaScript 重定向,需要为每个按钮设置不同的全局变量名,例如 target_url1、target_url2 等。
总结:
通过修改 JavaScript 代码,我们可以绕过页面重定向,在不改变当前页面的情况下获取目标 URL。这种方法适用于按钮触发复杂 JavaScript 函数的场景,为 Web 自动化测试提供了更大的灵活性。使用 Resource Override 扩展可以自动化修改 JavaScript 代码,提高效率。










