【问题标题】:Selenium, pop up form (Python)Selenium,弹出式表单(Python)
【发布时间】:2016-11-14 20:58:28
【问题描述】:

我正在尝试在某些网页上填写表格。我与大多数人取得了成功 但是某些页面给我带来了麻烦。

某些页面的格式最初在页面本身上不可见,相反,您需要单击一个按钮,然后在页面内打开一个(似乎是 JavaScript)弹出窗口,然后需要填写。

我环顾四周并看到了一些示例,这些示例解决了如何填写在新弹出窗口中创建的表单以及在警报窗口中创建的表单。但是我似乎找不到任何可以解决这种特殊情况的例子。

这是我目前的代码。

     driver = webdriver.Chrome()
     driver.implicitly_wait(10)

     mouse = webdriver.ActionChains(driver)    
     driver.get(url)

     driver.maximize_window()

     value = 'fill form'
     span_xpath = '//span[contains(text(), "' + value + '")]'
     span_element = driver.find_element_by_xpath(span_xpath)
     mouse.move_to_element(span_element).click().perform()
     time.sleep(5)

到这里一切正常,点击填写表单按钮,在浏览器页面中打开表单。

但是当执行以下操作时总是会出现错误:“没有这样的元素:无法定位元素”

     n =driver.find_element_by_id('name')
     n.send_keys('john smith')

我尝试通过name、id、xpath等定位元素,但无论怎么尝试,都找不到任何表单元素。

我将非常感谢您对此事的任何帮助。

【问题讨论】:

  • 确保 pop 元素不在任何框架/iframe 内??
  • @SaurabhGaur,是的,它在 iframe 中。但是,它是 iframe 中的 iframe。我可以使用 src = driver.find_element_by_id("iframe_id").get_attribute("src") 访问第一个 iframe 的 src。但是该 iframe 中的第二个 iframe 没有 id,所以我不确定如何获取它的 src
  • 访问子iframe前需要切换第一个父iframe
  • @SaurabhGaur 我试着做: driver.switch_to_frame(driver.find_element_by_name("iframe_name")) 和 driver.find_element_by_xpath('/html/body/iframe') 但我仍然没有得到相同的元素发现错误
  • @SaurabhGaur 此链接描述了我遇到的问题:bugs.chromium.org/p/chromedriver/issues/detail?id=575 我可以通过执行 driver.switch_to_frame(0) 切换到第一个 iframe,但是一旦我通过执行 driver.switch_to_frame 切换到嵌套 iframe (0) 我又得到一个错误

标签: javascript python forms selenium selenium-webdriver


【解决方案1】:

第一个开关使用driver.switch_to_frame(0) (parent iFrame) 然后使用driver.switch_to_frame(1) (chiled iFrame)切换 然后find the element

注意:您可以像任何其他 Web 元素一样使用 id、名称、xpath 等来识别框架,而不是使用 index,并将该元素作为参数传递给 switch_to_frame。这提供了更多的一致性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 2019-05-04
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多