python - 无法使用弹出/框架从网页中抓取数据
问题描述
我在使用 Robot Framework + Selenium 的面向客户的网页上查找要从中抓取数据的元素时遇到问题。我认为,我的麻烦与弹出/框架中存在的所需数据有关。我查找的数据位于客户的发票上,当我按下按钮时会弹出该发票(“查看当前发票”)。我已经成功登录该站点并四处导航,并且有一次我成功地按下“查看当前发票”按钮以弹出发票-但忘记提交该代码并丢失了它。:-(
无论如何,即使我在脚本期望按下按钮时手动输入弹出的发票,我似乎也无法抓取后续数据。我尝试使用定位器识别发票上的元素(来自 Firefox 和 Chrome 中内置的右键单击检查功能;Katalaon Recorder;Selenium IDE 等)。我得到了一个看起来像有效定位器的东西(几乎总是 Xpath);但是当我运行我的机器人脚本时,它无法找到有问题的元素。我花了很多时间研究页面的源代码,但由于我对 HTML/JS/CSS 的了解不如我应有的那样,所以我没有成功。
这是发票按钮的屏幕截图:
这是我按下按钮时看到的内容。我想抓取所有的发票数据,如到期金额、发票编号、到期日期等。
有谁知道我在这里缺少什么?如果你站在我的立场上,你会如何获取发票上的数据?我知道我的问题可能听起来很模糊和幼稚,但可以这么说,我已经走到了尽头。我愿意分享页面源代码,更多截图,任何需要的。
编辑我使用 Rahul Rai 的方法在弹出窗口时检查它;然后搜索“iframe”。有 10 场比赛;#7,当点击时,导致发票弹出以蓝色突出显示:
我认为这意味着这是引用弹出窗口的 iframe?如果是这样,我应该能够在检查代码中找到有关 iframe 的“句柄”的信息,但我没有看到任何与我习惯的定位器匹配的内容(例如名称、id、xpath)。我什至尝试过“选择帧 1599252503952”,但这只是导致“找不到带有定位器 '1599252503952' 的元素”错误。
解决方案
在检查了 HTML 源代码后,我终于能够从 Invoice 弹出窗口中抓取数据,并看到以下内容:
<iframe frameborder="0" src="/cmc/invoice_detail_container.pyt?direction=//my.hughesnet.com/cmc/invoice_detail.pyt%3Finvnumber%1234-567890&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 推动我更接近解决方案;并感谢其他也回答的人。
推荐阅读
- ajax - Flask:单击按钮时,将变量从 Javascript 传递到 Flask
- html - 如何有条件地为 OPENING 和 CLOSING 标签呈现 DIV 和 REACT 组件?
- java - 如何打印更大的 unicode 字符
- javascript - 无法在 Android 上 react-native-paper 的 AppBar 中显示居中的 svg 作为反应组件
- javascript - 任何人都有简单的方法来使用 css 和 html 创建它?
- mysql - 错误 HTTP/1.1 400 Bad Request 使用 nodemcu 在 mysql 中输入数据
- javascript - react-testing-library:调试输出的某些部分不可见
- java - 使用 Log4j2 对 JsonLayout 的奇怪行为
- pointers - 如果 resp 是一个指向响应对象的指针,为什么我们不必使用 resp* 来访问它的值呢?
- python - 如何在灵活类型的 seaborn boxplot 中解决这个问题?