【问题标题】:How to get disqus comments iframe data using Selenum WebDriver如何使用 Selenium WebDriver 获取 disqus 评论 iframe 数据
【发布时间】:2016-08-17 01:46:26
【问题描述】:

我一直在尝试使用 Selenium WebDriver (Chrome) 来加载页面并获取 disqus 评论线程。请看代码。

public static void Main(string[] args)
        {
            var driver = new ChromeDriver();
            driver.Navigate().GoToUrl("http://nation.com.pk/blogs/05-Apr-2016/should-qandeel-baloch-s-strip-tease-really-be-a-rallying-cause-for-liberalism");
            var userNameField = driver.FindElementById("disqus_thread").GetAttribute("outerHTML");
            Console.WriteLine(userNameField);
            Console.Read();
        }

它给出以下输出。

<div id="disqus_thread"><iframe id="dsq-app2" name="dsq-app2" allowtransparency="true" frameborder="0" scrolling="no" tabindex="0" title="Disqus" width="100%" src="http://disqus.com/embed/comments/?base=default&amp;version=af1a2e2611136ef6c314afec2806cef3&amp;f=nawaiwaqt&amp;t_u=http%3A%2F%2Fnation.com.pk%2Fblogs%2F05-Apr-2016%2Fshould-qandeel-baloch-s-strip-tease-really-be-a-rallying-cause-for-liberalism&amp;t_d=Should%20Qandeel%20Baloch%E2%80%99s%20%E2%80%98striptease%E2%80%99%20really%20be%20a%20rallying%20cause%20for%20liberalism%3F&amp;t_t=Should%20Qandeel%20Baloch%E2%80%99s%20%E2%80%98striptease%E2%80%99%20really%20be%20a%20rallying%20cause%20for%20liberalism%3F&amp;s_o=default" style="width: 1px !important; min-width: 100% !important; border: none !important; overflow: hidden !important; height: 652px !important;" horizontalscrolling="no" verticalscrolling="no"></iframe></div>

这与我的预期相反,因为我希望在这个阶段获得 cmets html。如何修改此代码以获取评论线程? PS:原始页面源中没有iframe的指示。

【问题讨论】:

  • 您是否考虑过检查 iframe 的 url?
  • 能否详细说明。如何检查 iframe 的网址?我还(通过阅读其他帮助帖子)发现要与 iframe 交互,驱动程序元素必须切换到 iframe。我不确定的是,这如何改变这个输出中没有显示评论线程的事实。
  • 因为内容位于另一个域提供的 iframe 中
  • 好的。我有个主意。焦点转移到 iframe。然后我能够提取页面源(实际上是 iframe 源)。这是一种肮脏的方法,但我可以一个一个地保存这些文件,然后使用 HtmlAgilityPack 处理它们以获取其中的 cmets。我正在更新上面的代码。

标签: javascript c# selenium iframe disqus


【解决方案1】:

以下是我如何获取 iframe 源代码以进行进一步处理。希望对其他人有所帮助。

var driver = new ChromeDriver();
            int tmp = 1;
            foreach(string file in File.ReadLines(@"bla bla bla\Bloglinks.txt"))
            {
                driver.Navigate().GoToUrl(file);
                driver.SwitchTo().Frame("dsq-app2");
                var userNameField = driver.PageSource;
                File.WriteAllText(@"bla bla bla\Comments\"+tmp+".html", userNameField);
                Console.WriteLine(file);
                tmp++;
            }
            driver.Close();

【讨论】:

    猜你喜欢
    • 2013-12-12
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多