Wednesday 18 April 2018

Phantomjs c # process waitforexit


Eu estou tentando pegar instantâneos do meu próprio site usando phantomjs - basicamente, isso é para criar uma imagem de visualização do conteúdo enviado pelo usuário. Eu instalei phantomjs no servidor e confirmei que executá-lo a partir da linha de comando contra as páginas apropriadas funciona bem. No entanto, quando tento executá-lo no site, ele não parece fazer nada. Confirmei que o código está sendo chamado, que o fantasma está realmente em execução (eu monitorei os processos e posso vê-lo aparecer na lista de processos quando o chamo) - no entanto, nenhuma imagem está sendo gerada. Não tenho certeza onde eu deveria estar olhando para descobrir por que ele não vai criar as imagens - quaisquer sugestões O bloco de código relevante está abaixo: perguntou 27 dez 12: 03: 07 Eu quero ser capaz de ler uma imagem de um site, e Estou tentando usar phantomjs e ASP. NET. Eu tentei usar page. render que salvaria a captura de tela para um arquivo. Ele funciona como um aplicativo de console, mas não quando eu o chamo de um manipulador asp. net. Provavelmente é devido a permissões de arquivos, já que aplicativos simples (como o hello. js) funcionam bem. Tudo bem, minha preferência seria não escrever em um arquivo, mas lidar com os bytes e retornar uma imagem diretamente do manipulador. Estou um pouco perdido quanto a como fazer isso. Eu notei um método chamado page. renderBase64, mas não sei como usá-lo. Atualmente estou usando um IHttpHandler. Há uma questão semelhante aqui, mas essa pessoa eventualmente descartou phantomjs. Eu gosto da aparência dele e quero continuar a usá-lo, se possível. Executando Phantomjs usando C para capturar instantâneos da página da Web Tenho um pequeno projeto acontecendo agora que envolve pegar uma parte de uma página da Web, carregá-la no PhantomJS, passar um pedaço de dados para ela, tirar uma foto da página e exibir essa imagem em um relatório RDLC. Há como um bagillion diferentes maneiras de fazer isso, então o abaixo é uma prova de conceito de hackers. Em primeiro lugar, vamos precisar de uma página web muito simples com os seguintes elementos: Um elemento de formulário com dados de entrada ocultos que serão usados ​​para mover dados do aplicativo primário para a página de stub. Mais duas entradas de altura e largura, que são usadas simplesmente para mostrar o argumento da linha de comando passando para o Phantom. Um botão que pode ser usado para acionar uma função JavaScript que, por sua vez, atrairá a página. Espero que seja óbvio que o nosso método JavaScript init () em my. js, simplesmente irá inserir tudo no div do contêiner para exibição. O próximo elemento que precisamos, subindo na pilha, é o nosso corredor Javascript que passaremos para o Phantom, chutando todo esse processo. Anote a chamada do sistema de arquivos para stumpage. html. Isso pode ser passado, mas imaginei que mostrar uma chamada do sistema de arquivos pode ser útil para alguém. Começamos o nosso método C configurando o caminho para o Phantom (nota: você pode adicionar o Phantom ao seu caminho, passá-lo para que não haja consts mágicas, etc.). Em seguida, precisamos configurar os argumentos da linha de comando para o Phantom: O caminho relativo para o nosso arquivo de runner JavaScript acima. A altura da página. A largura da página. Continue configurando um ambiente de processo para o Phantom, redirecionando Standard In, Out amp Error, que permitirá a interação com o Phantom. As duas configurações finais do processo são para evitar uma janela na inicialização do processo e a desativação do Shell Execution (consulte Docs do MSDN para obter detalhes sobre o Shell Execution). Com o Phantom em execução, podemos fazer referência ao fluxo de entrada padrão redirecionado, serializar nossos dados ao nosso processo Phantom. O fechamento do fluxo de entrada acionará a avaliação da página no Phantom. AVISO deve-se notar que uma leitura de stdin a partir do Phantom 1.9.7 é uma chamada de bloqueio. No entanto, há uma solicitação de recurso para 2.0 que tornará este assíncrono por padrão. Se você estiver utilizando esta técnica, você vai querer bloquear defensivamente a leitura do stdin caso as coisas mudem no futuro. A etapa final é proteger os bytes do stdout, certificando-se de chamar o método WaitForExit do processo após você fazer uma referência ao stdout. A ordem garantirá que você leia todo o conteúdo da stdout. Por fim, converta a string em uma matriz de bytes e retorne. Como observei na introdução, você pode adicionar sua matriz de bytes a um conjunto de dados e mapear um elemento Image de um RDLC para o conjunto de dados, fornecendo conteúdo de imagem dinâmico para relatórios. Você poderia usar essa técnica em testes de integração para garantir que as posições dos elementos na página não sejam movidas. Ou até mesmo como uma técnica de arquivamento simples para raspar e salvar o estado de um site.

No comments:

Post a Comment