array란?

자바스크립트의 배열은 가장 기본적인 데이터 구조 중 하나이며 이를 통해 간단하고 직관적인 방법으로 값 컬렉션을 저장하고 조작할 수 있습니다.
배열은 숫자, 문자열, 객체, 심지어 다른 배열과 같은 서로 다른 데이터 유형의 값을 포함할 수 있습니다.
또한 배열의 길이는 가변적이며 배열에서 값을 동적으로 추가하거나 제거할 수 있습니다.
array의 내장 함수에서 자주 사용하는 내장 함수에 대해 알아보겠습니다.

push()

push() 함수는 배열 끝에 하나 이상의 요소를 추가하는 데 사용되고 원래 배열을 수정하고 배열의 새 길이를 반환합니다.
push() 함수는 배열 끝에 추가할 요소인 하나 이상의 인수를 사용합니다.

const myArray = [1, 2, 3];
myArray.push(4, 5);
console.log(myArray); // Output: [1, 2, 3, 4, 5]

myArray 배열의 끝에 4와 5라는 두 가지 요소를 추가합니다.

pop()

pop() 함수는 배열에서 마지막 요소를 제거하고 반환하는 데 사용되고 원래 배열을 수정합니다.
배열이 비어 있으면 pop() 함수가 정의되지 않은 상태로 반환됩니다.

const myArray = [1, 2, 3];
const lastElement = myArray.pop();
console.log(lastElement); // Output: 3
console.log(myArray); // Output: [1, 2]

myArray 배열에서 마지막 요소 3을 제거합니다.

slice()

slice() 함수는 원래 배열에 있는 요소의 하위 집합을 포함하는 새 배열을 만드는 데 사용됩니다.
slice() 함수는 원래 배열을 수정하지 않습니다. slice() 함수는 추출할 요소의 부분 집합의 시작 및 끝 인덱스인 하나 또는 두 개의 인수를 사용합니다.
끝 인덱스를 지정하지 않은 경우 slice() 함수는 시작 인덱스에서 배열의 끝까지 모든 요소를 추출합니다.

const myArray = [1, 2, 3, 4, 5];
const newArray = myArray.slice(1, 4);
console.log(newArray); // Output: [2, 3, 4]

배열의 인덱스 1부터 배열의 인덱스 3까지의 myArray 요소(인덱스 4 제외)를 포함하는 newArray라는 새 배열 생성합니다.

splice()

splice() 함수는 배열에서 요소를 추가하거나 제거하는 데 사용됩니다.
원래 배열을 수정하고 제거된 요소가 포함된 배열을 반환합니다.
splice() 메서드는 다음과 같은 하나 이상의 인수를 사용합니다.

const myArray = [1, 2, 3, 4, 5];
myArray.splice(2, 1, 'a', 'b');
console.log(myArray); // Output: [1, 2, 'a', 'b', 4, 5]

배열의 인덱스 2에서 한 요소를 제거하고 배열의 인덱스 2에서 시작하는 myArray에 'a'와 'b'라는 두 요소를 추가합니다.

 

concat()

concat() 함수는 두 개 이상의 배열을 새 배열로 병합하는 데 사용됩니다.
원래 배열은 concat() 함수에 의해 수정되지 않습니다. concat() 함수는 원래 배열의 모든 요소를 지정된 순서대로 포함하는 새 배열을 반환합니다.

concat() 함수는 배열에서 호출할 수 있으며 하나 이상의 배열을 인수로 사용합니다.

const array1 = [1, 2, 3];
const array2 = [4, 5, 6];
const newArray = array1.concat(array2);
console.log(newArray); // Output: [1, 2, 3, 4, 5, 6]

array1과 array2라는 두 개의 배열을 만든 다음 concat() 함수를 사용하여 newArray라는 새 배열로 병합합니다.
newArray에는 array1과 array2의 모든 요소가 포함됩니다.

join()

join() 함수는 지정된 구분 기호로 구분된 배열의 모든 요소를 연결하여 새 문자열을 만드는 데 사용됩니다.
join() 함수는 원래 배열을 수정하지 않습니다. join() 함수에는 구분자 문자열인 하나의 인수가 사용됩니다.

const myArray = ['apple', 'banana', 'cherry'];
const newString = myArray.join(', ');
console.log(newString); // Output: 'apple, banana, cherry'

myArray 배열의 모든 요소를 쉼표와 공백으로 구분하여 연결하여 newString이라는 새 문자열을 만듭니다.

indexOf()

indexOf() 함수는 배열에서 지정된 요소의 첫 번째 발생 인덱스를 찾는 데 사용됩니다.
indexOf() 함수는 지정한 요소가 배열에 없는 경우 -1을 반환합니다. indexOf() 함수는 검색할 요소인 하나의 인수를 사용합니다.

const myArray = ['apple', 'banana', 'cherry'];
const index = myArray.indexOf('banana');
console.log(index); // Output: 1

myArray 배열에서 'banana' 문자열이 처음으로 나타나는 배열의 index 값은 1이 됩니다.

 

2020.08.13 - [javascript] - 자바스크립트 javascript array sort 정렬

 

자바스크립트 javascript array sort 정렬

javascript array를 정렬하는 방법에 대해 알아보겠습니다. array sort 메서드를 사용하면 쉽게 배열을 정렬할 수 있습니다. json array sort도 json key를 바탕으로 원하는 기준으로 정렬할 수 있습니다. array.

dreamjy.tistory.com

2020.02.19 - [javascript] - [javascript] 자바스크립트 배열 array 유용한 함수 map

 

[javascript] 자바스크립트 배열 array 유용한 함수 map

1. Array map 함수map() 메서드는 배열 안의 모든 값에 대하여 주어진 함수를 실행하고 실행한 결과 값을 새로운 배열로 반환합니다. 123456789let array1 = [1, 2, 3, 4, 5]; let array2 = array1.map(x => x*x); console.log(

dreamjy.tistory.com

파이썬 python list 정렬 sort

python list를 정렬 sort하는 방법에 대해 알아보겠습니다.

list sort / list 정렬

sort: 기본적으로 배열을 오름차순으로 정렬합니다.

Syntax: list.sort(reverse=True or False, key=function)
reverse: True일 경우 내림차순으로 정렬합니다. default값은 False 입니다.
key: 정렬 기준을 함수의 결과를 기준으로 변경합니다.


list = ['kiwi', 'melon', 'apple'] list.sort() print(list) # print: ['apple', 'kiwi', 'melon'] list = ['kiwi', 'melon', 'apple'] list.sort(reverse=True) print(list) # print: ['melon', 'kiwi', 'apple']

sort 함수를 이용하여 간단하게 배열을 오름차순으로 정렬 시킬 수 있습니다.
reverse=True 값을 이용하여 내림차순으로도 쉽게 정렬할 수 있습니다.



list sort with key function

key function을 지정하지 않으면 일반적인 순서에 따라 배열의 값을 오름차순 혹은 내림차순으로 정렬합니다.
key function을 이용하여 정렬 기준을 변경하여 배열을 정렬할 수 있습니다.


def lenFunc(e): return len(e) list = ['kiwi', 'banana', 'apple'] list.sort(key=lenFunc) print(list) # print: ['kiwi', 'apple', 'banana'] list = ['kiwi', 'banana', 'apple'] list.sort(key=lenFunc) print(list) # print: ['banana', 'apple', 'kiwi']

lenFunc 길이를 return하는 함수를 선언하여 정렬의 기준을 문자열의 길이로 변경하였습니다.
문자열의 길이를 기준으로 오름차순으로 정렬된 배열을 확인할 수 있습니다.
reverse=True를 적용하여 내림차순으로도 정렬할 수 있습니다.

key function을 잘 활용하면 다양한 기준을 적용하여 유용하게 사용할 수 있습니다.


[Python] - 파이썬 python list 찾기

[Python] - 파이썬 python list 추가 삭제

[Python] - 파이썬 python string, array, tuple length 길이

[Python] - 파이썬 python string to list 문자열을 리스트로

파이썬 python string to list 문자열을 리스트로 변경

파이썬에서 문자열을 리스트로 변경하는 방법에 대해 알아보겠습니다.
split 메서드를 이용하여 특정 구분자를 기준으로 나누는 방법과 for문를 이용하여 문자열을 배열로 변경할 수 있습니다.

string split method

문자열을 특정 구분자로 구분하여 문자열을 나누고 배열을 반환합니다.

Syntax: string.split(separator, maxsplit)


str = 'hello world ?!' list = str.split(' ') print(list) # print: ['hello', 'world', '?!'] print(len(list)) # print: 3

공백을 기준으로 문자열로 나누어진 배열을 반환합니다.


str = 'hello world ?!' list = str.split(' ', 1) print(list) # print: ['hello', 'world ?!'] print(len(list)) # print: 2

maxsplit 값을 입력하면 입력된 크기까지만 구분하여 배열을 반환합니다.


두 예제의 리턴 배열의 갯수가 다른걸 확인할 수 있습니다.


array of characters list method

array list의 생성자에 문자열을 넣으면 단일 문자로 구분된 배열을 반환합니다.

str = 'helloworld?!' list = list(str) print(list) # print: ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd', '?', '!'] print(len(list)) # print: 12

for문 사용

for문을 이용하여 문자열을 리스트로 변경해보겠습니다.

str = 'helloworld?!' list = list() for char in str: list.append(char) print(list) # print: ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd', '?', '!'] print(len(list)) # print: 12

string 또는 array에서 기본 제공하는 built-in method를 사용하는게 보기도 좋고 편리합니다.
built-in method를 먼저 찾아보는 게 도움이 됩니다.


[Python] - 파이썬 python list 찾기

[Python] - 파이썬 python list to string 리스트를 문자열로 변경

[Python] - 파이썬 python string, array, tuple length 길이

haproxy rate-limit 요청 제한

api의 과도한 요청은 시스템에 부담을 주고 시스템에 문제를 일으킬 수 있습니다.
이러한 과도한 요청을 막기 위해 api request에 대한 제한을 설정합니다.
haproxy의 rate-limit 기능을 이용하여 api request 요청을 제한하는 방법에 대해 알아보겠습니다.

rate-limit 이란

rate-limit은 웹 속성을 과도하게 사용하거나 남용하는 사용자, 봇 또는 애플리케이션을 차단합니다.
rate-limit은 특정 종류의 봇 공격을 막을 수 있습니다.
예를 들어 계정에 로그인을 시도하는 경우와 같이 특정 시간 내에 작업을 반복 할 수있는 빈도를 제한합니다.
rate-limit은 특정 종류의 악성 봇 활동을 중지하는 데 도움이 될 수 있고 웹 서버의 부담을 줄일 수 있습니다.

ip 기반 rate-limit 설정

ip를 기준으로 rate-limit 설정을 작성합니다.

rate-limit 설정은 frontend 및 backend에 적용이 가능합니다.


  • frontend에 설정
frontend http bind *:80 mode http option forwardfor timeout client 1m stick-table type ipv6 size 100k expire 30s store http_req_rate(10s) http-request track-sc0 src http-request deny deny_status 429 if { sc_http_req_rate(0) gt 10 } use_backend api
  • backend에 설정
backend api mode http timeout connect 10s timeout server 1m stick-table type ipv6 size 100k expire 30s store http_req_rate(10s) http-request track-sc0 src http-request deny deny_status 429 if { sc_http_req_rate(0) gt 10 } server api localhost:8090

stick-table: 클라이언트의 요청 카운터를 저장하는 key-value 저장소
type: 요청 카운터를 저장하는 key type (ip, ipv6, string, integer, binary)
size: stick-table 크기, expire가 없거나 지정된 갯수를 초과하면 오래된 키를 삭제
expire: stick-table key 유효 시간

위 예제에서는 frontend 또는 backend 한 군데에만 설정하면 적용이 됩니다.

rate-limit test

artillery를 이용하여 테스트를 진행하였습니다.

  • 테스트 시나리오를 작성합니다.
config: target: http://localhost:8080 phases: - duration: 1 arrivalRate: 20 scenarios: - name: 'rate limit test' flow: - get: url: "/"

1초 동안 20번의 request를 요청합니다.


  • 결과
All virtual users finished Summary report @ 17:16:46(+0900) 2021-06-02 Scenarios launched: 20 Scenarios completed: 20 Requests completed: 20 Mean response/sec: 13.89 Response time (msec): min: 3 max: 7 median: 4 p95: 6.5 p99: 7 Scenario counts: rate limit test: 20 (100%) Codes: 200: 10 429: 10

10번의 요청은 정상 처리 되었고 10번의 요청은 429 응답을 받았습니다.

이번 예제에서는 ip를 기준으로 rate-limit을 적용하였지만 url, url parameter, token, etc., ... 등등의 다양한 방법으로 rate-limit 적용이 가능합니다.

참고 사이트

파이썬 python list 추가 삭제

python list에 추가 삭제에 대해 알아보겠습니다.

list add / 리스트 추가

append: 리스트의 끝에 데이터를 추가합니다.
insert(i, x): index 위치에 데이터를 추가합니다.
extend: 리스트의 끝에 배열을 추가합니다.


list = ['apple', 'melon', 'kiwi'] list.append('grape') print(list) # print: ['apple', 'melon', 'kiwi', 'grape'] list = ['apple', 'melon', 'kiwi'] list.insert(0, 'grape') print(list) # print: ['grape', 'apple', 'melon', 'kiwi'] list = ['apple', 'melon'] list2 = ['grape', 'kiwi'] list.extend(list2) print(list) # print: ['apple', 'melon', 'grape', 'kiwi']

append는 배열의 맨 마지막에 요소를 추가합니다.
insert는 index를 지정하여 원하는 위치에 요소를 추가할 수 있습니다.


list remove / 리스트 삭제

remove(x): 리스트에서 값이 x와 같은 첫 번째 항목을 삭제합니다.

첫 번째 항목 하나만 삭제하는 부분에 유의해야합니다.

pop([i]): index를 지정하면 index 위치에 데이터를 삭제합니다.

index를 지정하지 않으면 리스트의 맨 마지막 데이터를 삭제합니다.


list = ['apple', 'apple', 'grape', 'kiwi'] list.remove('apple') print(list) # print: ['apple', 'grape', 'kiwi'] list = ['apple', 'melon', 'grape', 'kiwi'] list.pop() print(list) # print: ['apple', 'melon', 'grape'] list.pop(0) print(list) # print: ['melon', 'grape']


list clear / 리스트 전체 삭제

clear: 리스트의 모든 항목을 삭제합니다.

list.clear 함수는 Python 3.3 버전부터 추가되어 2.x 버전에서는 사용할 수 없습니다.
del list[:]를 이용하여 clear와 같이 사용할 수 있습니다.


# 2.x version list = ['apple', 'melon', 'grape', 'kiwi'] del list[:] print(list) # print: []
# 3.x version list = ['apple', 'melon', 'grape', 'kiwi'] list.clear() print(list) # print: []

[Python] - 파이썬 python list 찾기

[Python] - 파이썬 python list to string 리스트를 문자열로 변경

[Python] - 파이썬 python string, array, tuple length 길이

python과 selenium에서 element를 찾을 때 사용하는 selector에 대해 알아보겠습니다.
By Class를 이용하여 다양한 방법으로 원하는 element를 찾을 수 있습니다.
class, id, css selector, xpath, name 등을 지원합니다.

일반적으로 element ID가 사용가능하고, 고유하며, 예측가능하다면 검색할 때 element ID를 통해 하는 것이 매우 빠르고, 복잡하게 DOM을 이용하는 방법들을 속도에서 앞섭니다.
고유한 ID가 없다면, CSS selector이 그 다음으로 선호되는 방법입니다.
XPath 또한 CSS selector만큼 잘 작동되지만, 구문이 복잡하며 디버깅을 하기 힘들고 꽤 느린 경향이 있다고 합니다.


selenium element selector By python

selenium selector By.id python

element id를 이용하여 찾는 방법입니다.


from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By import time driver = webdriver.Chrome('./chromedriver') driver.get("https://www.tistory.com/auth/login/old?redirectUrl=https%3A%2F%2Fwww.tistory.com%2F") login_input = driver.find_element_by_id("loginId") login_input.send_keys("user", "email") login_pw = driver.find_element_by_id("loginPw") login_pw.send_keys("password") time.sleep(2) # 비공개 메소드 사용법 login_input.clear() login_input = driver.find_element(By.ID, 'loginId') login_input.send_keys("by", "email") login_pw.clear() login_pw = driver.find_element(By.ID, 'loginPw') login_pw.send_keys("by_password") time.sleep(3) driver.close()

By.ID를 이용하여 element를 찾고 각각 값을 입력하였습니다.

결과

비공개 함수에서 제공하는 By 속성 속성은 아래와 같습니다.
상황에 맞게 두 가지 중 선택하여 사용하시면 됩니다.


ID = "id" XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT = "partial link text" NAME = "name" TAG_NAME = "tag name" CLASS_NAME = "class name" CSS_SELECTOR = "css selector"


selenium selector By.className python

driver.get("https://www.tistory.com/auth/login/old?redirectUrl=https%3A%2F%2Fwww.tistory.com%2F") chk_login = driver.find_element_by_class_name("ico_check") chk_login.click() time.sleep(2) chk_login = driver.find_element(By.CLASS_NAME, 'ico_check') chk_login.click() time.sleep(3)

By.CLASS_NAME를 이용하여 element를 찾고 로그인 상태 유지 버튼을 클릭하고 해제하는 이벤트를 주었습니다.


selenium selector By.name python

driver.get("https://www.tistory.com/auth/login/old?redirectUrl=https%3A%2F%2Fwww.tistory.com%2F") login_input = driver.find_element_by_name("loginId") login_input.send_keys("userId") login_pw = driver.find_element(By.NAME, "password") login_pw.send_keys("password")

By.NAME를 이용하여 element를 찾고 각각 값을 입력하였습니다.


selenium selector By.xpath python

driver.get("https://www.tistory.com/auth/login/old?redirectUrl=https%3A%2F%2Fwww.tistory.com%2F") login_input = driver.find_element_by_xpath('//*[@id="loginId"]') login_input.send_keys("userId") login_pw = driver.find_element(By.XPATH, '//*[@id="loginPw"]') login_pw.send_keys("password")

By.XPATH를 이용하여 element를 찾고 각각 값을 입력하였습니다.

selenium에서 element를 찾을 때 사용하는 By 클래스에 대해 알아보았습니다.
By 클래스에서 제공하는 다양한 함수를 활용하면
element id, classname, name, css selector, xpath 등을 활용하여 원하는 element를 찾을 수 있습니다.
다음에는 원하는 페이지 로딩 혹은 element 로딩이 끝날때까지 기다리는 Wait에 대해 알아보겠습니다.


[Selenium] - selenium python 페이지 열기

[Selenium] - selenium WebElement python

'Selenium' 카테고리의 다른 글

selenium element timeout/wait By nodejs  (0) 2021.01.18
selenium WebElement python  (0) 2021.01.14
selenium python 페이지 열기  (0) 2021.01.13
selenium element selector By nodejs  (0) 2021.01.12
selenium element 찾기 nodejs  (0) 2021.01.12

nodejs와 selenium-webdriver에서 페이지가 로딩 되지 않았는데 element를 찾는다면 당연히 에러가 날 수 밖에 없습니다.
또한 동적으로 element가 생성되는 element를 찾을 때 아직 로딩이 끝나지 않았다면 element를 찾을 수 없습니다.
이러한 상황에서 사용할 수 있는 wait 함수에 대해 알아보겠습니다.
페이지가 로딩이 되는 시간을 기다리는 wait과 element가 로딩되는 시간을 각각 지정할 수 있습니다.
특히 element는 모든 element를 찾을 때 공통으로 기다리는 시간을 지정할 수도 있고
각각의 element를 찾을 때 개별로 기다리는 시간을 지정할 수 있습니다.


selenium element timeout/wait By nodejs

selenium set timeouts nodejs

nodejs driver에서 공통으로 설정할 수 있는 timeout 값은 총 3가지가 있다.
implicit: element가 로딩이 될 때까지 기다리는 시간 설정 (milliseconds), default: 0
pageLoad: 페이지가 로딩이 될 때까지 기다리는 시간 설정 (milliseconds), default: 30000
script: script가 로딩이 될 때까지 기다리는 시간 설정 (milliseconds), default: 30000
implicit default 값이 0이기 때문에 설정해주는 것이 좋다.


const webdriver = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); const run = async () => { const service = new chrome.ServiceBuilder('./chromedriver').build(); chrome.setDefaultService(service); const driver = await new webdriver.Builder() .forBrowser('chrome') .build(); await driver.manage().setTimeouts({ implicit: 10000, // 10초 pageLoad: 30000, // 30초 script: 30000, // 30초 }); console.info( await driver.manage().getTimeouts() ) // output: {implicit: 10000, pageLoad: 30000, script: 30000} setTimeout(async () => { await driver.quit(); process.exit(0); }, 3000); } run();

설정 값을 확인해보니 {implicit: 10000, pageLoad: 30000, script: 30000}으로 설정된 것을 확인할 수 있다.



selenium element wait nodejs

const webdriver = require('selenium-webdriver'); const { By } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); const run = async () => { const service = new chrome.ServiceBuilder('./chromedriver').build(); chrome.setDefaultService(service); const driver = await new webdriver.Builder() .forBrowser('chrome') .build(); // await driver.manage().setTimeouts({ // implicit: 10000, // 10초 // pageLoad: 30000, // 30초 // script: 30000, // 30초 // }); await driver.get('https://best.aliexpress.com/?lan=en&cv=14000&af=138730&aff_platform=portals-tool&sk=_AYGYIZ&aff_trace_key=69543d3e8b024d5a925cfe8c102002b7-1610580210996-02920-_AYGYIZ&cn=6814&dp=1028506c6be0e835b5f70fc8cf19b8&terminal_id=ed1f98885fb54f62a9035536191d2ea8'); try { const reco_div = await driver.findElement(By.className('_2nJnr')); } catch (err) { console.error(err); await driver.executeScript(`alert('${err.name}, ${JSON.stringify(err.message)}')`); setTimeout(async () => { await driver.quit(); process.exit(0); }, 3000); } } run();

implicit element timeout 값을 설정하지 않은 경우 바로 element를 찾지 못하고 error를 발생 시킨다.


즉시 에러


const webdriver = require('selenium-webdriver'); const { By } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); const run = async () => { const service = new chrome.ServiceBuilder('./chromedriver').build(); chrome.setDefaultService(service); const driver = await new webdriver.Builder() .forBrowser('chrome') .build(); await driver.manage().setTimeouts({ implicit: 10000, // 10초 pageLoad: 30000, // 30초 script: 30000, // 30초 }); await driver.get('https://best.aliexpress.com/?lan=en&cv=14000&af=138730&aff_platform=portals-tool&sk=_AYGYIZ&aff_trace_key=69543d3e8b024d5a925cfe8c102002b7-1610580210996-02920-_AYGYIZ&cn=6814&dp=1028506c6be0e835b5f70fc8cf19b8&terminal_id=ed1f98885fb54f62a9035536191d2ea8'); try { const reco_div = await driver.findElement(By.className('_2nJnr')); } catch (err) { console.error(err); await driver.executeScript(`alert('${err.name}, ${JSON.stringify(err.message)}')`); setTimeout(async () => { await driver.quit(); process.exit(0); }, 3000); } } run();

implicit element timeout 값을 설정한 경우 바로 element를 찾지 못할 경우 바로 error를 발생 시키는 것이 아니라
설정한 시간 만큼 10000(milliseconds) 대기한 후에 error가 발생한다.


대기 후 에러


selenium에서 페이지 로딩을 기다리는 page timeout과 element를 찾을 때 element를 찾을 때 까지 기다리는 implicit wait에 대해 알아보았습니다.
implicit 설정은 element를 찾을 때 마다 각각 설정하는 방법도 있습니다.
상황에 맞추어 wait를 활용한다면 예외상황을 잘 해결할 수 있습니다.


[Selenium] - selenium 크롤링 nodejs - 브라우저 열기
[Selenium] - selenium element 찾기 nodejs
[Selenium] - selenium element selector By nodejs

'Selenium' 카테고리의 다른 글

selenium element selector python  (0) 2021.01.20
selenium WebElement python  (0) 2021.01.14
selenium python 페이지 열기  (0) 2021.01.13
selenium element selector By nodejs  (0) 2021.01.12
selenium element 찾기 nodejs  (0) 2021.01.12

python과 selenium에서 사용할 수 있는 Element에 대해 알아보겠습니다.
Element를 활용하면 selenium을 활용한 크롤링 혹은 웹 자동화를 할 수있습니다.
웹 페이지에서 Element를 찾고 Element에서 제공하는 다양한 함수에 대해 알아보겠습니다.
예제에서는 chrome 브라우저를 사용합니다.

selenium WebElement python

WebElement는 DOM element를 나타냅니다.
element를 찾을 떄는 Webdriver를 이용해서 찾을 수도 있고 다른 WebElement를 통해서도 찾을 수 있습니다.

from selenium import webdriver import time driver = webdriver.Chrome('./chromedriver') driver.get("https://www.tistory.com/") element = driver.find_element_by_class_name("btn_tistory") element.click() time.sleep(3) driver.close()

selenium findElement, findElements python

find_element: 일치하는 하나의 Element를 반환합니다.
find_elements: 일치하는 모든 Elements를 array로 반환합니다.

findElement python

driver.get("https://www.tistory.com/") element = driver.find_element_by_css_selector("#kakaoHead > div > div.info_tistory > div > a") print(element.text) # print: 시작하기

findElements python

driver.get("https://www.tistory.com/") gnb_menus = driver.find_elements_by_css_selector("#kakaoGnb > ul > li") print(len(gnb_menus)) # print: 4 print(gnb_menus[0].text) # print: 피드

findElements는 array를 리턴합니다.



selenium send_keys python

문자 데이터를 입력하거나 Key 입력 이벤트를 발생시킬 수 있습니다.

from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome('./chromedriver') driver.get("https://www.tistory.com/auth/login/old?redirectUrl=https%3A%2F%2Fwww.tistory.com%2F") login_input = driver.find_element_by_css_selector("#loginId") login_input.send_keys("user", "email") login_pw = driver.find_element_by_css_selector("#loginPw") login_pw.send_keys("password", Keys.ENTER)

Key.ENTER를 사용하여 패스워드 입력 후 엔터를 입력합니다.


selenium element click python

element의 click 이벤트를 발생시킵니다.

driver.get("https://www.tistory.com/auth/login/old?redirectUrl=https%3A%2F%2Fwww.tistory.com%2F") login_input = driver.find_element_by_css_selector("#loginId") login_input.send_keys("user", "email") login_pw = driver.find_element_by_css_selector("#loginPw") login_pw.send_keys("password") login_btn = driver.find_element_by_css_selector("#authForm > fieldset > button") login_btn.click()

로그인 버튼 element를 찾고 click() 함수를 이용하여 click이벤트를 발생시킵니다.


결과

selenium element text python

element의 sub-elements 포함한 모든 텍스트를 return합니다.

driver.get("https://www.tistory.com/auth/login/old?redirectUrl=https%3A%2F%2Fwww.tistory.com%2F") fields = driver.find_element_by_css_selector("#authForm > fieldset") print(fields.text) # print # 로그인 # 로그인 상태 유지 # 아이디 / 비밀번호 찾기

element를 활용하여 원하는 DOM을 찾거나 혹은 모든 DOM 리스트를 찾는 방법에 대해 알아보겠습니다.
다음에는 By를 활용한 DOM을 찾는 다양한 방법에 대해 알아보겠습니다.


[Selenium] - selenium python 페이지 열기

[Selenium] - selenium element selector python

'Selenium' 카테고리의 다른 글

selenium element selector python  (0) 2021.01.20
selenium element timeout/wait By nodejs  (0) 2021.01.18
selenium python 페이지 열기  (0) 2021.01.13
selenium element selector By nodejs  (0) 2021.01.12
selenium element 찾기 nodejs  (0) 2021.01.12

+ Recent posts