有没有办法在 selenium webdriver 中获取 <embed> 标签资源

Posted

技术标签:

【中文标题】有没有办法在 selenium webdriver 中获取 <embed> 标签资源【英文标题】:Is there any way to get <embed> tag resources in selenium webdriver 【发布时间】:2017-06-10 05:11:46 【问题描述】:

我正在尝试将 pdf 嵌入到 html 文档中。 https://pdfobject.com/static.html 这是参考网站。

HTML 页面上使用&lt;embed&gt; 标签嵌入pdf 文档

我有以下事情-

    如果我打开 chrome 浏览器(我正在使用 Version 55.0.2883.87 m )并检查该 &lt;embed&gt; 标记上的元素,或者单击 F12 然后检查它,它会将标记内容显示为 -

    <embed src="chrome-extension://oemmndcbldboiebfnladdacbdfmadadm/content/web/viewer.html?file=https%3A%2F%2Fpdfobject.com%2Fpdf%2Fsample-3pp.pdf#page=2" type="text/html"  >
    

    但是如果我使用以下脚本来获取embed 标签html

    System.setProperty("webdriver.chrome.driver", "D:\\Application\\chromedriver.exe");
    driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.get("https://pdfobject.com/static.html");
    driver.manage().timeouts().implicitlyWait(45, TimeUnit.SECONDS);
    driver.switchTo().frame(1);     
    String tagdata = driver.findElement(By.id("plugin")).getAttribute("outerHTML");     
    System.out.println(tagdata);
    

    它检索结果为 -

    <embed   name="plugin" id="plugin" src="https://pdfobject.com/pdf/sample-3pp.pdf#page=2" type="application/pdf" internalinstanceid="9">
    

但在 chromechromedriver.exe 打开时,如果我执行 F12 并检查嵌入,它会显示与上述结果相同的结果,但如果我右键单击该 embed 标签,然后单击 inspect element,它会打开新的开发者工具控制台,我看到 &lt;embed&gt; 标记为 -

<embed id="plugin" type="application/x-google-chrome-pdf" src="https://pdfobject.com/pdf/sample-3pp.pdf#page=2" stream-url="blob:chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/e8337a7a-5af1-456c-8f7a-d8132c67fe6d" headers="Accept-Ranges: bytes
Cache-Control: max-age=2592000
Content-Length: 49672
Content-Type: application/pdf
Date: Wed, 25 Jan 2017 04:51:36 GMT
Expires: Fri, 24 Feb 2017 04:51:36 GMT
Last-Modified: Sat, 19 Mar 2016 06:18:44 GMT
MS-Author-Via: DAV
Server: Apache
X-Content-Type-Options: nosniff
" background-color="0xFF525659" top-toolbar- top-level-url="https://pdfobject.com/static.html">

相同的快照是 -

我有几个问题在这里 -

    使用安装的chromechromedriver.exe 打开chrome 的系统检查元素的变体?

    有没有办法得到chromedriver打开的结果?

    有没有办法获取embeddedhtml ?

【问题讨论】:

【参考方案1】:

您似乎安装了PDF Viewer Chrome extension,如果您手动运行 Chrome,它会执行 PDF 渲染。但是,如果 Chrome 是由 chromedriver 启动的,它会在没有任何浏览器扩展的情况下运行,这就是为什么在这种情况下您会获得 Chrome 的默认行为(即自行呈现 PDF)。

如果您确实需要验证 PDF 是否已使用该特定扩展程序加载和呈现,那么您也可以在 chromedriver 启动 Chrome 时使用以下方法加载扩展程序(代码取自 here):

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("/path/to/extension.crx"));
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);

请参阅此处了解如何获取扩展程序的 crx 文件:Location of CRX in chrome after installation?

【讨论】:

感谢您的回复。你是对的 `PDF Viewer Chrome extension` 已安装在我的系统中。禁用后显示与chromedriver 打开的 chrome 相同的behavior。我是否得到了&lt;embed&gt; 标签的默认渲染内容,正如我所期望的那样。进来新打开的开发者工具控制台?

以上是关于有没有办法在 selenium webdriver 中获取 <embed> 标签资源的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 在 Selenium WebDriver (Selenium 2) 中最大化浏览器窗口?

如何在 Selenium Webdriver 中模拟 HTML5 拖放?

是否存在无法检测到的 Selenium WebDriver 版本?

python selenium-webdriver 生成测试报告 (十四)

Selenium WebDriver 可以在后台静默打开浏览器窗口吗?

Selenium学习Selenium总是崩溃的解决办法