我一直在尝试用硒刮擦这个房地产网站的某些信息。但是,当我访问网站时,我需要接受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弹出窗口的图像。
这是与按钮“继续浏览”相对应的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中的默认等待策略只是页面已加载。页面加载和显示出现之间的绘制延迟导致脚本失败。
您有两个很好的同步选项。
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()
有关等待策略的更多信息在这里
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句