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

标签 python selenium iframe webdriverwait aliexpress

我正在尝试访问一个知名的在线购物服务,对结果进行过滤和排序,但是当您第一次打开该网站时,该服务会出现一个提供优惠券的“弹出窗口”。我正试图忽略这个消息。问题是弹出窗口,不是真正的弹出窗口,它是访问主页后不久动态创建的一系列 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
    
  • 浏览器快照:

aliexpress_deals


引用

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

关于python - 如何使用Python和Selenium访问网站https ://www. aliexpress.com/后点击并关闭横幅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63970368/

相关文章:

html - 如何在没有 JS 或 Ajax 或 JSQ 的静态 html &lt;iframe&gt; 中嵌入 WP?

javascript - 如何在网站上放置透明 Flash 并保持底层网站可用(焦点、点击、表单提交等)

python - 如何通过匹配字符串在Python中提取父html标签

python - sed在python中替换subexpress系统调用

selenium - PHPUnit Selenium 测试在 Docker 本地主机上失败,但使用公共(public) IP 通过

java - 如何运行maven项目?

python - 在 ipython/jupyter notebook 中注册内核 - kernel.json

python - flask 异常 "View function mapping is overwriting an existing endpoint function"

python - 如何处理冒号(:) in the name when using Selenium in Python

javascript - 将 jQuery 加载到 iframe 中并在加载时收到通知