无法访问网站上的元素

时间:2017-03-04 05:04:20

标签: javascript html css

我一直致力于自动化任务,但遇到了障碍。该网站包含一个我想点击的元素,但我无法访问它。

所以这是按钮的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时,它返回一个空数组,而不是返回该元素。

以下是一些截图作为证据:

enter image description here

同样如您所见,我尝试在元素中添加document.getElementsByClassName("download-button")并尝试使用id,但即使这样也行不通!

注意:仅在页面完全加载后才在控制台中运行命令。

那么如何访问这些元素?

1 个答案:

答案 0 :(得分:2)

可以安全地假设此按钮位于iframe(即子页面)中的其他页面上。首先,您的情况必须符合Same Origin Policy要求:

父页面(托管iframe的页面)和子页面(iframe中的页面)都必须具有相同的内容:

  
      
  • 协议:http://https:// ||| https://      
  •   
  • 子域:wwwappmails3 ... ||| https://www.      
  •   
  • 域:amazonaws.comgoogle.com ||| https://www.google.com      
  •   
  • 端口:808044321,* ........................ || | https://www.google.com:80
  •   
只有在指定了

时才需要`* port

SO IF ...

  

...您有两个页面都有匹配的协议,子域和域,您可以访问iframe ...

IF NOT ...

  

...然后您至少需要访问子页面...

IF NOT ...

  

...你没有企业试图篡改你没有适当凭据的网站。

以下代码段演示了如何从父页面访问子页面的DOM。 SO具有阻止正常iframe功能的安全策略。要查看工作示例,请参阅此代码PLUNKER详细信息在代码段和Plunker中进行了注释。

<强>段

&#13;
&#13;
<!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;
&#13;
&#13;