python - 通过 python selenium chrome 单击按钮

标签 python selenium xpath css-selectors webdriverwait

我想使用 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
      
    • 浏览器快照:

anwb

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/

相关文章:

javascript - Python Selenium,抓取网页 javascript 表

java - 无法在 Testcontainers 中使用 Chrome 驱动程序使用 Selenium 打开任何 URL

c# - 编译一个 xpath 表达式 - 有一个无效的标记

Java,XPath - 如何根据特定元素获取整个节点

python - 当路径不是当前目录时,os.path.isdir() 无法识别目录

python - 在 mongoDB 聚合中的 $match 中使用 $cond

python - 如何在操作前检查 xpath 是否可用?

python - 通过 Python 中的 Selenium 选择按钮登录

java - 将 Java 变量添加到 xpath

python - Keras 自定义损失函数 : Accessing current input pattern