(使用Python 3和Selenium。在按下" Shuffle"链接后尝试与Buffer.com的警报窗口进行交互。)
按下主浏览器框架上的按钮后,会弹出一个带有两个按钮的警告。我想按其中一个。
我正在尝试将焦点更改为包含警报的iframe,但我无法看到它有一个名称。这是所述警报iframe的代码:
<iframe src="https://js.stripe.com/v2/m/outer.html#referrer=https%3A%2F%2Fbuffer.com%2Fsignin&title=Buffer&url=https%3A%2F%2Fbuffer.com%2Fapp%2Fprofile%2F55e5cd556321154607cc5244%2Fbuffer%2Fqueue%2Flist&muid=c7aa769e-c41c-4e86-b75f-99771764f6a5&sid=26221bdc-c091-42c2-8965-8ea3e84267e2&preview=false&" frameborder="0" allowtransparency="true" scrolling="no" tabindex="-1" aria-hidden="true" style="width: 1px !important; height: 1px !important; position: fixed !important; visibility: hidden !important; pointer-events: none !important;"></iframe>
反过来,包含此iframe的元素有一个名称,但它是动态生成的。包含我想要的iframe的上层iframe的代码是:
<iframe name="stripeXDM_default441361_provider" id="stripeXDM_default441361_provider" aria-hidden="true" src="https://js.stripe.com/v2/channel.html?stripe_xdm_e=https%3A%2F%2Fbuffer.com&stripe_xdm_c=default441361&stripe_xdm_p=1#__stripe_transport__" frameborder="0" style="position: absolute; top: -2000px; left: 0px;"></iframe>
&#34; stripeXDM_default441361_provider&#34;是动态的,每次弹出警报时都会更改。
我尝试过switch_to.frame但是无法正确使用它。 我还尝试选择动态生成的iframe,其中&#34; Xpath包含&#34;但也没用。
有关如何选择没有名称的iframe的任何建议吗?
答案 0 :(得分:0)
要选择iframe,您可以使用xpath。例如,如果我们考虑这个html:
<!DOCTYPE html>
<html>
<body>
<span id="n2">
<span id="n6">
<a class="cn" name= "A1" >One</a>
</span>
<span id="n7">
<a class="cn" name= "A2" >Two</a>
</span>
<span id="n8">
<a class="cn" name= "A3" >Three</a>
</span>
</span>
</body>
</html>
你可以这样做:
driver.find_element_by_xpath(("//span[@id='n2']/span[@id='n6']/a[@name='A1' and text()='One']"))
标识名称为&#39; A1&#39;的元素和文字&#39; One&#39;。
但是:
driver.find_element_by_xpath(("//span/span[1]/a[@name='A1' and text()='One']"))
所以,在你的情况下,你可以找到&#34;外部&#34; iframe元素和&#34;内部&#34;一个(我假设没有其他iframe)。像这样:
//iframe/iframe
选择iframe后,您必须switch to it。
答案 1 :(得分:0)
事实证明我过于复杂。我不需要改变焦点或其他任何东西。 我只是假设它都是html,我试图直接用xpath选择元素,如下所示:
#do something
#press shuffle button
#once the button appears in the iframe, blurring everything else, use this line:
button = browser.find_element_by_xpath('//*[@id="modal-buttons"]/a[2]')
button.click()
这就是我所做的和完美的工作。