Selenium 또는 React Native로 양식 자동화
약간의 실험 끝에 몇 가지 해결책을 찾았습니다.
셀렌
저는 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에는 다음과 같은 유용한 리소스가 있습니다.
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과 Excel 시트 Python 라이브러리인
openpyxl
를 결합하여 Excel 시트에서 데이터를 읽고 양식을 자동으로 채웠습니다.모바일 셀레늄?
상단은 훌륭하지만 모든 것이 모바일을 원했습니다. 저는 노트북을 어디에도 가지고 다니지 않습니다. 첫 번째 접근 방식은 셀레늄 코드를 모바일에서 실행하는 것이었습니다.
나는 이전에 Android Phone에서 Kali NetHunter를 설정했고 내 Python 스크립트를 그대로 실행할 수 있는지 생각하고 있었습니다. 일부 SUID 구성 오류로 인해 내 Kali NetHunter 설치에서 Chrome이 지원되지 않는 것으로 나타났습니다.
nethunter
에 사전 설치된 Firefox를 활용하기 위해 드라이버를 GeckoDriver로 전환했습니다. ARM 바이너리here를 찾아서 다운로드하고 스크립트를 here과 같은 새 WebDriver로 업데이트했습니다.
일반적으로 꽤 잘 작동했고 모든 것을 다시 코딩할 필요는 없었지만
양식 자동 채우기의 즐거움을 다른 사람들과 공유할 수 있도록 더 나은 솔루션을 원했습니다.
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 스크립트를 수동으로 코딩할 수 있습니다(가장 우아한 솔루션은 아님).
Reference
이 문제에 관하여(Selenium 또는 React Native로 양식 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/hackin7/automating-forms-with-selenium-or-react-native-5mf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<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) => {}}
/>
일반적으로 Selenium은 빠른 프로토타이핑에 적합하며 React Native/Expo를 사용하여 적절한 애플리케이션을 완성할 수 있습니다.
이 작업을 수행하는 다른 많은 방법이 있을 수 있습니다. 예를 들어 Android SDK의 WebView에는 here 과 같이 요소와 상호 작용하는 기능이 있을 수 있습니다. 또는 Javascript를 생성하여 개발자 콘솔에 붙여넣을 수 있는 Python 스크립트를 수동으로 코딩할 수 있습니다(가장 우아한 솔루션은 아님).
Reference
이 문제에 관하여(Selenium 또는 React Native로 양식 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hackin7/automating-forms-with-selenium-or-react-native-5mf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)