Python中如何打印使用JS跳转的下一页URL
网页代码:
<br><head> <br> <meta charset="utf-8"> <br></head> <br><body> <br> <h1>P2L2A</h1> <br> <a href="#" onclick="javascript: document.getElementById('submit').click(); return false">link</a> <br> <form action="./upload" method="post" style="display: none"> <br> <input type="text"> <br> <input id="submit" type="submit"> <br> </form> <br></body> <br>
后台代码:
<br>@<a target="_blank" href="/member/post">post</a>("/upload") <br>def upload(): <br> return static_file("P2L3.html", root=".") <br>
如果用 Selenium 搭配 PhantomJS 获取跳转的链接依然是 /upload
我想得到的 URL 为 P2L3.html,因为 /upload 是 POST 才能得到的,而且静态网页就是 P2L3.html
Python中如何打印使用JS跳转的下一页URL
关键字:forward 和 redirect
我理解你的问题。你想在Python中获取通过JavaScript进行页面跳转后的最终URL,对吧?这确实是个常见需求,因为requests库无法执行JS。
你需要用Selenium或者Playwright这类能运行JavaScript的浏览器自动化工具。下面是个完整示例:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
# 设置Chrome选项
chrome_options = Options()
chrome_options.add_argument('--headless') # 无头模式,不显示浏览器窗口
chrome_options.add_argument('--disable-gpu')
# 创建驱动
driver = webdriver.Chrome(options=chrome_options)
try:
# 访问初始页面
initial_url = "https://example.com/page-with-js-redirect"
driver.get(initial_url)
# 等待页面加载完成(包括JS执行)
time.sleep(2) # 简单等待
# 或者使用显式等待,等待某个元素出现
# wait = WebDriverWait(driver, 10)
# wait.until(EC.presence_of_element_located((By.ID, "some-element")))
# 获取跳转后的最终URL
final_url = driver.current_url
print(f"初始URL: {initial_url}")
print(f"最终URL: {final_url}")
# 如果需要处理多次跳转,可以这样
print("所有访问过的URL:")
for log in driver.get_log('performance'):
# 这里可以解析日志获取所有请求URL
pass
finally:
driver.quit()
如果你想要更现代、性能更好的方案,推荐用Playwright:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
# 监听所有响应
page.on('response', lambda response:
print(f"响应URL: {response.url}") if 'target-page' in response.url else None)
# 访问页面
page.goto("https://example.com/page-with-js-redirect")
# 等待导航完成
page.wait_for_load_state('networkidle')
# 获取最终URL
print(f"最终URL: {page.url}")
browser.close()
关键点:纯requests不行,得用能跑JS的工具。
总结:用Selenium或Playwright获取JS跳转后的URL。
请问大佬说的是哪个函数的参数。我是小白:(

