2013-04-01 2 views
1

우리는 공인 대리점 인 제품 카탈로그 추출을 자동화해야합니다. 이 회사는 Ingram Micro이며 규모는 크지 만 카탈로그 및 주식을 쿼리하는 간단한 방법 (예 : 웹 서비스)을 제공하지 않으므로 LWP :: UserAgent를 사용하여 지금까지 매일 추출했습니다. 우리의 온라인 상점 데이터베이스.WWW :: Mechanize 또는 LWP :: UserAgent를 사용하여 ASP-NET 양식을 POST 할 수 없습니다.

최근에 그들은 웹 사이트를 변경했으며, 발견 할 수없는 뭔가가있어 Perl 스크립트가 성공적으로 로그인하지 못하게합니다. 브라우저에서 직접 시도하면 성공적으로 로그인하지만 Perl에서 양식을 제출하려고하면 다시 로그인 페이지가 표시됩니다 (예 : 실패한 로그인).

사이트는 AspNet에서 작성되며 ASP에서 생성 된 숨겨진 양식 필드로 가득합니다. 처음에는 로그인 페이지를 얻고 모든 숨겨진 필드 값을 읽고 사용자 이름과 암호와 함께 POST 로그인 요청에 포함시키는 '스파이더'를 만들었지 만 이제는이 문제가 발생하여 WWW를 사용하기 시작했습니다. : 요청을 수행하고 올바르게 자동화 된 작업을 수행하도록 기계화합니다.

그러나 WWW :: Mechanize 또는 LWP :: UserAgent가 성공적으로 로그인 할 수있는 것은 아닙니다.

브라우저와 서버 사이의 정확한 HTTP 대화를 살펴보고 정확한 POST 내용으로 자동화 된 요청에 똑같은 정확한 헤더를 포함시키고 심지어 Perl에서 불완전한 로그인을 얻고 브라우저에서 성공적으로 로그인하십시오.

필자는 필사적으로 문제를 감지 할 수 없으며이 카탈로그 업데이트 없이는 저장소를 실행할 수 없습니다. 누군가가 그 페이지를 봐와 WWW 다른 브라우저 :: 요청을 기계화하는 무슨 감지 할 수있는 유사한 문제 또는 사람과 경험을 가지고있는 경우, https://www.imstores.com/ingrammicromx/

제발 :

현재 로그인 페이지를 볼 수 있습니다 저에게 알려주세요.

감사합니다.

  1. 지우기 브라우저에서 모든 쿠키를
  2. 해제 자바 스크립트
  3. 열기 로그인 페이지
  4. 시도는

만약 로그인 :

+0

Internet Explorer 또는 Chrome을 에뮬레이트하도록 사용자 에이전트를 변경하십시오. –

답변

5

보통 내가 잘못 무엇을 테스트하려면이 방법을 사용 당신은 WWW :: Mechanize로 할 수있는 것보다 성공한 로그인이 있습니다. 추가 트릭없이 그냥를 잊지 마세요. 이런: 당신이 기계화하여이 작업을 수행 할 수 있습니다 여전히 당신을 해제 자바 스크립트와 브라우저에서 로그인 할 수 있지만 브라우저의 HTTP 요청 볼 필요하더라도

$mech->submit_form(
    with_fields => { 
     login_field_field => $login, 
     password_field_name => $password, 
    }, 
    button => "submit_button_name", 
); 

(나는이 사용 HTTPFox)

및 확인 똑같은 요청 (헤더 포함)을 Mechanize에서 가져옵니다.

+1

감사합니다. 답변 해 주셔서 감사합니다. 야, 너 - 더 - 맨. 지금 일하고있어! 나는 그런 작은 변화가 그것을 만들었다라고 생각할 수 없다. submit_form 메서드를 사용했지만 필드에 제출 단추를 포함했습니다. 너와 같이 사용하면 효과가있다. 왜????? 글쎄, 나는 배려한다. 나는 이것의 배후에있는 이유를 알고 싶어한다. 그러나 그것이 무엇이든간에, 나는 그것이 효과가 있다는 것을 좋아한다. 마침내. 고맙습니다.나는 당신이 투표 이상의 것을 줄 수 있었으면 좋겠다. :-) –

+1

이 방법은 목표 사이트에 button.x 및 button.y 좌표를 전송합니다. 내 경험에 비추어 볼 때 응용 프로그램이이 정보를 보내지 않으면 ASP 사이트가 마음에 들지 않습니다. – gangabass

+1

'버튼'+1. ASPX가 없으면 작동하지 않습니다! – daisy