【问题标题】:Selenium aspx results硒 aspx 结果
【发布时间】:2020-01-25 12:15:57
【问题描述】:

我是 selenium 的新手,如果问题没有很好地形成,请道歉。 我正在研究自动化一些数据收集。有一个 ASP.NET 站点,您可以在其中请求有关特定主题的数据。当数据查询完成时,网页将更新结果。当我使用 selenium 获取 page_source 时,我看不到数据。我相信它是在 __VIEWSTATE 中编码的。使用 IE DOM Explorer,数据以纯文本形式存在。

有没有办法从 DOM Explorer 中提取数据?基本上,我很乐意得到一个转储并自己解析它。

任何帮助将不胜感激。

【问题讨论】:

  • 查看页面源码时,“查看状态”不就是一个<input type="hidden">吗?如果这是您正在寻找的值,您不会像 Selenium 中的任何其他 <input> 值一样得到它吗?您尝试了哪些方法,哪些方法无效?
  • 如果数据不在初始页面源中,但在浏览器显示的结果中,则听起来像是动态添加的。它可能位于页面源中的其他位置并由代码重新格式化,可能位于 JavaScript 中,也可能位于单独的 AJAX 调用中,等等。您需要对尝试从中抓取数据的页面进行反向工程.在浏览器的调试工具中,它是否会进行额外的 HTTP 调用?这些调用中的任何一个都包含数据吗?它是否引用其他资源?其中是否包含数据?
  • 我在表单上提交了一个请求,以获取一些客户信息。我做driver.page_source。我所期待的是客户端数据在 page_source 中。这样我就可以解析 HTML 并提取客户端数据。但它不存在。所以然后我去IE并按f12。那里有多个选项卡,“DOM Explorer”、“DEBUG”等。当我查看 DOM Explorer 时,它包含所有客户端数据。但是,当我查看“调试”选项卡时,我看到了我在 page_source 中返回的数据,其中有多个 __VIEWSTATE 条目,但我看不到明文形式的实际客户端数据。
  • 这意味着数据不在初始页面源中,它来自其他地方。你必须找到在哪里。对网页进行逆向工程并不总是一件容易的事,它们可以具有高度动态的功能。我的猜测是数据可能是从页面发出的 AJAX 请求中获取的,或者在页面使用的另一个文件中引用。加载页面时,您需要检查浏览器调试工具中发出的额外网络请求。
  • 抱歉,刚接触网络技术。我确实看到了一堆 Java 脚本调用。我目前无法访问该系统,因此无法深入研究。但是当你说数据是动态添加的。你的意思是还有更多的服务器调用来获取数据。但是,客户端数据已经显示在屏幕上,那不就意味着它已经被获取了吗?你是说我需要重新获取数据吗? (对不起,如果这些是菜鸟问题)

标签: selenium internet-explorer dom viewstate


【解决方案1】:

我想我想通了。感谢所有的投入。我从中得到了答案:Scraping dynamic content through Selenium?

我最终做的是首先获取页面上的 iframe 列表

driver.find_elements_by_tag_name("iframe")

然后一次一个地切换到每个 iframe。就我而言,第一个 iframe 是具有相关信息的 iframe:

driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])

一旦我处于相关框架中,我就可以这样做:

html = driver.page_source

这会给我预期的结果。

看起来框架上下文很重要。一旦进入框架上下文,您就可以抓取数据。

【讨论】:

    猜你喜欢
    • 2014-07-10
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2014-02-04
    • 1970-01-01
    相关资源
    最近更新 更多