Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

通过窗口选取爬取元素 #18

Open
klren0312 opened this issue Jul 26, 2021 · 1 comment
Open

通过窗口选取爬取元素 #18

klren0312 opened this issue Jul 26, 2021 · 1 comment
Labels

Comments

@klren0312
Copy link
Owner

klren0312 commented Jul 26, 2021

窗口植入自定义的js
https://www.electronjs.org/docs/latest/api/web-contents#contentsexecutejavascriptcode-usergesture

childWindow.webContents.loadURL('http://localhost:8080')
childWindow.webContents.executeJavaScript(`
    const script = document.createElement('script')
    script.src = 'https://cdn.bootcdn.net/ajax/libs/eruda/2.4.1/eruda.min.js'
    document.head.appendChild(script)
    setTimeout(() => {
      const script2 = document.createElement('script')
      script2.innerText = 'eruda.init()'
      document.head.appendChild(script2)
    }, 3000)
  `, true)
    .then((result) => {
      console.log(result) // Will be the JSON object from the fetch call
    })
@klren0312
Copy link
Owner Author

最新调研结果, 修改了chobitsu库, 支持点选获取css选择器

window.ipcRenderer = require('electron').ipcRenderer
window.onload = () => {
  const chobitsu = require('z-chobitsu')
  console.log(chobitsu)
  chobitsu.setOnMessage(message => {
    message = JSON.parse(message)
    switch (message.method) {
      case 'Overlay.nodeHighlightRequested':
        break
      case 'Overlay.inspectNodeRequested':
        let nodeId = null
        if (message.params.nodeId) {
          nodeId = message.params.nodeId
        } else if (message.params.backendNodeId) {
          nodeId = message.params.backendNodeId
          message.params.nodeId = message.params.backendNodeId
        }
        const dom = chobitsu.domain('DOM').getNodeByNodeId(nodeId)
        const selector = chobitsu.domain('CSS').getCssSelectorForNode(message.params)
        console.log(dom)
        console.log(selector)
        break
    }
  })
  chobitsu.domain('Overlay').enable()
  chobitsu.domain('Overlay').setInspectMode({
    highlightConfig: {
      showInfo: false,
      contentColor: 'rgba(111, 168, 220, .66)',
      paddingColor: 'rgba(147, 196, 125, .55)',
      borderColor: 'rgba(255, 229, 153, .66)',
      marginColor: 'rgba(246, 178, 107, .66)',
    }
  })
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant