Selenium 또는 React Native로 양식 자동화

5472 단어
복무 기간 동안 작성해야 할 디지털 양식이 상당히 많다는 것을 알게 되었습니다. 그리고 이것은 일회성 양식이 아니라 매일 작성해야 하는 양식입니다. 나 자신이 문제 해결사(그리고 게으른 사람)이기 때문에 이러한 양식을 훨씬 쉽게 채울 수 있도록 만들고 싶었습니다. 내가 원한
  • 데이터를 훨씬 더 쉽게 저장
  • 양식
  • 에서 예상한 데이터로 처리합니다.
  • 양식 자동 채우기

  • 약간의 실험 끝에 몇 가지 해결책을 찾았습니다.

    셀렌



    저는 2022년 6월에 몇 가지 CTF 챌린지(HTB CTF, SEETF)를 수행했으며 그 중 일부는 selenium라는 이 Python 라이브러리를 웹 봇으로 사용하는 것을 포함합니다. 전에는 이 라이브러리를 사용하여 코드를 읽어야 했고 양식 제출을 자동화하는 데 사용할 수 있다고 생각했습니다.

    시작하고 실행하는 것은 실제로 매우 쉽습니다. 첫째로, 당신은 그것과 그것의 필요한 의존성을 설치해야 합니다. 해야 하지만pip install selenium 웹 브라우저 드라이버도 설치해야 합니다. 나는 ChromeDriver 을 사용했지만 Firefox용 GeckoDriver 도 있습니다.

    다음은 샘플 코드입니다. 요소 ID로 선택할 수 있는 텍스트 상자를 채우고 요소를 클릭합니다. 이러한 개념을 사용하면 자신의 양식을 자동으로 채우는 스크립트를 만들 수 있습니다.

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    
    def visit_report():
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_argument("--incognito")
        client = webdriver.Chrome(chrome_options=chrome_options,
            executable_path=r"/run/media/hacker/Windows/Users/zunmu/Documents/Stuff/Linux Tools/chromedriver")
            #executable_path=r"D:\\chromedriver.exe")
        client.set_page_load_timeout(10)
        client.set_script_timeout(10)
    
        client.get('https://www.w3schools.com/html/html_forms.asp')
        time.sleep(3)
        ### Fill up text fields
        client.find_element_by_id("fname").send_keys("Data")
        client.find_element_by_id("lname").click()
        ### Traversing the DOM
        button = (
            client.find_element_by_id("fname")
            .find_element(by=By.XPATH,value='..')
            .find_elements_by_xpath(".//*")[-1]
        )
        button.click()
        time.sleep(300)
        client.quit()
    
    visit_report()
    


    Selenium Python에는 다음과 같은 유용한 리소스가 있습니다.
  • https://selenium-python.readthedocs.io/locating-elements.html
  • https://stackoverflow.com/questions/24795198/get-all-child-elements

  • 이것의 이점 중 하나는 원하는 라이브러리를 사용할 수 있고 코딩하기 쉽다는 것입니다. 결국 Selenium과 Excel 시트 Python 라이브러리인 openpyxl를 결합하여 Excel 시트에서 데이터를 읽고 양식을 자동으로 채웠습니다.

    모바일 셀레늄?



    상단은 훌륭하지만 모든 것이 모바일을 원했습니다. 저는 노트북을 어디에도 가지고 다니지 않습니다. 첫 번째 접근 방식은 셀레늄 코드를 모바일에서 실행하는 것이었습니다.

    나는 이전에 Android Phone에서 Kali NetHunter를 설정했고 내 Python 스크립트를 그대로 실행할 수 있는지 생각하고 있었습니다. 일부 SUID 구성 오류로 인해 내 Kali NetHunter 설치에서 Chrome이 지원되지 않는 것으로 나타났습니다.
    nethunter에 사전 설치된 Firefox를 활용하기 위해 드라이버를 GeckoDriver로 전환했습니다. ARM 바이너리here를 찾아서 다운로드하고 스크립트를 here과 같은 새 WebDriver로 업데이트했습니다.

    일반적으로 꽤 잘 작동했고 모든 것을 다시 코딩할 필요는 없었지만
  • 매우 직관적인 인터페이스가 아닌 NetHunter를 거쳐야 합니다.
  • Android에서만 작동하고 iOS에서는 작동하지 않음

  • 양식 자동 채우기의 즐거움을 다른 사람들과 공유할 수 있도록 더 나은 솔루션을 원했습니다.

    React-Native / 엑스포



    변덕스럽게 React Native WebView를 검색하고 자동 완성 기능이 있는지 확인하기로 결정했습니다. 더 나은 것을 얻었습니다. injectedJavaScript prop을 사용하여 자체 사용자 지정 Javascript 코드를 삽입할 수 있습니다. here에서 참조.

    <WebView 
          style={styles.container}
          source={{uri: 'https://github.com/react-native-community/react-native-webview'}}  
          javaScriptEnabled={true}
          injectedJavaScript={`document.body.style.backgroundColor = 'red';
          setTimeout(function() { window.alert('hi') }, 2000);
          true;`}    
          onMessage={(event) => {}}
        />
    


    %[ http://snack.expo.dev/@hackin7/basic-webview-usage ]

    문서를 자동 완성하기 위해 실행하려는 코드는 아마도 setTimeout에 있어야 문서가 로드된 후 몇 초 동안 실행되어야 합니다(아마도 로드할 시간을 주기 위해).

    이것으로 저는 양식을 자동으로 채우는 개념 증명 앱을 만드는 작업에 주말을 보냈습니다. Javascript에서 document.getElementById("<id>").value = <value>;<element>.click();를 사용했습니다. 앱을 만드는 것은 일반적인 모바일 앱을 만드는 것만큼 어렵습니다(셀레늄보다 어렵지만 너무 복잡하거나 어려운 것은 없습니다).

    이것이 내가 필요한 양식을 자동으로 채우는 애플리케이션을 구축하는 여정입니다.

    전반적인



    일반적으로 Selenium은 빠른 프로토타이핑에 적합하며 React Native/Expo를 사용하여 적절한 애플리케이션을 완성할 수 있습니다.

    이 작업을 수행하는 다른 많은 방법이 있을 수 있습니다. 예를 들어 Android SDK의 WebView에는 here 과 같이 요소와 상호 작용하는 기능이 있을 수 있습니다. 또는 Javascript를 생성하여 개발자 콘솔에 붙여넣을 수 있는 Python 스크립트를 수동으로 코딩할 수 있습니다(가장 우아한 솔루션은 아님).

    좋은 웹페이지 즐겨찾기