硒 - 政策/cookies的问题

Posted

技术标签:

【中文标题】硒 - 政策/cookies的问题【英文标题】:selenium - issue with policy/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)

【问题讨论】:

【参考方案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 工具找到它。

【讨论】:

以上是关于硒 - 政策/cookies的问题的主要内容,如果未能解决你的问题,请参考以下文章

不确定什么是gs gu gw cookies

NewRelic 和用户隐私政策

C# cookies 丢失

关于利用JS cookies 限制反复投票的问题,高分求助 140

深入理解cookies

Request.Cookies和Response.Cookies