【问题标题】:Why is wd.switch_to.default_content() not returning to original webpage?为什么 wd.switch_to.default_content() 不返回原始网页?
【发布时间】:2020-10-20 15:59:39
【问题描述】:

我正在为 bing 制作一个图像抓取工具,因为它具有完善的许可证搜索功能。 无论如何,我似乎无法获得多个图像,因为在切换到 iframe 以从第一张图像中获取 src 后,我无法返回主页。有什么建议吗?

    import selenium
    from selenium import webdriver
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    
    image_url = []
    
    wd = webdriver.Firefox()
    
    wait = WebDriverWait(wd, 10)

    ##search bing for images
    search_url = f"https://www.bing.com/images/search?q=cat%20clipart&qs=n&form=QBIR&qft=%20filterui%3Alicense-L1%20filterui%3Aimagesize-large&sp=-1&pq=good%20clipart&sc=8-12&cvid=493F746CDC7B4E70BF3BEDDA3CF674E1&first=1&scenario=ImageBasicHover"
        # load the page
    wd.get(search_url)
    
    thumbnail_result = wd.find_element_by_css_selector("img.mimg")
    
    thumbnail_result.click()
    
    wait.until(
            EC.frame_to_be_available_and_switch_to_it((By.ID, "OverlayIFrame"))
        )
    wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "img.nofocus"))
        )
    
    actual_image = wd.find_element_by_css_selector('img.nofocus')
    
    image_url.append(actual_image.get_attribute('src'))

    ##This is where it doesn't switch back to the original webpage    
    wd.switch_to.default_content()

这是您建议的更改代码:

import selenium
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

image_url = []

wd = webdriver.Firefox()

wait = WebDriverWait(wd, 10)

search_url = f"https://www.bing.com/images/search?q=cat%20clipart&qs=n&form=QBIR&qft=%20filterui%3Alicense-L1%20filterui%3Aimagesize-large&sp=-1&pq=good%20clipart&sc=8-12&cvid=493F746CDC7B4E70BF3BEDDA3CF674E1&first=1&scenario=ImageBasicHover"
    # load the page
wd.get(search_url)

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "img.mimg"))).click()

wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "OverlayIFrame"))
    )
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "img.nofocus")))

actual_image = wd.find_element_by_css_selector('img.nofocus')

image_url.append(actual_image.get_attribute('src'))

print(image_url)

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#close"))).click()

wd.switch_to.default_content()

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "img.mimg"))).click()

【问题讨论】:

  • wd.switch_to.default_content() 不返回主页。它用于从iframe出来。您需要单击close按钮关闭图像页面。单击该按钮你会看到主页。

标签: python selenium selenium-webdriver gecko


【解决方案1】:

wd.switch_to.default_content()不返回主页面。用于从iframe出来。您需要点击close按钮关闭图片页面。一旦你点击它,你会看到主页

image_url.append(actual_image.get_attribute('src'))

#Click on close button to go back to main page
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#close"))).click()

##Now jump out from iframe
wd.switch_to.default_content()

【讨论】:

  • @KuuduK 我收到此错误消息:selenium.common.exceptions.ElementClickInterceptedException:消息:元素 th.bing.com/th/id/…"> 在点 (99,323) 不可点击因为另一个元素
  • 使用wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "img.mimg"))).click()
  • 得到另一个错误:selenium.common.exceptions.StaleElementReferenceException:消息:th.bing.com/th/id/…"> 的元素引用已过时;要么元素不再附加到 DOM,它不在当前框架上下文中,要么文档已被刷新
猜你喜欢
  • 2021-02-24
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多