2012-08-01 3 views
3

필자는 필자가 지금까지 약 3 ~ 4 개의 스크립트를 작성한 적이 있다고 말하고 싶습니다. Perl은 이해하기 쉽고 사용하기 쉽습니다.Perl WWW :: Mechanize를 사용하여 값이없는 라디오 버튼을 설정하십시오.

어쨌든 현재 스크립트에 문제가 있습니다. 나는 잠시 동안이 문제에 갇혀 있었고 그 문제를 해결할 수없는 것 같습니다.

특정 웹 사이트를 탐색 한 후 두 개의 라디오 버튼 사이를 클릭하고 다운로드 버튼을 클릭 한 페이지로 이동했습니다.

스크립트를 가져 와서 버튼을 선택하고 다운로드해야하지만, 페이지의 소스가 WWW::Mechanize을 사용할 때 라디오 버튼을 설정할 값을 제공하지 않습니다.

여기 웹 페이지 소스가 조금 있습니다.

<input type='radio' onclick="url('URL GOES HERE')"> 

두 개의 버튼은 거의 같습니다. 내가했을 때 하나를 선택 것으로 나타났습니다과

<input type='radio' checked onclick="url('URL GOES HERE')"> 

에, 소스에서 코드 변경을 보았다 그러나 내가 값에 넣어 무엇을 아무 생각이 없기 때문에 나는 WWW::Mechanize 설정 한 자동으로 가질 수 없습니다. 나는 on, checked, onclick, true, checked onclick, select, selected을 시도했지만 아무 소용이 없습니다. 여기

여기뿐만 아니라 감사하겠습니다이

$mech->set_visible([radio => 'checked onclick']); 

어떤 도움에 관련된 코드의 라인이 처음이다.

저는 지금 많은 제한이있는 직장에서 컴퓨터를 사용 중입니다. 그래서 컴퓨터에서 Firefox 나 Selenium Server를 사용할 수 없습니다.

편집 나는 또한 가지고 될 수있는 문제가이 물건은 자바 스크립트에있을 수 있다고 믿습니다. 필자는 HTML에 대한 많은 지식이 없지만 어딘가에서 JavaScript를 찾을 때까지 소스 코드가 보 였습니까? 어쨌든, 나는 WWW::Mechanize이 실제로 JavaScript를 지원하지 않으므로 아마도 이것이 문제라는 것을 기억했습니다.

답장을 보내 주셔서 감사합니다. 정말 고맙습니다. 하지만 주위를 파고 세 심하게 조사한 후, 내 상사와 나는 모든 다운로드 링크가 매우 유사하다는 것을 깨달았고, 정말로해야 할 일은 스크립트를 사용자 정의하여 다운로드 링크를 만드는 대신 다운로드 링크를 만드는 것입니다. 여러 웹 페이지를 가로 챌 수있는 번거 로움. 내가 이것을 더 일찍 보았 으면 좋겠다.

+0

저는 Perl의 WWW :: Mechanize에 대한 열렬한 팬입니다.하지만이 경우에는 파이썬을 사용하여 기계화하는 것이 더 중요하다고 생각합니다. 관련 [질문 및 답변] (http://stackoverflow.com/questions/3798138/how-to-select-a-radio-button)을 확인하십시오. – David

+0

라디오 버튼에'name' 속성이 없습니까? – Borodin

+0

@Borodin 일반적으로 라디오 버튼은 상호 배타적이므로 동일한 이름을 사용합니다. 즉, 하나를 선택하면 같은 이름을 가진 다른 모든 것들은 선택 취소됩니다. 따라서 개별 라디오 버튼의 설정을 확인하려면 모두 동일한 이름을 공유하기 때문에 일종의 색인을 사용하여 참조해야합니다. 파이썬 기계화는 이것을 지원하지만 펄의 WWW :: Mechanize는 지원하지 않습니다. – David

답변

0

브라우저 GUI에서 라디오 버튼을 선택한 후에 어떤 일이 일어나는지 알아야합니다. 당신은 URL() 자바 스크립트 서브 루틴

  • 를 확인하실 수 있습니다 또는 대상 양식을 제출 한 후 브라우저 요청을 기록 할 수

    1. :이 두 가지 방법이 있습니다.

    Firefox의 HTTPFox 확장 프로그램을 사용하는 것이 좋습니다. 입력을 선택하고 HTTPFox에서 세션을 시작한 다음 양식을 제출하십시오. 다음으로 POST (또는 GET) 된 데이터를 확인하고 Mechanize 스크립트에 동일한 필드 을 복제하면됩니다. 같은 뭔가 :

    $mech->submit_form(
        form_name => "form_name", 
        fields => { 
         input1_name => "value1", 
         input2_name => "value2", 
    ..... 
        }, 
    ); 
    
  • 1

    HTML::Form는 익명의 라디오 버튼을 활성화하기위한 API를 제공하지 않습니다. 내장을 파서 구별되는 속성을 읽을 수 있습니다. 이것은 (대부분 검증되지 않은) 작업을해야합니다

    use WWW::Mechanize qw(); 
    my $w = WWW::Mechanize->new; 
    $w->get('file:///tmp/so11767998.html'); 
    for my $input (($w->forms)[0]->inputs) { 
        $input->check if q{url('URL GOES HERE')} eq $input->{onclick} 
    } 
    
    -1

    나도이 문제가 있고, 라디오 버튼을 클릭하여 자바 스크립트를 호출하여 해결.

    $mech->eval_in_page('document.getElementById("id_radiobutton").checked = true;'); 
    

    이것은 나를 위해 일했습니다.