내 데비안 서버의 웹사이트에서만 수행할 수 있는 작업을 자동화하고 싶습니다(사전 로그인 필요). 공개 API가 없어서 사용할 수 없습니다.
이를 수행할 수 있는 방법이 있습니까? 나는 텍스트 기반 브라우저나 이와 유사한 것을 고려했습니다.
답변1
WWW::Mechanize를 살펴보십시오(예는 다음 위치에 있습니다).http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize/Examples.pod). 이는 웹 페이지를 객체로 취급하고 메소드를 통해 모든 요소에 액세스할 수 있도록 합니다.
예를 들어
$m->get("https://lists.ccs.neu.edu/bin/admindb/$listname");
$m->set_visible( $password );
$m->click;
(적어도) Ruby 및 Python용 포트도 있습니다.
답변2
당신은 실행할 수 있습니다셀렌예를 들어 Python을 사용하여 작업을 프로그래밍하여 서버에 헤드리스 설치py 가상 디스플레이.
pyvirtualdisplay
xvfb
, xepher
또는 screen을 사용하여 xvnc
스크린샷을 찍을 수 있습니다(또는 진행 상황을 원격으로 볼 수 있습니다).
우분투 12.04에 설치:
sudo apt-get install python-pip tightvncserver xtightvncviewer
sudo pip install selenium pyvirtualdisplay
다음 명령을 실행합니다(이것은 최신 Selenium2 API를 사용하고 있으며 이전 API는 계속 사용할 수 있습니다).
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()
이렇게 하면 xmessage
테스트 환경에서 원하지 않는 브라우저 종료가 방지됩니다. browse_it()
프런트엔드 테스트를 직접 호출 할 수도 있습니다 .
Selenium의 결과는 find_element.....()
방금 찾은 요소의 상위 요소를 선택하는 등의 기능을 제공하지 않습니다. HTML 구문 분석 패키지에서 기대할 수 있는 것입니다(어딘가에서 이것이 의도적인 것이라고 읽었습니다). 통제할 수 없는 페이지를 크롤링하는 경우 이러한 제한은 다소 문제가 될 수 있습니다. 자신의 웹사이트를 테스트할 때 id
테스트하려는 모든 요소를 사용하거나 고유하게 생성하여 class
쉽게 선택할 수 있는지 확인하세요 .
답변3
다음 방법 중 하나를 사용할 수 있습니다.
- WWW::Mechanize를 사용하는 Perl 또는 HTTPClient를 사용하여 자신만의 Perl을 실행할 수도 있습니다.
- 셀레늄/네트워크 드라이버
- Google Chrome 또는 Firefox 확장 프로그램(기존 또는 직접 작성한 확장 프로그램)
- 컬 및 wget을 사용하는 쉘 스크립트(세션 데이터를 저장하고 다시 보내야 함)
- HTML 단위
- ...
기본적으로 웹 리소스를 쿼리할 수 있는 모든 언어는 다음과 같습니다.