如何在使用 Python 和 Selenium 访问网站 https://www.aliexpress.com/ 后单击并关闭横幅

How to click and close the banner after accessing the website https://www.aliexpress.com/ using Python and Selenium

我正在尝试访问一个知名的在线购物服务,以过滤和排序结果,但是当您第一次打开该网站时,该服务有一个提供优惠券的“弹出窗口”。我正在尝试关闭该消息。问题是弹出窗口,不是真正的弹出窗口,它是一系列 div 和 img 标签,它们是在访问主页后不久动态创建的。

我已经尝试通过 class、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 所需的 帧可用并切换到它.

  • 诱导 所需的 元素可点击

  • 您可以使用以下任一项:

  • 使用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
    
  • 浏览器快照:


参考

您可以在以下位置找到一些相关讨论:

  • Switch to an iframe through Selenium and python