전 세계적으로 고유한 식별자를 생성하는 https://www.guidgenerator.com/online-guid-generator.aspx라는 웹사이트가 있습니다. 저는 Perl의 Mechanize를 사용하여 가이드를 추출하기 위해 웹사이트에 게시하려고 합니다. 나는 이것이 자바스크립트 기반이라는 것을 알고 있지만 숫자를 가져오기 위해 올바른 게시물을 만들 수 있는지 궁금합니다. 브라우저에서 추적하여 요청의 모든 헤더를 얻었지만 반환된 HTML에는 GUID가 포함되어 있지 않습니다.
성공적인 실행 결과는 다음과 같습니다.
<textarea name="txtResults"row="2" cols="20" id="txtResults" style="font-family:Courier New,Courier,monospace;font-size:Larger;font-weight:bold; 높이: 152px; 너비: 421px; ">qk5DF22bhkm4C2AwZ5OcZw==</textarea>
이것은 내 스크립트입니다:
<textarea name="txtResults"row="2" cols="20" id="txtResults" style="font-family:Courier New,Courier,monospace;font-size:Larger;font-weight:bold; 높이: 152px; 너비: 421px; "></textarea>
페이지 내의 양식은 다음과 같습니다.
내 스크립트에는 다음과 같은 필수 양식과 입력 필드가 포함되어 있습니다.
으아아아결과
으아아아이 게시물입니다
으아아아웹사이트에서 추적하면 헤더가 나오는데 "페이로드"라는 탭이 또 있습니다. 여기에는 위에 나열된 대부분의 필드가 포함됩니다. POST에 필드를 입력하려고 했지만 이 작업을 다르게 수행해야 하는지 아니면 자바스크립트이기 때문에 중요하지 않은지 잘 모르겠습니다.
이거 정말 많은 정보인거 알아요. 나는 Perl의 기계화가 이 정보를 추출할 수 있는지조차 확신하지 못합니다. 어떤 도움이라도 대단히 감사하겠습니다. 여기에 게시했으면 하는 다른 데이터가 있으면 알려주시기 바랍니다.
Mech의 내장 기능을 사용하여 이 작업을 수행할 수 있습니다. 추가 필드나 헤더를 제출할 필요가 없습니다.
으아아아다음이 출력됩니다:
으아아아여기서 핵심은 기본 양식의 기본 제출 버튼을 클릭하여 값도 제출되는 것처럼 가장하는
$mech- >submit
因为这不会提交提交按钮的值。这有点烦人。因此,您必须使用$mech->click
을 사용할 수 없다는 것입니다. 이것이 양식에서 버튼이 작동하는 방식입니다. 이 경우 백엔드는 어떤 값이 클릭되었는지 확인하기 위해 값을 확인합니다.그런 다음
$mech->value
$mech->value
获取字段值。您可能想要split
를 사용하여 필드 값을 가져올 수 있습니다. 추가 처리를 위해분할
할 수도 있습니다.이 페이지의 JavaScript는 실제로 기능과 전혀 관련이 없습니다. 이 기능이 하는 일은 쿠키에서 선택한 설정을 저장하고 복원하여 다시 돌아올 때 동일한 확인란이 선택되도록 하는 것입니다. 괜찮지만 지금은 프런트엔드에서 로컬 저장소를 사용하는 것이 더 나을 수도 있습니다. 그러나 이 페이지를 스크랩하기 위해 JS를 전혀 다룰 필요는 없습니다. 주요 기능은 백엔드입니다.
필드와 값이 포함된 모든 양식을 인쇄하는 훌륭한 디버깅 도구인
$mech->dump_forms
에 관심이 있으실 수도 있습니다. Mech(또는 모든 LWP 기반 클래스)를 사용할 때 유용한 또 다른 디버깅 도구는 LWP::ConsoleLogger::Everywhere입니다. 이것은 누락된 버튼 양식 필드를 찾기 위해 프로그램의 요청과 브라우저의 요청을 비교하는 데 사용하는 것입니다.면책 조항: 저는 WWW::Mechanize의 관리자이며 LWP::ConsoleLogger::Everywhere를 작성했습니다.