Python中如何打印使用JS跳转的下一页URL

网页代码:
<br>&lt;head&gt; <br> &lt;meta charset="utf-8"&gt; <br>&lt;/head&gt; <br>&lt;body&gt; <br> &lt;h1&gt;P2L2A&lt;/h1&gt; <br> &lt;a href="#" onclick="javascript: document.getElementById('submit').click(); return false"&gt;link&lt;/a&gt; <br> &lt;form action="./upload" method="post" style="display: none"&gt; <br> &lt;input type="text"&gt; <br> &lt;input id="submit" type="submit"&gt; <br> &lt;/form&gt; <br>&lt;/body&gt; <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


4 回复

关键字: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。

请问大佬说的是哪个函数的参数。我是小白:(

回到顶部