我正在尝试找到一种方法来获取通过无头浏览器执行的 post 方法的响应。
session = requests.Session() session.get(<url here) print session.cookies r = session.post(url).content print r
问题是响应 r 充满了 javascript,我无法使用 Selenium 来执行它,因为它不支持 POST 方法(据我所知)。有什么想法吗?
在使用无头浏览器(例如 Selenium)进行 POST 请求时,您可以通过 Selenium 的 execute_script 方法执行 JavaScript。这使您能够发送 POST 请求并获取响应。以下是如何在 Selenium 中执行 POST 请求并处理响应的一个例子:
execute_script
您可以使用 Selenium 的 execute_script 方法来运行 JavaScript 代码,利用 XMLHttpRequest 对象进行 POST 请求。以下是一个示例:
XMLHttpRequest
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options import time # 设置无头浏览器选项 options = Options() options.headless = True # 启用无头模式 # 使用 Chrome WebDriver service = Service('path/to/chromedriver') # 指定 chromedriver 的路径 driver = webdriver.Chrome(service=service, options=options) # 访问页面 url = '<your_url>' driver.get(url) # 使用 JavaScript 发送 POST 请求 script = """ var xhr = new XMLHttpRequest(); xhr.open("POST", "<url_to_post>", false); // false 表示同步请求 xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(JSON.stringify({"key": "value"})); // 根据需要修改请求数据 return xhr.responseText; // 返回响应文本 """ response = driver.execute_script(script) # 打印响应 print(response) # 清理 driver.quit()
xhr.open
xhr.send
如果您只想获取通过请求的响应,您可以使用 requests 库进行 POST 请求,并使用 Selenium 处理 JavaScript:
requests
import requests from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options import time # 发送初始 GET 请求并获取 cookie session = requests.Session() response = session.get('<your_url>') print(session.cookies) # 发送 POST 请求 post_url = '<url_to_post>' post_data = {'key': 'value'} # 根据需要修改数据 post_response = session.post(post_url, json=post_data) # 或使用 data=post_data print(post_response.text) # 输出 POST 响应 # 如果需要使用 Selenium 来处理 JavaScript options = Options() options.headless = True service = Service('path/to/chromedriver') driver = webdriver.Chrome(service=service, options=options) # 打开页面(使用相同的 cookie) driver.get('<your_url>') for cookie in session.cookies: driver.add_cookie({'name': cookie.name, 'value': cookie.value}) # 进行后续操作 driver.get('<your_url_after_post>') # 根据需要导航到其他页面 # ... # 清理 driver.quit()
<your_url>
<url_to_post>
通过上述方法,您应该能够有效地处理无头浏览器中的 POST 请求及其响应。