使用Splinter/Selenium与iframe交互[Python]

2024-06-16 13:47:12 发布

您现在位置:Python中文网/ 问答频道 /正文

注意:硒或API包装碎片中的硒溶液是可以的!在

我在和iframes的互动中遇到了问题Twitter.com使用Python的splinterapi。在

例如

with Browser('firefox', profile_preferences= proxySettings) as browser:
    #...login and do other stuff here
    browser.find_by_id('global-new-tweet-button').click()

这会打开一个弹出框来输入tweet。在

如何使用Splitter与这个新盒子交互: 1) 填写信息 2) 点击“推特”(提交) …当然是程序化的。在

我尝试检查元素,但它似乎没有嵌套在iframe中,但它的目标是iframe。所以我不确定如何在这个弹出窗口中找到/与元素交互。在

我尝试手动输入消息,然后以编程方式单击tweet按钮:

^{pr2}$

…但我得到了一个错误:

ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with
Stacktrace:
    at fxdriver.preconditions.visible (file:///var/folders/z1/8rqrglqn2dj8_yj1z2fv5j700000gn/T/tmppRsJvd/extensions/fxdriver@googlecode.com/components/command-processor.js:10092)
    at DelayedCommand.prototype.checkPreconditions_ (file:///var/folders/z1/8rqrglqn2dj8_yj1z2fv5j700000gn/T/tmppRsJvd/extensions/fxdriver@googlecode.com/components/command-processor.js:12644)
    at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/z1/8rqrglqn2dj8_yj1z2fv5j700000gn/T/tmppRsJvd/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
    at DelayedCommand.prototype.executeInternal_ (file:///var/folders/z1/8rqrglqn2dj8_yj1z2fv5j700000gn/T/tmppRsJvd/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
    at DelayedCommand.prototype.execute/< (file:///var/folders/z1/8rqrglqn2dj8_yj1z2fv5j700000gn/T/tmppRsJvd/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)

我很想用Splitter来实现我的目标,所以请不要提供替代品,我知道还有其他方法。 提前谢谢你!在


Tags: comvarjscomponentsextensionsprocessorcommandat
1条回答
网友
1楼 · 发布于 2024-06-16 13:47:12

您的主要问题似乎是您将browser.find_by_xxx的结果视为元素对象,而实际上它是一个元素容器对象(即webdriver元素的列表)。在

如果我显式引用元素,则写入字段对我有效:

In [51]: elems = browser.find_by_id('tweet-box-global')
In [52]: len(elems)
Out[52]: 1
In [53]: elems[0].fill("Splinter Example")
In [54]:

这会给我写下“分裂的例子”。在

按钮单击失败,因为您的css路径返回三个元素的列表,并且您隐式地单击第一个隐藏元素。在我的测试中,您实际想要单击的元素是列表中的第二个元素:

^{pr2}$

当我显式地单击第二个元素时,它不会抛出错误,并且按钮被单击。在

如果添加到css路径,则可以将结果缩小到仅可见模式下的按钮:

In [42]: css_path = "div.modal-tweet-form-container button.btn.primary-btn"
In [43]: elems = browser.find_by_css(css_path)
In [44]: len(elems)
Out[44]: 1
In [45]: elems.click()
In [46]:

注意这里没有抛出异常。在

相关问题 更多 >