脚本需要单击弹出窗口上的“确定”按钮。该按钮没有被任何IFrame包围,只有Textarea位于IFrame内。我用CSS选择器和XPath单击了一个按钮,但没有被单击,也没有出现错误。
driver.find_element_by_xpath("//*[@id='mceu_7']").click()
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[@src='https://qsm.qoo10.sg/gmkt.inc.gsm.web/common/scripts/module/tiny_mce_4.5.7/source/plugins/codemirror/source.html']"))
driver.find_element_by_xpath("/html/body/div/div[1]/textarea").send_keys("Some text")
driver.switch_to.default_content()
# Click on the "Ok" button.
time.sleep(10)
driver.find_elements_by_css_selector("#mceu_108 > button:nth-child(1)").click()
在使用switch_to.default_content()
之前,还单击了按钮。
这是弹出窗口的外观:
您能帮我个问题吗?
HTML代码:
<div id="mceu_107-body" class="mce-container-body mce-abs-layout" >
<div id="mceu_107-absend" class="mce-abs-end"></div>
<div id="mceu_108" class="mce-widget mce-btn mce-primary mce-abs-layout-item mce-first mce-btn-has-text" tabindex="-1" aria-labelledby="mceu_108" role="button">
<button role="presentation" type="button" tabindex="-1" >
<span class="mce-txt">Ok</span></button></div><div id="mceu_109" class="mce-widget mce-btn mce-abs-layout-item mce-last mce-btn-has-text" tabindex="-1" aria-labelledby="mceu_109" role="button">
<button role="presentation" type="button"><span class="mce-txt">Cancel</span></button></div></div>
答案 0 :(得分:2)
两件事:
您正在使用find_elements_by_css_selector
而不是find_element_by_css_selector
。
请注意, find_elements 将返回Web元素列表。
确定文本位于 span标签之间,因此可能无法使用//span[text()='Ok']
。父标签 span 的一个是 button ,因此,单击 button 比单击 span 更具意义。
代码,您可以尝试:
driver.find_element_by_xpath("//span[text()='Ok']/parent::button").click()
自从您提到过,它就没有出现在 iframe 中。此代码应为您工作。
希望会有所帮助。
答案 1 :(得分:0)
如果它是一个弹出窗口,则可能需要等待该按钮出现, 看看这个http://selenium-python.readthedocs.io/waits.html。 希望能有所帮助!