如何使用 selenium 和 Python 在弹出窗口中单击“接受 cookie”按钮,当弹出窗口没有 x

问题描述

我是使用 selenium 模块的新手。我从一些简单的教程开始,这些教程在出现弹出窗口之前一切正常。

因为弹出窗口没有 x,我无法应用我在网上找到的其他建议。 How to close pop up window in Selenium

但是我已经尝试检查弹出窗口的代码,我可以看到也许我有几个选项,通过引用链接文本“接受 Cookies”关闭,或者通过按钮 id 关闭,即“onetrust-接受-btn-handler"

enter image description here

这是我目前的代码

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.reed.co.uk/jobs/senior-insight-analyst/42347955")

driver.implicitly_wait(10)
link = driver.find_element_by_link_text("onetrust-accept-btn-handler")
link.click()

尝试

link = driver.find_element_by_link_text("onetrust-accept-btn-handler")

link = driver.find_element_by_link_text("接受cookies")

导致错误

NoSuchElementException:消息:没有这样的元素:无法定位元素:{"method":"link text","selector":"onetrust-accept-btn-handler"}

NoSuchElementException:消息:没有这样的元素:无法定位元素:{"method":"link text","selector":"Accept cookies"}

如果按钮 id 已知,我想知道是否有比链接文本更好的命令,或者我是否因为它是一个弹出窗口而错过了过程中的另一个步骤?任何帮助表示赞赏。谢谢。

解决方法

请使用显式等待,以便您的弹出窗口可以出现并且您的 selenium 脚本可以检测到该元素并单击它。

使用下面的代码 -

WebDriverWait(driver,15).until(EC.element_to_be_clickable((By.ID,'onetrust-accept-btn-handler'))).click()

如果它解决了您的问题,请将其标记为答案。

,

感谢 Swaroop Humane 和 Dev 的回答。上面的答案有效,在解决方案设法单击弹出窗口中的接受 cookie 按钮之前,我还需要再添加三行导入代码。 https://selenium-python.readthedocs.io/waits.html

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

下面的最终代码。

import selenium
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.reed.co.uk/jobs/senior-insight-analyst/42347955")

#driver.implicitly_wait(10)
#link = driver.find_element_by_link_text("onetrust-accept-btn-handler")
#link.click()


WebDriverWait(driver,'onetrust-accept-btn-handler'))).click()

事情就这样发生了。

enter image description here

我可能需要想办法在我登录到这个网络服务时运行 selenium,而不是让它每次都运行一个新的浏览器。有什么想法吗?