Estarei montando um aplicativo para automatizar um site / aplicativo externo. Em alguns casos, precisarei navegar no site como um usuário (alguns links que preciso seguir não podem ser previstos e devem ser analisados a partir de uma resposta)
Já estou usando o Html Agility Pack e conheço o Tidy, se necessário.
Existem outras tecnologias que eu deva conhecer?
Existem padrões recomendados para se ajustar rapidamente no caso de o aplicativo Web externo mudar? Estou imaginando encapsular a validação de respostas como algum tipo de estratégia ou padrão semelhante que possa ser facilmente separado / conectado conforme necessário, mas qualquer sugestão específica seria ótima.
c#
.net
html
web-scraping
jlnorsworthy
fonte
fonte
Respostas:
Se você deseja automatizar a navegação de um site externo como um usuário faria, o Watin é perfeito para isso. Ele conduzirá um navegador da web através de um modelo de objeto e possui uma ampla variedade de recursos de análise criados no DOM (além das habilidades não pertencentes ao DOM que você encontraria em um navegador, incluindo scripts).
Aqui está um link:
Watin.org
fonte
Se você está procurando a capacidade de fazer alterações rapidamente para rastrear as que estão no aplicativo Web externo, consulte os scripts. Se o C # for o seu idioma preferido, consulte a compilação do código rapidamente. Se você estiver usando um banco de dados, o código do script poderá ser armazenado lá; caso contrário, os arquivos de texto sem formatação também funcionarão.
Quanto aos padrões do GoF, Estratégia é a escolha do livro.
O outro "padrão" a considerar, especialmente porque você mencionou a validação de respostas usando-as para selecionar a próxima ação, é uma máquina de estado finito . Por exemplo, os estados de um cliente de email na web podem ser "não conectado", "na caixa de entrada", "lendo a mensagem", "editando a resposta" etc. Você executaria alguma ação dependendo do estado e, com base em a resposta, selecione o próximo estado.
fonte
O padrão realmente deve resultar do problema, mas aqui estão algumas opções:
Se você está preocupado principalmente com o custo / aborrecimento do desenvolvimento contínuo: Padrão de Estratégia (já mencionado) - use isso para implementar as interfaces no nível do componente e use uma metodologia de ligação dinâmica para resolver estratégias específicas (implementações). Um contêiner de COI (eu gosto do Autofac atualmente) funcionaria bem.
Se você precisar dar suporte ao acima, além de precisar escalar: Map Reduce (alguém sabe de um bom m + r fx para .net?).
fonte
Dependendo de quanto a página da web muda, isso pode ser difícil. Você pode manter uma lista de expressões regulares padrão em um banco de dados e, quando não funcionar mais, poderá percorrer o conjunto de base com outros até atingir um. Então você quer marcar isso para uso futuro.
fonte