我想使用 python selenium chrome 单击 url anwb.nl 上的“ja ik ga akkoord”按钮。我已经复制了相对 xpath,但是当使用它时我不断收到 NoSuchElementException。还有 id、姓名等,运气不好
我从以下开始:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
driver = webdriver.Chrome(options=options)
driver.get('https://anwb.nl')
当我检查页面时,按钮的 xpath 给我:
//*[@id="accept default level"]
当我将其与 ...by_xpath 一起使用时,我得到 NoSuchElementException 按钮的代码是:
<button class="btn-decide_link-internal" type="button"
name="save"
id="accept default level"> ==$0
Ja, ik ga akkoord</button>
我尝试了 id(接受 def...)、名称(保存),但都没有这样的元素
总的来说,我真的很想了解如何解释一般的网络代码可以解决 future 的问题。
最佳答案
文本为 Ja, ik ga akkoord 的元素位于 <iframe>
内所以你必须:
- 引发WebDriverWait以使所需的框架可用并切换到它。
- 引发WebDriverWait以使所需的元素可点击。
您可以使用以下任一 Locator Strategies :
使用
CSS_SELECTOR
:driver.get("https://www.anwb.nl/"); WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[src*='anwb']"))) WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn-decide_link-internal"))).click()
使用
XPATH
:driver.get("https://www.anwb.nl/"); WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[contains(@src, 'anwb')]"))) WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[@id='accept default level']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
浏览器快照:
Here you can find a relevant discussion on Ways to deal with #document under iframe
关于python - 通过 python selenium chrome 单击按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57975640/