Eu tenho alguns sistemas "corporativos" que tenho que usar no trabalho. Alguns deles são terríveis, com frames, pop-ups e tal.
Eu estava pensando em automatizar algumas coisas usando curl ou algo assim. Preciso fazer login, clique em hiperlinks, defina alguns dados e eles farão alguma postagem.
É possível usar curl? Ou eu vou ser melhor usar algo como Selenium?
wget
ecurl
pode usar o arquivo de cookie Netscape; portanto, se o seu navegador também usar esse, poderá ser suficiente para especificá-lo ao downloader. Então, que tipo de navegador você está usando?Respostas:
Sim, é totalmente possível com o enrolamento. O mais importante será salvar e recarregar cookies entre os usos do curl
--cookie-jar
. Você também pode postar dados do formulário, conforme necessário. Normalmente, uso um complemento do Firefox chamado Live HTTP Headers para capturar o que acontece quando navego em um site. Ele registra todos os cabeçalhos, mas também as postagens de formulários que são muito úteis ao tentar descobrir o que fazer com o curl. Eu escrevi scripts bash automatizando várias invocações de curl e use pipes e arquivos temporários (cortesia demktemp
) para fazer algum processamento limitado na página da Web, mas se tiver que fazer muito processamento da página, normalmente alterno para Perl com LibWWW.fonte
Para casos simples de download do conteúdo de uma página, use curl ou wget . Ambos são ferramentas de linha de comando projetadas para baixar arquivos via HTTP e têm muitas opções. No seu caso, você provavelmente precisará tornar essas ferramentas mais parecidas com um navegador; A resposta de lutzky e a resposta de penguin359 mencionam algumas opções de curl e wget que são úteis nesse sentido.
Às vezes, quando você precisa fazer login , é muito mais fácil primeiro fazer login manualmente em um navegador da Web e depois exportar os cookies do navegador da Web (extensões como allcookies ou Export Cookies para Firefox podem ajudar).
Se você precisar analisar o conteúdo de algumas páginas ou publicar formulários , poderá precisar de ferramentas mais sofisticadas do que curl e wget. Algumas boas ferramentas são Perl com
LWP
(libwww) eHTML::TreeBuilder
(HTML-Tree) ou Python com bibliotecas padrão (especialmentehttplib
ehtmllib
).Para interações mais complexas com um site, a referência é WWW :: Mechanize do Perl . Esta biblioteca Perl define funções de alto nível para interagir com um site como um navegador, incluindo POSTing, formulários, cookies, mas não Javascript. Se o Perl não é sua xícara de chá, esta biblioteca possui imitações com recursos semelhantes em outros idiomas, como Python mechanize e Ruby Mechanize .
Finalmente, quando você precisa de Javascript , a abordagem usual é usar um navegador da Web que é conduzido por uma estrutura de automação de navegador. Selênio e Watir são escolhas populares; veja também Existem outras ferramentas boas além do SeleniumRC que podem buscar páginas da Web, incluindo conteúdo pós-pintado por JavaScript?
fonte
O meu favorito é
wget
, então vou dar um exemplo disso. O que você deseja fazer é replicar a sessão do navegador o mais próximo possível, portanto, use os argumentos relevantes da linha de comando. Os necessários dependem de quão exaustivamente o site verifica seu navegador.--referer
(sic) geralmente é suficiente, mas você também pode precisar--user-agent
e--load-cookies
.Essa técnica é basicamente falsificação de navegador - você está tentando se
wget
apresentar ao site como navegador. O maior problema que você enfrentará é o CAPTCHA, que não está presente no site de exemplo que você forneceu. Além disso, certifique-se de cumprir as políticas de tempo do site (45 segundos neste caso) ou provavelmente será bloqueado.Provavelmente, não é possível baixar o mesmo arquivo em diferentes sessões - o site concede privilégios de download no arquivo específico a uma sessão específica.
fonte