首页 > 解决方案 > SecurityError: Permission denied to access property "document" on cross-origin object error click on download link in iframe using Selenium Python

问题描述

我正在从事一个自动化项目,我正在尝试从网站下载 pdf。该网站仅包含pdf,但网页的文件类型为HTML。pdf 使用 PDF.js 显示,PDF.js 查看器也在 iframe 中。

当我尝试使用浏览器 javascript 单击该元素时,返回一个与跨站点脚本相关的安全错误。

SecurityError: Permission denied to access property "document" on cross-origin object

我想从我的脚本中下载 pdf,用 python 编写,使用 selenium。当我尝试这个时:

driver.find_element_by_id('download').click()

没有产生任何结果,即使我已将焦点切换到 selenium 中的 iframe,也不会单击下载按钮。

有人知道如何下载pdf的解决方案吗?

标签: pythonseleniumiframesame-origin-policycross-origin-read-blocking

解决方案


要单击元素,您必须诱导WebDriverWait并且element_to_be_clickable()您可以使用以下任一Locator Strategies

  • 使用ID

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "download"))).click()
    
  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#download"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='download']"))).click()
    
  • 注意:您必须添加以下导入:

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

参考

您可以在以下位置找到详细讨论:


推荐阅读