【问题标题】:Python Selenium send_keys to email input fieldPython Selenium send_keys 到电子邮件输入字段
【发布时间】:2020-04-29 10:41:50
【问题描述】:

我正在尝试在 https://www.footish.se/sneakers/fila-wmns-disruptor-run-1010866-60m 上创建一个自动结帐脚本

我已进入结帐页面,但无法在“电子邮件”输入字段中输入我的电子邮件。

代码如下所示

email = driver.find_element_by_xpath("/html/body/div/span/div/div/div/div[1]/div/div/div[1]/div/form/div[2]/div[1]/div/label/div/div/input")
email.send_keys("test@email.com")

已经实现了某种功能来等待所需的元素,直到它们被加载。一个例子->

while not find:
try:
find = driver.find_element_by_xpath("/html/body/form/div[5]/div/div[4]/div[1]/div[1]/div[2]/div[1]/div[10]/div[1]/h2")
print("Loaded info")
except:
continue

我得到的错误是这个。 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div/span/div/div/div/div[1]/div/div/div[1]/div/form/div[2]/div[1]/div/label/div/div/input"}

我将如何解决这个问题?提前谢谢....

【问题讨论】:

  • 这只是意味着该元素不存在于页面上。使用implicit wait 等待它出现并加载到 DOM 中
  • 我使用了driver.implicitly_wait(5),但仍然无法找到xpath。
  • 看我的回答..

标签: python selenium


【解决方案1】:

似乎email 字段是一个动态生成的元素,因此当最初进行检查时,它还不存在。您可以尝试使用until 方法等待特定时间,看看它是否确实应用于DOM

示例代码

driver = webdriver.Chrome()
driver.get("url")
try:
    element = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.ID, "myDynamicElement")) # set your id here
    )
finally:
    driver.quit()

如果它不起作用,请更新。这很可能与框架或错误路径问题有关。

【讨论】:

  • 使用这个'driver.switch_to.frame('klarna-checkout-iframe')'解决了这个问题,显然在iFrame中你必须切换到它。只有这样我才能让它工作。