Você pode executar o Selênio em uma instalação sem cabeça em seu servidor, por exemplo, programando as ações em python usando pyvirtualdisplay .
pyvirtualdisplay
permite que você use a tela xvfb
, xepher
ou xvnc
para fazer captura de tela (ou dar uma olhada remota para ver o que está acontecendo).
Na instalação do Ubuntu 12.04:
sudo apt-get install python-pip tightvncserver xtightvncviewer
sudo pip install selenium pyvirtualdisplay
e execute o seguinte (isso é usando a mais nova API do Selenium2, a API mais antiga ainda está disponível):
import subprocess
from pyvirtualdisplay import Display
from selenium import webdriver
def browse_it(port=None):
browser = webdriver.Firefox()
page = browser.get('http://unix.stackexchange.com/questions')
for question in browser.find_elements_by_class_name('question-hyperlink'):
print question.text
if port:
print '--------\nconnect using:\n vncviewer ' + \
'localhost:{}\nand click the xmessage to quit'.format(port)
subprocess.call(['xmessage', 'click to quit'])
browser.quit()
def browse_it_hidden(rfbport=5904):
with Display(backend='xvnc', rfbport=str(rfbport)) as disp:
browse_it(rfbport)
if __name__ == '__main__':
browse_it_hidden()
O xmessage
impede que o navegador saia, em ambientes de teste você não deseja isso. Você também pode chamar browse_it()
diretamente para testar em primeiro plano.
Os resultados de find_element.....()
do Selenium não fornecem itens como selecionar o elemento pai de um elemento que você acabou de encontrar. Algo que você pode esperar de pacotes de análise HTML (eu li em algum lugar isso é de propósito).
Essas limitações podem ser um pouco trabalhosas se você fizer uma raspagem de páginas sobre as quais não tem controle. Ao testar seu próprio site, certifique-se de gerar todos os elementos que deseja testar com um id
ou exclusivo class
para que eles possam ser selecionados sem problemas.