- 2
- 이니스프리
- 조회 수 865
*이 글은 Selenium을 막아놓은 몇몇 사이트에 대한 추론을 통해 작성되었고, 아직 검증이 충분히 되지 않았습니다.
Stackoverflow에 보면 Selenium을 detect하는 방법에 대해 여러 Q&A글이 있습니다.
그런데 PhantomJS, Chrome, Firefox 중 어느 것을 사용하느냐에 따라서 방법이 달라지고,
동일한 headless 브라우저라도 버전에 따라 차이가 있기 때문에 효율적인 방법이 존재하지는 않는 것 같습니다.
CMS에 Selenium 봇이 글을 작성하는 것을 차단하려면, 결국 Selenium이 웹사이트에 로그인 하는 것을 막으면 됩니다.
Selenium에서는 send_keys() 메서드를 사용하여 id와 pw를 입력한 후에
다시 send_keys() 메서드로 엔터를 입력하거나, submit 버튼에 대해 click() 메서드를 사용하겠죠.
로그인을 하지 않아도 글을 쓸 수 있는 경우에는 대부분 캡챠를 활성화했을테니
Tensorflow나 Tesseract 없이 Selenium만 단독으로 사용하면 이 부분에서 막힐 것입니다.
따라서 id/pw를 입력하는 element에 실제로 키 입력이 이루어졌는지 여부로 Selenium인지 아닌지 여부를 판단할 수 있습니다.
다만 브라우저 익스텐션 중 자동 로그인과 관련된 것이나, 브라우저 자체의 id/pw 자동 입력 기능까지도 차단할 개연성이 있습니다.
결국 id/pw를 입력하는 element에서 엔터 또는 탭의 입력이 있거나,
(탭을 이용하여 submit 버튼으로 이동하는 경우도 있기 때문입니다.)
submit 버튼에 마우스가 hover 되는지 여부로 판단하면 될 것 같습니다.
(id/pw/submit element에서 엔터 입력이 있거나, submit 버튼에 마우스가 hover 되는지 여부로 판단할 수도 있겠죠.)
물론 pyclipper 등을 이용하여 id/pw를 copy & paste한 후에 엔터를 입력하는 방식으로 위와 같은 방법을 우회할 수 있지만,
이러한 방법은 headless 브라우저를 사용하거나, 브라우저가 백그라운드에서 동작하는 경우에는 사용할 수 없습니다.
따라서 Selenium 봇의 활용도가 크게 떨어진다고 볼 수 있습니다.
제가 지금은 아침이라서 더 이상 길게 적을 수 없고, 조금 더 개념을 정돈하고 내용을 추가하여 다시 글을 올리겠습니다.
+)
Selenium을 이용하지 않고 그누보드나 XE/RXE에 글을 작성할 수 있는지에 대해서 생각해보면
CMS에서 글을 작성할 때 어떠한 방식으로 데이터를 전송하는지를 파악하면 물론 불가능하지는 않겠지만,
적어도 백링크를 다는 봇은 에디터의 코드입력 모드를 이용할테니 적어도 이런 경우는 막을 수 있을 것으로 생각되네요.
(에디터 대신 textarea를 사용하면서 tag 입력을 허용하는 유형의 사이트는 매우 드물 것 같네요.)