我正在尝试使用selenium从指定的HTML文件中捕获源代码,但我不知道为什么,我没有得到我们从浏览器中看到的确切源代码。
以下是我在Java文件中捕获源代码的java代码
private static void getHTMLSourceFromURL(String url, String fileName) {
WebDriver driver = new FirefoxDriver();
driver.get(url);
try {
Thread.sleep(5000); //the page gets loaded completely
List<String> pageSource = new ArrayList<String>(Arrays.asList(driver.getPageSource().split("\n")));
writeTextToFile(pageSource, originalFile);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("quitting webdriver");
driver.quit();
}
/**
* creates file with fileName and writes the content
*
* @param content
* @param fileName
*/
private static void writeTextToFile(List<String> content, String fileName) {
PrintWriter pw = null;
String outputFolder = ".";
File output = null;
try {
File dir = new File(outputFolder + '/' + "HTML Sources");
if (!dir.exists()) {
boolean success = dir.mkdirs();
if (success == false) {
try {
throw new Exception(dir + " could not be created");
} catch (Exception e) {
e.printStackTrace();
}
}
}
output = new File(dir + "/" + fileName);
if (!output.exists()) {
try {
output.createNewFile();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
pw = new PrintWriter(new FileWriter(output, true));
for (String line : content) {
pw.print(line);
pw.print("\n");
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
pw.close();
}
}
有人可以为此解释为什么会发生这种情况吗? WebDriver如何呈现页面?浏览器如何显示源代码?
答案 0 :(得分:5)
有几个地方可以从中获取来源。您可以尝试
String pageSource=driver.findElement(By.tagName("body")).getText();
看看会发生什么。
通常您不需要等待页面加载.Selenium会自动执行此操作,除非您有单独的Javascript / Ajax部分。
您可能希望添加您所看到的差异,以便我们了解您的真正含义。
Webdriver不会自行呈现页面,只是在浏览器看到它时呈现它。
答案 1 :(得分:3)
我遇到了同样的问题。我使用这些代码来解决它:
......
String javascript = "return arguments[0].innerHTML";
String pageSource=(String)(JavascriptExecutor)driver)
.executeScript(javascript, driver.findElement(By.tagName("html")));
pageSource = "<html>"+pageSource +"</html>";
System.out.println(pageSource);
//FileUtils.write(new File("e:\\test.html"), pageSource,);
......
通过使用JavaScript代码获取innerHTML属性,它最终起作用,问号消失了。
答案 2 :(得分:3)
从Selenium获得的“源代码”似乎根本不是源代码。它似乎是当前DOM的HTML。您在浏览器中看到的源代码是服务器给出的HTML,然后由JavaScript对其进行任何动态更改。如果DOM完全改变,浏览器源代码不会反映这些更改,但Selenium会。如果要在浏览器中查看当前DOM,则需要使用开发人员工具,而不是源代码。