python - 在 Python 中使用 Selenium 处理 "Accept Cookies"弹出窗口

标签 python selenium selenium-webdriver selenium-chromedriver alert

我一直试图用 Selenium 来抓取这个房地产网站的一些信息。但是,当我访问该网站时,我需要接受 cookie 才能继续。这仅在机器人访问网站时发生,而不是在我手动执行时发生。当我尝试通过 xpath 或 id 查找相应的元素时,正如我在手动检查页面时找到的那样,我收到以下错误。
selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:{"method":"xpath","selector":"///*[@id="uc-btn-accept-banner"] "}

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC



PATH = "/usr/bin/chromedriver"
driver = webdriver.Chrome(PATH)

driver.get("https://www.immoweb.be/en/search/house/for-sale?countries=BE&page=1&orderBy=relevance")
driver.find_element_by_xpath('//*[@id="uc-btn-accept-banner"]').click()

有谁知道如何解决这个问题?为什么我找不到元素?
下面是接受 cookie 弹出窗口的图像。
enter image description here
这是与“继续浏览”按钮对应的 HTML。 XPATH 如上所述。
<button aria-label="Keep browsing" id="uc-btn-accept-banner" class="uc-btn-new  uc-btn-accept">Keep browsing
          <span id="uc-optin-timer-display"></span></button>

最佳答案

你非常接近!
如果您在新浏览器中打开您的页面,您会注意到页面已完全加载,然后,稍后会出现您的弹出窗口。
selenium 中的默认等待策略就是 the page is loaded .页面加载和显示之间的绘制延迟导致您的脚本失败。
您有两个很好的同步选项。
1/
包括对驱动程序的隐式等待。这对每个脚本执行一次并影响所有对象。这会在抛出任何错误之前等待 10 秒,或者在准备好后继续:

PATH = "/usr/bin/chromedriver"
driver = webdriver.Chrome(PATH)
driver.implicitly_wait(10)

driver.get("https://www.immoweb.be/en/search/house/for-sale?countries=BE&page=1&orderBy=relevance")
driver.find_element_by_xpath('//*[@id="uc-btn-accept-banner"]').click()

2/
仅对您的对象进行显式等待:
PATH = "/usr/bin/chromedriver"
driver = webdriver.Chrome(PATH)

driver.get("https://www.immoweb.be/en/search/house/for-sale?countries=BE&page=1&orderBy=relevance")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'//*[@id="uc-btn-accept-banner"]'))).click()

有关等待策略的更多信息是 here

关于python - 在 Python 中使用 Selenium 处理 "Accept Cookies"弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64032271/

相关文章:

python - 如何使用 [Any] 类型的参数调用 Any 类型的 Swift 函数

c# - Telerik 免费测试框架与 Selenium

python - 由于 Python 和 Selenium 中的元音变音而出现错误

python - QProcess 将参数传递给 python 脚本

python - 在 Tkinter 中打开新窗口会卡住程序(python 3.6)

python - Pygame:字体模块不可用

JAVA:无法在数组列表中添加多个对象。对象信息被覆盖

google-chrome-extension - Selenium WebDriverJS - 测试 Chrome 扩展安装

angularjs - 等待 Protractor 与页面同步时出错 : "Cannot read property ' get' of undefined"

html - 根据一个或多个列值查找或更改同一表行上的项目