python - 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的解决方案吗?
解决方案
要单击元素,您必须诱导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
参考
您可以在以下位置找到详细讨论:
推荐阅读
- python - 如何使用python从串行读取数据?
- reactjs - 如何使用 React Hooks 提取通常使用 yield 调用的功能?
- python - 在 Python 中读取列表
- proguard - 使用 Proguard 保留所有没有特定字符的方法
- java - 在 Java 中使用访问者模式进行双重调度
- algorithm - 如果一个循环执行固定次数,是否会影响时间复杂度
- installshield - 如何在 InstallScript 中散列字符串?
- cmd - 在cmd中制作循环进度条(或加载条)
- node.js - mongoose.connect() 将不再使用变量代替字符串
- react-hooks - “错误:对象作为 React 子项无效”来自 useState