SharedIT | 묻고 답하기(AMP)

파이썬 셀레니움에서 .close() 에 대해 여쭤 봅니다

셀레니움으로 크롬을 띠우고 특정 웹의 페이지마다 들어가서 테이블을 긁어오는 크롤러를 만들었습니다


친절하게도 목표 웹의 URL 주소자체가 고정된 형식이 있어 맨 뒤에 페이지 숫자만 변형해주면되어 단순한데,


한 50~100 페이지 정도 됩니다. 


그래서 execute_script()로 새로운 탭에 원하는 페이지를 띠우고 테이블을 긁은 후


그 탭을 닫아야 하는데 여기서 close()로 탭을 닫으면 브라우져에 대한 컨트롤을 상실해서 다음 단계로 넘어가지를 못합니다.

(아마도 웹이 ID, 비번을 넣고 들어가는거라 탭을 닫으면 권한이 상실되는거 같습니다)


그렇다고 모든 페이지를 한 브라우져내에서 각 탭에 다 띠우려니 너무 버벅이고..


한 페이지마다 브라우져를 리셋하자니 너무 시간을 많이 잡아먹고, 로그인을 단시간에 100번 하자니 좀 눈치도 보이고...


매일 리프레쉬되는걸 하루 한번 정도 작업해야하는데,


좋은 방법없을까요?


질문을 요약 하자면


#1 파이썬 기반 셀레니움에서 탭을 별도로 닫고도 브라우저에 대한 컨트롤을 유지할 수 있는 방법이 없을지

#2 브라우저에서 새로운 탭을 열지않고 기존 탭에서 URL만 변경시킬 수 있는지


입니다.


감사합니다. 

Tags : 태그가 없습니다.

2개의 답변이 있습니다.

명동쓰레빠
  0 추천 | 약 2년 전

요즘은 파이썬 관련 문의가 자주 올라 오네요. 그만큼 관심도가 높은 것일 것이고

덕분에 흐름을 알게 되어 감사합니다.  

wansoo
  0 추천 | 약 2년 전

Selenimu을 사용하지 않다보니...

원하는 답을 주기는 어려울 수 있겠는데요.


.get("url") 을 이용해서 변경할 url을 다시 읽어 오면 되지 않을까요..?


웹 스크롤링을 한다면,

selenium을 이용해서 무겁게 처리하는 보다는, 

python으로 바로 처리하는게 더 낫지 않을까 싶어 보이네요.


궁금해서 질문드리는데...

Selenium의 장점이 어떤게 있을까요..?

python 등의 언어를 직접 이용하지 않고, 셀레니움을 이용해야 하는 장점이 있을까요..?


전에 셀레니움을 한번 사용해 볼까 싶어서 웹 브라우저에 셀레니움 확장팩을 설치해 두었는데...

웹 브라우저가 오래 사용하면 다운되는 문제점이 있는 것 같아 삭제해 버렸었네요.

wansoo | 약 2년 전

새로운 탭에 다른 url을 읽어 오고 난 후에, 이전 탭을 .close()를 사용해서 닫아 주는 식으로 처리해도 되지 않을까 싶어 보이고요.

한번에 100개씩 뛰워 두고 작업하는게 아니라..

새로운 탭을 열어서 다른 URL에 대한 처리를 하면서 이전 탭을 닫아 준다면 1개 또는 2개 탭만을 열어서 작업하는 형태가 될 것 같아 훨씬 가볍게 처리 될 수 있지 않을까 싶어 보이고요.

wansoo | 약 2년 전

예를 들어, 

2번째 탭을 닫는 방법은  아래와 같이 하면 되지 않을까 싶어 보이고요.


browser.getAllWindowHandles().then(function (handles) {

    browser.driver.switchTo().window(handles[1]);

    browser.driver.close();

    browser.driver.switchTo().window(handles[0]);

});


또는


var tabs = driver.WindowHandles;

if (tabs.Count > 1) {

   driver.SwitchTo().Window(tabs[1]);

   driver.Close();

   driver.SwitchTo().Window(tabs[0]);

}

wansoo | 약 2년 전

Python이라면...

아래와 같이 명령을 사용하면 2번째 탭을 닫을 수 있지 않을까 싶어 보이고요.


driver.switch_to.window(driver.window_handles[1])

driver.Close()

driver.switch_to.window(driver.window_handles[0])

arcgura | 약 2년 전

python에서 셀레니움라이브러리를 이용하는거라서요. 


셀레니움은 브라우져자체를 직접적으로 컨트롤할 수 있어서 ID, 비밀번호를 요구하는 페이지거나 동적테이블을 파싱하기 편하더라구요


그리고 지금 문제가 driver.close()로 새로연 탭을 닫아주면 브라우저에대한 컨트롤을 상실해서 다음 코드에서부터 바로 에러가 납니다 ㅜㅜ 


wansoo | 약 2년 전

브라우저 컨트롤을 상실한다는 건 탭이 한개 일때만 그렇지 않나요?

탭이 한개일 경우에는 브라우저 자체가 닫히게 되어 브라우저 컨트롤을 상실해도,

탭이 여러개 일 경우에는 해당 탭 한개만 닫히고, 브라우저는  남아 있어서 컨트롤을 할 수 있지 않나요..?

arcgura | 약 2년 전

탭이 여러개인 상태에서 최근 열린 탭을 닫아도 같은 증상 입니다 ㅜㅜ


arcgura | 약 2년 전

방금해결했습니다!!!!

말씀해주신대로 다른 탭으로 스위치를 하고 진행하니 돼내요!!!!

감사합니다!!!

arcgura | 약 2년 전

driver.switch_to.window(driver.window_handles[1])

driver.Close()

driver.switch_to.window(driver.window_handles[0])


요게 먹혔어요. 주시대상인 탭이 close되어 명령이 먹히지 않았던거 같습니다. 


다른 탭으로 스위치를 해주니 명령이 먹히내요!!!