在Selenium WebDriver(浏览器)中呈现HTTP响应(HTML内容)

10
我正在使用Requests模块发送GETPOST请求到网站,然后处理它们的响应。如果响应符合某些条件,我希望它能在浏览器中打开。目前我正在使用selenium包并通过selenium webdriver重新发送请求到网页。但是,我觉得这样效率很低,因为我已经获取了一次响应,所以是否有一种方法可以直接将这个已获得的Response对象呈现到通过selenium打开的浏览器中? 编辑 我能想到的一个hacky方法是将response.text写入一个临时文件,然后在浏览器中打开该文件。请告诉我是否有比这更好的方法?

简短回答是不行的。长话短说,像你所尝试的那种折衷方法确实存在,但为何要费这些劲呢?通过这样的努力,你能获得什么好处呢? - e4c5
如我所说,我想在Selenium中只有在页面响应满足一定条件时才打开该页面。如果我简单地在浏览器中打开所有请求,那会使我的应用程序变慢,因为浏览器会渲染不必要的响应。 - bawejakunal
1
你为什么要在浏览器中打开? - Padraic Cunningham
为了检查XSS执行,该代码尝试注入警报作为RXSS概念验证,然后在浏览器中检查其是否成功执行。 - bawejakunal
你尝试过selenium-requests吗? - JRodDynamite
@JRodDynamite 是的,我尝试过selenium-requests,但它似乎没有按预期工作,浏览器内没有正确的渲染,而且它会打开和关闭新标签页,而不是在当前标签页中工作。 - bawejakunal
1个回答

14

要直接使用Selenium渲染HTML,您可以使用data方案和get方法:

from selenium import webdriver
import requests

content = requests.get("http://stackoverflow.com/").content

driver = webdriver.Chrome()
driver.get("data:text/html;charset=utf-8," + content)

或者您可以使用一段脚本来编写页面:

from selenium import webdriver
import requests

content = requests.get("http://stackoverflow.com/").content

driver = webdriver.Chrome()
driver.execute_script("""
  document.location = 'about:blank';
  document.open();
  document.write(arguments[0]);
  document.close();
  """, content)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接