Python selenium 在模态中找不到元素
Python selenium can't find element in modal
我想在按下按钮时打开的模式中单击按钮,但出现错误
我的代码:
driver.find_element_by_xpath('//*[@id="buy-now-button"]').click()
sleep(5)
x = driver.find_elements_by_xpath("//*[@id='turbo-checkout-pyo-button']")
if len(x) > 0:
y = driver.find_element_by_xpath("//*[@id='turbo-checkout-pyo-button']")
y.click()
错误:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='turbo-checkout-pyo-button']"}
您的元素位于 iframe 中。如果您在 DOM 中继续向上滚动,您会看到:
为了用 selenium 处理 iframe:
- 你需要切换到它
- 然后您可以完成您的操作
- 然后您需要切换回父框架以继续脚本:
像这样:
driver.implicitly_wait(10) # this will wait up to 10 seconds for an object to be present
#your code:
driver.find_element_by_xpath('//*[@id="buy-now-button"]').click()
#iframe switch:
iframe = driver.find_element_by_xpath("//iframe[contains(@id,'turbo-checkout-iframe')]")
driver.switch_to.frame(iframe)
#your code:
x = driver.find_elements_by_xpath("//*[@id='turbo-checkout-pyo-button']")
if len(x) > 0:
y = driver.find_element_by_xpath("//*[@id='turbo-checkout-pyo-button']")
y.click()
#back to the main frame to continue the script
driver.switch_to_default_content()
您可能不需要 find_elements
和 if len
部分 - 您可以直接点击。然而,以上是为什么你找不到你的元素的答案。
我想在按下按钮时打开的模式中单击按钮,但出现错误
我的代码:
driver.find_element_by_xpath('//*[@id="buy-now-button"]').click()
sleep(5)
x = driver.find_elements_by_xpath("//*[@id='turbo-checkout-pyo-button']")
if len(x) > 0:
y = driver.find_element_by_xpath("//*[@id='turbo-checkout-pyo-button']")
y.click()
错误:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='turbo-checkout-pyo-button']"}
您的元素位于 iframe 中。如果您在 DOM 中继续向上滚动,您会看到:
为了用 selenium 处理 iframe:
- 你需要切换到它
- 然后您可以完成您的操作
- 然后您需要切换回父框架以继续脚本:
像这样:
driver.implicitly_wait(10) # this will wait up to 10 seconds for an object to be present
#your code:
driver.find_element_by_xpath('//*[@id="buy-now-button"]').click()
#iframe switch:
iframe = driver.find_element_by_xpath("//iframe[contains(@id,'turbo-checkout-iframe')]")
driver.switch_to.frame(iframe)
#your code:
x = driver.find_elements_by_xpath("//*[@id='turbo-checkout-pyo-button']")
if len(x) > 0:
y = driver.find_element_by_xpath("//*[@id='turbo-checkout-pyo-button']")
y.click()
#back to the main frame to continue the script
driver.switch_to_default_content()
您可能不需要 find_elements
和 if len
部分 - 您可以直接点击。然而,以上是为什么你找不到你的元素的答案。