【发布时间】:2019-11-05 12:41:56
【问题描述】:
我有一个页面需要自动执行一些任务并抓取一些数据,但是页面在加载后会运行一些 JS 以将一些数据注入 DOM;我无法拦截(无论如何都不是很好的格式),我希望找到一个快速且不消耗内存的解决方案。
我尝试自己获取脚本并使用一些无头驱动程序(即 phantomJs)执行它们,但它没有更新页面源,我不确定如何从中检索更新的 DOM
var page = GetWebPage(url);
var scripts = page.Html.QuerySelectorAll("script");
var phantomDriver = new PhantomJSDriver(PhantomJSDriverService.CreateDefaultService(Directory.GetCurrentDirectory()));
phantomDriver.Navigate().GoToUrl(url);
foreach (var script in scripts)
phantomDriver.ExecuteScript(script.InnerText);
var at = phantomDriver.PageSource;
【问题讨论】:
-
可能你需要使用
await... -
不,抱歉,添加了明确的等待,直到文档准备好,但这并没有解决它
var wait = new WebDriverWait(phantomDriver, TimeSpan.FromSeconds(30.00)); wait.Until(driver1 => ((IJavaScriptExecutor)phantomDriver).ExecuteScript("return document.readyState").Equals("complete"));
标签: javascript selenium selenium-webdriver web-scraping automation