code: func (c *DOMSnapshot) GetSnapshotWithParams(v *DOMSnapshotGetSnapshotParams) ([]*DOMSnapshotDOMNode, []*DOMSnapshotLayoutTreeNode, []*DOMSnapshotComputedStyle, error) {
  	resp, err := gcdmessage.SendCustomReturn(c.target, c.target.GetSendCh(), &gcdmessage.ParamRequest{Id: c.target.GetId(), Method: "DOMSnapshot.getSnapshot", Params: v})
  	if err != nil {
  		return nil, nil, nil, err
  	}
  
  	var chromeData struct {
  		Result struct {
  			DomNodes        []*DOMSnapshotDOMNode
  			LayoutTreeNodes []*DOMSnapshotLayoutTreeNode
  			ComputedStyles  []*DOMSnapshotComputedStyle
  		}
  	}
  
  	if resp == nil {
  		return nil, nil, nil, &gcdmessage.ChromeEmptyResponseErr{}
  	}
  
  	// test if error first
  	cerr := &gcdmessage.ChromeErrorResponse{}
  	json.Unmarshal(resp.Data, cerr)
  	if cerr != nil && cerr.Error != nil {
  		return nil, nil, nil, &gcdmessage.ChromeRequestErr{Resp: cerr}
  	}
  
  	if err := json.Unmarshal(resp.Data, &chromeData); err != nil {
  		return nil, nil, nil, err
  	}
  
  	return chromeData.Result.DomNodes, chromeData.Result.LayoutTreeNodes, chromeData.Result.ComputedStyles, nil
  }
docs: // GetSnapshotWithParams - Returns a document snapshot, including the full DOM tree of the root node (including iframes, template contents, and imported documents) in a flattened array, as well as layout and white-listed computed style information for the nodes. Shadow DOM in the returned DOM tree is flattened.
  // Returns -  domNodes - The nodes in the DOM tree. The DOMNode at index 0 corresponds to the root document. layoutTreeNodes - The nodes in the layout tree. computedStyles - Whitelisted ComputedStyle properties for each node in the layout tree.