【问题标题】:selenium - issue with policy/cookies硒 - 政策/cookies的问题
【发布时间】:2021-01-30 08:49:39
【问题描述】:

问题:我无法点击“zgadzam sie”。 发生错误 "selenium.common.exceptions.NoSuchElementException: 消息:没有这样的元素:无法找到元素:{"method":"xpath","selector":"//span[@class= 'RveJvd snByac' 和 text()='Zgadzam się']"}"

问题:我该如何处理? image english image

from selenium import webdriver
import time

driver= webdriver.Chrome()
driver.implicitly_wait(3)
driver.get("https://www.google.com/")
driver.find_element_by_xpath("//span[@class='RveJvd snByac' and text()='Zgadzam się']").click()
driver.quit()

time.sleep(5)

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    您在尝试单击按钮后正在睡觉。您还在睡觉前退出驱动程序,这是另一个问题。

    考虑使用WebDriverWait().until() 函数来确保元素被加载,而不是依赖于任意时间量:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//span[@class='RveJvd snByac' and text()='Zgadzam się']"))
    )
    
    driver.find_element_by_xpath("//span[@class='RveJvd snByac' and text()='Zgadzam się']").click()
    
    

    您收到此错误的原因是因为element is nested in an <iframe>。这可以通过等待 iframe 出现,然后等待加载按钮,最后点击按钮来解决:

    # Wait for the iFrame to be available to switch to it
    WebDriverWait(driver, 10).until(
        EC.frame_to_be_available_and_switch_to_it(0)
    )
    
    # Wait for the button to be available within that iframe
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//span[@class='RveJvd snByac' and text()='Zgadzam się']"))
    )
    
    # Finally click the button
    driver.find_element_by_xpath("//span[@class='RveJvd snByac' and text()='Zgadzam się']").click()
    

    【讨论】:

    • 仍然出现错误:文件“c:\Users\dawid\Desktop\test12.py”,第 12 行,在 EC.presence_of_element_located((By.XPATH, "//span[@ class='RveJvd snByac' 和 text()='Zgadzam się']")) 文件“C:\Users\dawid\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\ support\wait.py",第 80 行,直到 raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message:
    • 您要么需要增加超时持续时间(因此增加等待时间),要么元素 XPATH 不正确。如果可以确认元素在 10 秒内出现,那么很可能是后者。
    • 我做到了^,我增加了超时时间,我尝试使用不同的定位器,但仍然出现同样的错误
    • 您能否使用错误的完整堆栈跟踪以及您尝试使用的其他选择器更新您的帖子。
    • 另外,我无法检查自己的 rn(不是在计算机上),但可能会生成随机名称的元素类名称,以防止人们抓取。这意味着每次加载页面时它们都会改变。如果是这样,那么您当前的 XPATH 选择器将永远无法工作,您将需要创建一个不依赖于类名的选择器。如果是这种情况,并且网页中没有其他地方出现文本“'Zgadzam się'”,则只需从选择器中删除“@class='...'”即可。
    【解决方案2】:

    尝试使用完整的 xpath。您可以使用通常作为浏览器扩展下载的 xpath 工具找到它。

    【讨论】:

      猜你喜欢
      • 2021-06-05
      • 2020-12-23
      • 1970-01-01
      • 2011-05-08
      • 2013-06-28
      • 2020-01-15
      • 2021-06-24
      • 1970-01-01
      相关资源
      最近更新 更多