我一直致力于自动化任务,但遇到了障碍。该网站包含一个我想点击的元素,但我无法访问它。
所以这是按钮的HTML:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
self.currentImageView?.image = image
self.dismiss(animated: true)
}
它有各种类,但类<div style="transform: translateX(1120px) translateY(0px); position: fixed; left: 0px;" title="Download selected item" tabindex="1" aria-disabled="false" role="button" class="cw-button download-button p2-toolbar-button" id="bu"><span class="title"></span></div>
是唯一的。
现在,当我在控制台中执行download-button
时,它返回一个空数组,而不是返回该元素。
以下是一些截图作为证据:
同样如您所见,我尝试在元素中添加document.getElementsByClassName("download-button")
并尝试使用id
,但即使这样也行不通!
注意:仅在页面完全加载后才在控制台中运行命令。
那么如何访问这些元素?
答案 0 :(得分:2)
可以安全地假设此按钮位于iframe(即子页面)中的其他页面上。首先,您的情况必须符合Same Origin Policy要求:
父页面(托管iframe的页面)和子页面(iframe中的页面)都必须具有相同的内容:
只有在指定了时才需要`* port
- 协议:
http://
或https://
|||https://
- 子域:
www
,app
,s3
... |||https://www.
- 域:
amazonaws.com
,google.com
|||https://www.google.com
- 端口:
8080
,443
,21
,* ........................ || |https://www.google.com:80
SO IF ...
...您有两个页面都有匹配的协议,子域和域,您可以访问iframe ...
IF NOT ...
...然后您至少需要访问子页面...
IF NOT ...
...你没有企业试图篡改你没有适当凭据的网站。
以下代码段演示了如何从父页面访问子页面的DOM。 SO具有阻止正常iframe功能的安全策略。要查看工作示例,请参阅此代码PLUNKER详细信息在代码段和Plunker中进行了注释。
<强>段强>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>Parent Page</h1>
<button style='display:block;'>Target Button in iFrame</button>
<iframe src='child.html' width='350'></iframe>
<script>
/* Reference button
|| register click event on button
|| and call the function targetButton
*/
document.querySelector('button').addEventListener('click', targetButton, false);
function targetButton(e) {
// Reference the iframe
var iFrm = document.querySelector('iframe');
// Reference the document INSIDE the iframe
var iDoc = iFrm.contentWindow.document;
// Reference the button INSIDE the iframe's document
var iBtn = iDoc.querySelector('.dl-btn');
// Do whatever you want to iBtn
iBtn.style.color = '#000000';
iBtn.style.backgroundColor = '#FFCC22';
}
</script>
</body>
</html>
&#13;