selenium 等待 Flash 页面加载(document.ready)

Posted

技术标签:

【中文标题】selenium 等待 Flash 页面加载(document.ready)【英文标题】:selenium wait for flash page load (document.ready) 【发布时间】:2017-11-10 02:02:13 【问题描述】:

我想在用flash写的网页上截屏

为此,我有这个代码:

ChromeOptions options = new ChromeOptions();
IWebDriver driver = new ChromeDriver(options);
...
// I'm clicking on button whicch opens new browser window
driver.FindElement(By.ClassName("click_me")).Click();

Thread.Sleep(1500);
//switch to new window
driver.SwitchTo().Window(driver.WindowHandles.Last());

//maximize it
driver.Manage().Window.Maximize();

//wait for load
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);

//and then take screenshot
Screenshot sc = ((ITakesScreenshot)driver).GetScreenshot();

sc.SaveAsFile(String.Format(@"0\1.2", Environment.GetFolderPath(Environment.SpecialFolder.Desktop), Guid.NewGuid(), ScreenshotImageFormat.Png), ScreenshotImageFormat.Png);

这里一切正常,但等待加载。它需要加载屏幕的屏幕截图。我能做什么?

【问题讨论】:

如果您不想使用任何其他框架,只需添加一些代码以等待网页上的特定文本再进行截图。例如:尝试搜索特定文本是否可见,然后继续截图。 @ChandraShekhar 但它是 Flash 而不是 html。那我该怎么做呢? 我们没有要搜索的单个 HTML 元素吗? 有body/div/object。这些标签加载速度很快,但对象标签 (swf) 内的内容不是 【参考方案1】:
//wait for load     
WaitForLoading(driver);

private void WaitForLoading(IWebDriver driver)

    var javascriptExecutor = (IJavaScriptExecutor)driver;
    _wait.Until(webDriver => javascriptExecutor.ExecuteScript("return document.readyState").ToString() == "complete");

【讨论】:

private WebDriverWait _wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); 感谢您的回答,但无论如何我正在加载屏幕。所以 html 已加载,但仍会出现 flash 加载对话框 ***.com/questions/2976105/… 你的问题已经解决了 你知道FlashSelenium类在哪个包中吗?还没找到 哦,这是dll在这里找到的:code.google.com/archive/p/flash-selenium/downloads

以上是关于selenium 等待 Flash 页面加载(document.ready)的主要内容,如果未能解决你的问题,请参考以下文章

关于selenium的智能等待页面加载的问题

Selenium_等待页面加载完毕

Python Selenium ChromeDriver不等待页面加载

selenium-三种等待方式总结

selenium 找不到元素 (显式等待 和隐式等待的区别)

如何让Mink Selenium 2 Driver等待页面加载Behat