首页 > 解决方案 > 无法使用弹出/框架从网页中抓取数据

问题描述

我在使用 Robot Framework + Selenium 的面向客户的网页上查找要从中抓取数据的元素时遇到问题。我认为,我的麻烦与弹出/框架中存在的所需数据有关。我查找的数据位于客户的发票上,当我按下按钮时会弹出该发票(“查看当前发票”)。我已经成功登录该站点并四处导航,并且有一次我成功地按下“查看当前发票”按钮以弹出发票-但忘记提交该代码并丢失了它。:-(

无论如何,即使我在脚本期望按下按钮时手动输入弹出的发票,我似乎也无法抓取后续数据。我尝试使用定位器识别发票上的元素(来自 Firefox 和 Chrome 中内置的右键单击检查功能;Katalaon Recorder;Selenium IDE 等)。我得到了一个看起来像有效定位器的东西(几乎总是 Xpath);但是当我运行我的机器人脚本时,它无法找到有问题的元素。我花了很多时间研究页面的源代码,但由于我对 HTML/JS/CSS 的了解不如我应有的那样,所以我没有成功。

这是发票按钮的屏幕截图:

在此处输入图像描述

这是我按下按钮时看到的内容。我想抓取所有的发票数据,如到期金额、发票编号、到期日期等。

在此处输入图像描述

有谁知道我在这里缺少什么?如果你站在我的立场上,你会如何获取发票上的数据?我知道我的问题可能听起来很模糊和幼稚,但可以这么说,我已经走到了尽头。我愿意分享页面源代码,更多截图,任何需要的。

编辑我使用 Rahul Rai 的方法在弹出窗口时检查它;然后搜索“iframe”。有 10 场比赛;#7,当点击时,导致发票弹出以蓝色突出显示:

在此处输入图像描述

我认为这意味着这是引用弹出窗口的 iframe?如果是这样,我应该能够在检查代码中找到有关 iframe 的“句柄”的信息,但我没有看到任何与我习惯的定位器匹配的内容(例如名称、id、xpath)。我什至尝试过“选择帧 1599252503952”,但这只是导致“找不到带有定位器 '1599252503952' 的元素”错误。

标签: pythonseleniumweb-scrapingrobotframework

解决方案


在检查了 HTML 源代码后,我终于能够从 Invoice 弹出窗口中抓取数据,并看到以下内容:

<iframe frameborder="0" src="/cmc/invoice_detail_container.pyt?direction=//my.hughesnet.com/cmc/invoice_detail.pyt%3Finvnumber%1234-567890&amp;portletId=863" name="1599391562960" class="cboxIframe" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe> 

然后,我可以在 Robot Framework 中使用 Select Frame 关键字,使用“类”策略为弹出窗口指定 iframe 定位器。我还必须先明确选择主体框架。最后,允许我进入 iframe 并抓取的代码是:

Select Frame    body
Select Frame    class:cboxIframe

非常感谢 Rahul Rai 推动我更接近解决方案;并感谢其他也回答的人。


推荐阅读