在Selenium 2中,WebDriver
对象只提供了一个方法getPageSource()
,它可以保存原始HTML页面而不需要任何CSS,JS,图像等。
有没有办法在HTML页面中保存所有引用的资源(类似于HtmlUnit的HtmlPage.save()
)?
答案 0 :(得分:0)
不。如果可以,请针对此特定任务选择HtmlUnit
。
我认为,你能做的最好的事情是Robot
。同时按 Ctrl + S ,使用 Enter 进行确认。它是盲目的,它是不完美的,但它是最接近你需要的东西。
答案 1 :(得分:0)
您可以使用selenium交互来处理它。
using OpenQA.Selenium.Interactions;
有几种方法可以做到这一点。我处理这样的事情的方法之一是找到页面的中心项,或者你想保存的区域,并做一个动作构建器。
var htmlElement = driver.FindElement(By.XPath("//your path"));
Actions action = new Actions(driver);
try
{
action.MoveToElement(htmlElement).ContextClick(htmlElement).SendKeys("p").Build().Perform();
}
catch(WebDriverException){}
这只需右键单击该区域,然后在右键单击时发送密钥“p”,这是Firefox中的“保存页面为”热键。另一种方法是让构建器发送密钥。
var htmlElement = driver.FindElement(By.Xpath("//your path"));
action.MoveToElement(htmlElement);
try
{
action.KeyDown(Keys.Control).SendKeys("S").KeyUp(Keys.Control).Build().Perform();
}
catch(WebDriverException){}
请注意,在这两种情况下,如果你离开驱动程序的范围,比如一个Windows窗体,那么你必须切换你的case /代码来处理弹出的窗体。 Selenium也会在发送密钥后没有返回任何问题,因此Try Catches就是为此而设的。如果有人有办法解决这个问题,那就太棒了。
答案 2 :(得分:0)
我知道我的回答很晚了,但在我自己搜索时,我并没有真正找到这个问题的答案。所以我自己做了一些事情,希望我能帮助一些人。
对于c#,我是这样做的:
using system.net;
string DataDirectory = "C:\\Temp\\AutoTest\\Data\\";
string PageSourceHTML = Driver.PageSource;
string[] StringSeparators = new string[] { "<" };
string[] Result = PageSourceHTML.Split(StringSeparators, StringSplitOptions.None);
string CSSFile;
string FileName = "filename.html";
System.IO.File.WriteAllText(DataDirectory + FileName, PageSourceHTML);
foreach(string S in Result)
{
if(S.Contains("stylesheet"))
{
CSSFile = S.Substring(28); // strip off "link rel="stylesheet" href="
CSSFile = CSSFile.Substring(0,CSSFile.Length-10); // strip off characters behind, like " />" and newline, spaces until next "<" was found. Can and probably will be different in your case.
System.IO.Directory.CreateDirectory(DataDirectory + "\\" + CSSFile.Substring(0, CSSFile.LastIndexOf("/"))); //create the CSS direcotry structure
var Client = new WebClient();
Client.DownloadFile(Browser.Browser.WebUrl + "/" + CSSFile, DataDirectory + "\\" + CSSFile); // download the file and save it with the same filename under the same relative path.
}
}
我确信可以改进以包含任何不可预见的情况,但对于我的测试网站,它总是会像这样工作。