问题描述
我正在尝试访问一个著名的在线购物服务,以对结果进行过滤和排序,但是,当您第一次打开该网站时,该服务会有一个“弹出”窗口,提供优惠券。我正在尝试消除该消息。问题是弹出窗口,不是真正的弹出窗口,而是一系列div和img标签,它们在访问首页后不久就动态创建。
我尝试过按类,Xpath,CSS进行搜索,但是没有运气。谁能告诉我我在做什么错
driver = webdriver.Chrome(options=opts,executable_path='chromedriver')
driver.delete_all_cookies()
driver.get('https://www.aliexpress.com/')
timeout = 30
try:
webdriverwait(driver,timeout).until(EC.presence_of_element_located((By.XPATH,'//*[@id="6216442440"]/div/div/img')))
except TimeoutException:
driver.quit()
解决方法
要关闭此消息的元素位于<iframe>
之内,因此您必须:
-
诱导WebDriverWait使所需的帧可用并切换到。
-
引出WebDriverWait以使所需的元素可点击。
-
您可以使用以下任一Locator Strategies:
-
使用
CSS_SELECTOR
:driver.get('https://www.aliexpress.com/') WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[src^='https://campaign.aliexpress.com/wow/gcp/']"))) WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"img.rax-image[src^='https://img.alicdn.com/tfs']"))).click()
-
使用
XPATH
:driver.get('https://www.aliexpress.com/') WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@src,'https://campaign.aliexpress.com/wow/gcp/')]"))) WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//img[@class='rax-image ' and starts-with(@src,'https://img.alicdn.com/tfs')]"))).click()
-
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
-
浏览器快照:
参考
您可以在以下位置找到一些相关的讨论