问题描述
我是使用 selenium 模块的新手。我从一些简单的教程开始,这些教程在出现弹出窗口之前一切正常。
因为弹出窗口没有 x,我无法应用我在网上找到的其他建议。 How to close pop up window in Selenium
但是我已经尝试检查弹出窗口的代码,我可以看到也许我有几个选项,通过引用链接文本“接受 Cookies”关闭,或者通过按钮 id 关闭,即“onetrust-接受-btn-handler"
这是我目前的代码。
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()
事情就这样发生了。
我可能需要想办法在我登录到这个网络服务时运行 selenium,而不是让它每次都运行一个新的浏览器。有什么想法吗?