내가 운영하는 인스타 계정을 먼저 소개한다

@hoon_studio : 개인 계정이었다가 운동계정으로 사용하다가 다시 계정을 분리하면서 개인계정으로 돌아옴

@hoon_fitness : 점심운동 등 운동을 기록하는 공간

@hoon_studywithme : 새벽에 미라클 모닝해서 신문이나 책 등 자기계발 하는 공간

 

* 제 개인/운동/공부 피드를 보려면 맞팔해주셔도 괜찮습니다.

 

다음 포스팅으로 다시 자동화 인스타 좋아요봇 만든 소스를 공개하겠지만,

먼저 이 3개 계정에 대한 좋아요 exe 실행파일을 만들고

동시에 돌려보았다. 1개 계정은 1번만 실행시키는 한계, 시간적 한계를 이겨내고 싶어서였다.

 

그 결과, 3개중 테스트를 가장 많이 진행하였던 개인 계정이 아래와 같이 봇 중지가 되었다. 

* 회원님의 계정이 일시적으로 잠겼습니다

그래서 계정을 풀고 다시 노트북으로 확인해보니 이런식으로 다른 2개 계정은 잘 운영중이었고,

본 계정의 화면만 하얗게 표현되고 CMD창에도 에러로그가 떨어져있었다.

40번째 피드까지 좋아요 작업이후에 element를 찾지 못해서 에러 로그가 떨어진 것으로 나온다.

39번째 피드 좋아요 작업 완료
작업 간 대기시간은 40초 입니다.
좋아요
40번째 피드 좋아요 작업 완료
작업 간 대기시간은 32초 입니다.
Traceback (most recent call last):
  File "likebot.py", line 141, in <module>
  File "likebot.py", line 103, in bot
  File "selenium\webdriver\remote\webdriver.py", line 564, in find_element_by_class_name
  File "selenium\webdriver\remote\webdriver.py", line 976, in find_element
  File "selenium\webdriver\remote\webdriver.py", line 321, in execute
  File "selenium\webdriver\remote\errorhandler.py", line 242, in check_response
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".QBdPU.rrUvL"}
  (Session info: chrome=96.0.4664.93)

[19924] Failed to execute script 'likebot' due to unhandled exception!

그리고 나서는 계정비밀번호를 변경하고 시작하였더니, 또 인터넷 연결안되어 있다고 한다.

다른 계정은 잘 수행하는데 말이다.

 

오늘 본 계정을 테스트 많이해서 좀 쉬게끔 해줘야겠다.

Posted by 유영훈
,

Instagram에 연결할 수 없습니다. 인터넷에 연결되어 있는지 확인한 후 다시 시도해보세요.

=> 인터넷이 되는 상황이었음. 그래서 봇 테스트 때문에 잦은 로그인으로 막혔나 싶어서 몇번을 재시도해도 동일하더니 시간이 1~2분 정도 더 지나니 다시 잘되었다. 혹시나 메일로 이상 로그인 시도 탐지 메일이 왔을줄 알았는데 별도로 오지는 않았다. (예전에 테스트 하는 동안 이상감지 메일이 5개 정도왔던 기억때문에 확인해봄)

Posted by 유영훈
,

https://godpeople.or.kr/board/3417787

휴대폰과 통신사 무제한 문자로 그룹문자 보내는 파이썬 코드

핸드폰의 무료 문자를 이용해서 단체문자를 쉽게 보낼 수 있는 파이썬 프로그램입니다. 먼저, 핸드폰에 AirMore라는 앱을 설치합니다. Install AirMore App and Download 안드로이드 https://play.google.com/store/a

godpeople.or.kr

https://lovelydiary.tistory.com/m/23

파이썬 크롤러) pandas로 데이터를 엑셀로 저장할 때 추가 데이터를 이어 업데이트하기 !

파일을 한 번 저장하고, 그 파일 위에 추가적으로 다른 데이터를 또 이어서 저장하는 경우, import pandas as pd #names 리스트와 links 리스트는 각각 요소를 포함하는 리스트로 정의되어 있음을 전제로

lovelydiary.tistory.com

https://wikidocs.net/book/1

점프 투 파이썬

** 점프 투 파이썬 오프라인 책(개정판) 출간 !! (2019.06) ** * [책 구입 안내](https://wikidocs.net/4321) 이 책은 파이썬 ...

wikidocs.net

Posted by 유영훈
,

지난 포스팅을 보니 최근 코드를 개선한 포스팅이 더 좋아서 이 포스팅을 보고 다시 따라해본다.

https://hoonstudio.tistory.com/308?category=882469 

 

[파이썬] 인스타 좋아요봇을 최대한 사람같게 만들기 (random 라이브러리 최대한, 적극적 활용)

https://hoonstudio.tistory.com/305 [파이썬] 좋아요 봇을 스케쥴링 걸다 https://hoonstudio.tistory.com/304 [파이썬] 좋아요 봇 개선중 지난번테스트 결과확인하고 자체피드백 500건미만이 찍혀있었다. 코드실..

hoonstudio.tistory.com

그런데 인스타에서 구조를 변경하였는지 예전 코드로 실행이 잘안되서 한참 헤메는 중이다.

xpath에 아직 익숙하지 않아서인 것 같은데, 제대로 복붙해도 그렇다.

Traceback (most recent call last):
  File "D:\05.Lab\02.python\20211214_insta_like_bot\likebot.py", line 142, in <module>
    bot()
  File "D:\05.Lab\02.python\20211214_insta_like_bot\likebot.py", line 102, in bot
    like_btn = driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/article/div/div[3]/div/div/section[1]/span[1]')
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[6]/div[2]/div/article/div/div[3]/div/div/section[1]/span[1]"}
  (Session info: chrome=96.0.4664.93)

Posted by 유영훈
,

https://hoonstudio.tistory.com/303?category=882469 

 

[파이썬] 인스타그램 좋아요 봇 따라해보기

아래 출처에서 인스타그램 좋아요 봇 파이썬 코딩을 보고 따라해보았다 주의해야할 점은  - 인스타그램 2차 비밀번호 인증 해제  - 페이스북으로 로그인 하였다면, 인스타그램 비밀번호도 설정

hoonstudio.tistory.com

기존에 인스타 좋아요 봇을 어느정도 만들었는데, 노트북을 SSD로 교체하면서 기존 파일 백업이 제대로 안되었나보다.

그래서 HDD를 다시 꽂아서 복사하기 보다는 기존 내 포스팅을 참고해서 다시 코딩을 해보려고 한다.

어차피 파이썬도 안쓰는 동안 많이 잊어서 공부하는 겸사겸사 하려고 한다. (속으로는 백업의 중요성을 다시 깨달았다)

 

pycharm에서 pip도 실행할 수 있도록 pip를 설치하였다.

 

노란색 코멘트는 pip 21.3.1 버전 사용가능하다는 레코멘드.

chromedriver는 직접 더블클릭으로 설치가 아닌 selenium에서 바라보는 경로를 지정해주어야 한다.

그렇지 않으면 아래와 같이 에러가 나온다.

D:\05.Lab\02.python\20211214_insta_like_bot\main.py:24: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  driver = webdriver.Chrome(driver_path, options=options)
Traceback (most recent call last):
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\common\service.py", line 71, in start
    self.process = subprocess.Popen(cmd, env=self.env,
  File "C:\Users\move_\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 947, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\move_\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 1416, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] 지정된 파일을 찾을 수 없습니다

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\05.Lab\02.python\20211214_insta_like_bot\main.py", line 81, in <module>
    bot()
  File "D:\05.Lab\02.python\20211214_insta_like_bot\main.py", line 24, in bot
    driver = webdriver.Chrome(driver_path, options=options)
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 70, in __init__
    super(WebDriver, self).__init__(DesiredCapabilities.CHROME['browserName'], "goog",
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\chromium\webdriver.py", line 90, in __init__
    self.service.start()
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\common\service.py", line 81, in start
    raise WebDriverException(
selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe' executable needs to be in PATH. Please see https://chromedriver.chromium.org/home


Process finished with exit code 1

나의 경우에는 main.py 파일이 있는 동일 경로에 chromedriver 파일을 복사해두었다.

그랬더니 예전에는 보지 못하였던 새로운 에러가 떨어졌다.

D:\05.Lab\02.python\20211214_insta_like_bot\main.py:24: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  driver = webdriver.Chrome(driver_path, options=options)
로그인중....
D:\05.Lab\02.python\20211214_insta_like_bot\main.py:35: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
  id_input = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[1]/div/label')
D:\05.Lab\02.python\20211214_insta_like_bot\main.py:40: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
  pw_input = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[2]/div/label')
D:\05.Lab\02.python\20211214_insta_like_bot\main.py:45: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
  login_btn = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[3]/button')
D:\05.Lab\02.python\20211214_insta_like_bot\main.py:56: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
  first_feed = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/article/div[1]/div/div/div[1]/div[1]/a/div/div[2]')
Traceback (most recent call last):
  File "D:\05.Lab\02.python\20211214_insta_like_bot\main.py", line 81, in <module>
    bot()
  File "D:\05.Lab\02.python\20211214_insta_like_bot\main.py", line 56, in bot
    first_feed = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/article/div[1]/div/div/div[1]/div[1]/a/div/div[2]')
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 520, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 1244, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 422, in execute
    response = self.command_executor.execute(driver_command, params)
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 421, in execute
    return self._request(command_info[0], url, body=data)
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 443, in _request
    resp = self._conn.request(method, url, body=body, headers=headers)
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\urllib3\request.py", line 78, in request
    return self.request_encode_body(
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\urllib3\request.py", line 170, in request_encode_body
    return self.urlopen(method, url, **extra_kw)
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\urllib3\poolmanager.py", line 375, in urlopen
    response = conn.urlopen(method, u.request_uri, **kw)
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\urllib3\connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\urllib3\connectionpool.py", line 445, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "D:\05.Lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\urllib3\connectionpool.py", line 440, in _make_request
    httplib_response = conn.getresponse()
  File "C:\Users\move_\AppData\Local\Programs\Python\Python39\lib\http\client.py", line 1347, in getresponse
    response.begin()
  File "C:\Users\move_\AppData\Local\Programs\Python\Python39\lib\http\client.py", line 307, in begin
    version, status, reason = self._read_status()
  File "C:\Users\move_\AppData\Local\Programs\Python\Python39\lib\http\client.py", line 268, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "C:\Users\move_\AppData\Local\Programs\Python\Python39\lib\socket.py", line 704, in readinto
    return self._sock.recv_into(b)
KeyboardInterrupt

Process finished with exit code -1073741510 (0xC000013A: interrupted by Ctrl+C)

 

https://velog.io/@sangyeon217/deprecation-warning-executablepath-has-been-deprecated

 

DeprecationWarning: executable_path has been deprecated 해결하기

DeprecationWarning: executable_path has been deprecated 해결 방법에 대한 포스팅 입니다.

velog.io

 

아래처럼 취소선이 왜 생겼는지 보니 selenium 버전이 4버전이 되면서 라이브러리가 변경되서 warning도 뜨고 한다고 함. 그래서 기존대로 3버전으로 낮추는 작업을 진행함.

 

PS D:\05.Lab\02.python\20211214_insta_like_bot> pip uninstall selenium
Found existing installation: selenium 4.1.0
Uninstalling selenium-4.1.0:
  Would remove:
    d:\05.lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium-4.1.0.dist-info\*
    d:\05.lab\02.python\20211214_insta_like_bot\venv\lib\site-packages\selenium\*

pip를 3버젼대로 설치하고나니 취소선이 다시 없어짐

PS D:\05.Lab\02.python\20211214_insta_like_bot> pip3 install selenium=3.141
ERROR: Invalid requirement: 'selenium=3.141'
Hint: = is not a valid operator. Did you mean == ?
WARNING: You are using pip version 21.1.2; however, version 21.3.1 is available.
Collecting selenium==3.141
  Downloading selenium-3.141.0-py2.py3-none-any.whl (904 kB)
     |████████████████████████████████| 904 kB 6.4 MB/s
Requirement already satisfied: urllib3 in d:\05.lab\02.python\20211214_insta_like_bot\venv\lib\site-packages (from 
selenium==3.141) (1.26.7)
Installing collected packages: selenium
Successfully installed selenium-3.141.0
WARNING: You are using pip version 21.1.2; however, version 21.3.1 is available.
You should consider upgrading via the 'D:\05.Lab\02.python\20211214_insta_like_bot\venv\Scripts\python.exe -m pip i
nstall --upgrade pip' command.

너무 길어져서 다음 포스팅으로 이어서 진행하겠다.

Posted by 유영훈
,

코딩은 하는 것 같은데, 아직 비효율적인 코딩이 나오는 것 같다.

숫자가 커질수록 연산과정이 많아져서 '이거 루프 도는 건가?'라고 생각할때 즈음 결과값이 나오는 것을 보았다.

그렇다면 어떻게 개선해야하는 것인가?

 - 알고리즘을 생각하고 개선 포인트를 찾자

 - for문이 3번 들어가기 때문에 for문 번수 * for문 번수 * for문 번수 이기 때문에 for문을 1개만 줄여도 '마지막 for문 번수'만큼을 안 곱해도 된다. 

 

[피타고라스 삼조 코딩 - 비효율적]

for a in range(1, 400):
    a2 = a * a
    for b in range(1, 400):
        b2 = b * b
        for c in range(1, 400):
            c2 = c * c
            if a2 + b2 == c2:
                if a + b+ c == 400:
                    #print(a, b, c)
                    print(a*b*c)

 

[피타고라스 삼조 코딩 - 효율적으로 개선]

 - for문을 1개 없애서 결과값 속도가 훨씬 빨라졌다.

 'c = 400 - a - b'와 같이 표현할 수 있다는 것을 배웠다.

for a in range(1, 400):
    for b in range(1, 400):
        c = 400 - a - b
        if a*a + b*b == c*c:
            if a + b + c == 400 and a < b < c:
                print(a, b, c)
                print(a*b*c)

** 이 문제는 a + b + c 가 400이면서 피타고라스 삼조를 만족시키는 샘플 문제에 대한 코딩이다.

 

Posted by 유영훈
,

지난 포스팅에서 인스타에게 4번정도 경고를 받고

코드를 수정하였었는데, 이 랜덤한 시간, 다른 피드 랜덤 선택이 적절하게 효과를 낸 것 같아 기분이 좋다

 

https://hoonstudio.tistory.com/308

 

[파이썬] 인스타 좋아요봇을 최대한 사람같게 만들기 (random 라이브러리 최대한, 적극적 활용)

https://hoonstudio.tistory.com/305 [파이썬] 좋아요 봇을 스케쥴링 걸다 https://hoonstudio.tistory.com/304 [파이썬] 좋아요 봇 개선중 지난번테스트 결과확인하고 자체피드백 500건미만이 찍혀있었다. 코드실..

hoonstudio.tistory.com

[작업완료 화면]

[코드 반영]
- 현재사간 찍기 (피드갯수 체크 간격 확인목적)
- 체크간격 멘트수정
- 넘기는 시간 2초로 늘리기 #네트워크 속도 고려
 => 보통 돌려놓고 50개정도 되기전에 한번쯤 넘기는 코드부분에서 오류발생
 =>  2초로 늘리고 오류 미발생
- 작업시간대 12시 피하기 (다른 작업에 영향이 미침)
 => 18시~06시 (시작시간 기준)

[개선 필요사항]

- 내가 클릭하고 싶지 않은 인스타 아이디가 키워드에 일부 포함되어 있다면 그 아이디는 건너띄기 (광고 계정 패턴 확인되면 해당 키워드로 입력)

- 우측 클릭으로 피드 옮기는 것이 문제가 없다면 유지하겠지만, 이 부분도 문제가 된다면 랜덤하게 왼쪽 피드 몇번 갔다가 다시 우측으로 이동하는 것 랜덤화 적용

- 한번 스케쥴링 동안에는 태그를 1개만 사용하고 있음. => 필요 시 2~3개 태그 조합해서 하는 것 진행. 이런 필요성이 있나 싶음 현재는. 처음 봇 돌릴때 태그를 돌리기 때문에 아직은 미포함.

- 스케쥴링 로그 파일 만들기 : 현재는 스케쥴링 다 돌면 그냥 꺼짐. 그래서 잘 도는지 여부를 모름. 위 캡쳐는 파이참에서 실행해보아서 기록남음.

Posted by 유영훈
,

스케쥴링을 원래 '일~토' 매번 다르게 적용작업을 하다가

이렇게 무식하게 해야하는가.. 자괴감 3분동안 스케쥴러 프로그램이 랜덤시작이 안되면

코딩으로 딜레이 주고 시작하면 되겠다고 생각한 아이디어로 시작

 

지난 포스팅에서 코딩 개선을 하고 스케쥴링도 대수정하였다.

https://hoonstudio.tistory.com/308

[수정 전]

노가다도 빠르게 적용해서 결과값이 개선되는지 보자는 생각으로 진행했다가.. 도저히 아니다고 판단

[수정 후]

이전에 비해 너무 깔끔해졌다.. 이제 IT하는 사람같은 느낌이 들었다.

Posted by 유영훈
,

https://hoonstudio.tistory.com/305

 

[파이썬] 좋아요 봇을 스케쥴링 걸다

https://hoonstudio.tistory.com/304 [파이썬] 좋아요 봇 개선중 지난번테스트 결과확인하고 자체피드백 500건미만이 찍혀있었다. 코드실행 오류 및 화면하얗게처리 되어있어씀 ㅡ 인스타정책때문인가. 테

hoonstudio.tistory.com

최근 5일정도 인스타그램 좋아요봇을 따라해보고, 나한테 적용시켜보고, 경고도 받아보고

최대한 사람처럼 작동하게끔 (인스타 경고를 받지않게끔) 해보려고 한다.

 

그에 대한 코드이다. (아이디, 패스워드를 하드코딩하는 이유는 exe 파일로 만들어서 바로 스케쥴링 걸수있도록)

 

[개선 포인트]

 - 친절한 안내 : 총 갯수, 선택 해시태그, 몇초후 시작, 종료되었습니다

 - 컨텐츠 작업 : 랜덤

 - 해시태그 선택 : 랜덤

 - 좋아요작업 다음피드 : 랜덤으로 이동 (random.randint 모듈 사용)

  => 실제 인스타에서 어떻게 작동하는지 모름. 테스트해보려고 하였으나, 이미 경고받아서인지 실행 2번만에 경고팝업

 - 해당 코드를 7/20부터 돌려서 사용예정 (스케쥴링 적용 - 하루 3번) => 06시, 12시, 18시 (어차피 시작시간도 랜덤딜레이여서 정각으로 걸어도 됨)

 

[추가 개선포인트]

 - 어느정도 돌리면 해시태그를 바꾸어서 또 누르고 (랜덤하게)

  => 정말 불규칙하게 가는 것인데, 1시간 넘게 이전 코딩 개선하느라 머리가 잘 안돌아감

 

[인사이트]

 - 알고리즘도 결국 정형화되고, 경험을 쌓아서 이런 패턴이면 봇이겠구나 라는 것을 깨닫는 구조이다.

 그렇기 때문에 나조차 패턴이 전혀 예측이 안되는 코딩을 하면되지않을까. 

 => 패턴 = 랜덤 * 랜덤 * 랜덤 * .....

 

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import inspect, os, platform, time, random

def bot():
    #좋아요 갯수 랜덤 정의
    rand_cnt = random.randrange(182, 297)
    print("이번 좋아요 작업의 총 피드 갯수는 {}개입니다".format(rand_cnt))
    rand_tag = ['운동하는직장인','운동하는남자','운동하는여자','운동인증','운동일기','운동일지','눈바디','피트니스','직장인스타그램','운동스타그램','홈트','홈트레이닝']
    #필요한 변수 정의
    insta_id = '블라블라'
    insta_pw = '블라블라'
    insta_tag = random.choice(rand_tag) # 해시태그 하나 선택
    print("작업할 해시태그는 '{}'입니다.".format(insta_tag))
    insta_cnt = rand_cnt
    insta_sort = 1

    #크롬드라이버 로딩
    options = webdriver.ChromeOptions()
    options.add_argument('--disable-gpu')
    options.add_argument('user-agent=Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')

    current_folder = os.path.realpath( os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0]))

    if platform.system() == 'Windows':
        driver_path = os.path.join(current_folder, 'chromedriver.exe')
    else:
        driver_path = os.path.join(current_folder, 'chromedriver')

    driver = webdriver.Chrome(driver_path, options=options)
    driver.implicitly_wait(10)

    ### 인스타그램 자동 좋아요 작업 ###
    #
    # 0. 좋아죠 시작작업 랜덤 적용
    random_wait_time = random.randrange(3, 5)
    print("좋아요 작업은 {}초 후에 시작됩니다".format(random_wait_time))

    # 1. 인스타그램 로그인 페이지로 이동
    driver.get('https://www.instagram.com/?hl=ko')
    print('로그인중....')
    time.sleep(3)

    # 2. 아이디 입력창을 찾아서 위에서 입력받은 아이디(insta_id)값 입력
    id_input = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[1]/div/label')
    id_input.click() #입력창 클릭
    id_input.send_keys(insta_id)

    # 아이디 입력 # 2-1. 패스워드 입력창을 찾아서 위에서 입력받은 패스워드(insta_pw)값 입력
    pw_input = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[2]/div/label')
    pw_input.click()
    pw_input.send_keys(insta_pw)

    # 3. 로그인 버튼 클릭
    login_btn = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[3]/button')
    login_btn.click() # 잠시 대기
    time.sleep(3)


    # add. 로그인정보 저장 > '나중에 하기' 버튼 클릭
    later_btn = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/div/div/div/button')
    later_btn.click() # 잠시 대기
    time.sleep(3)



    # 4. 작업할 해시태그 검색 결과 페이지로 이동
    driver.get('https://www.instagram.com/explore/tags/{}/'.format(insta_tag))
    time.sleep(2)

    # 5. 인기게시물 혹은 최근게시물 첫번째 피드 선택
    if insta_sort == '0':
        #인기게시물 첫번째 피트 선택
        hot_first_feed = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/article/div[1]/div/div/div[1]/div[1]/a/div/div[2]')
        hot_first_feed.click()

    else:
        #최근게시물 첫번째 피드 선택
        new_first_feed = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/article/div[2]/div/div[1]/div[1]/a/div[1]/div[2]')
        new_first_feed.click()

    time.sleep(1)
    print("좋아요 작업 시작합니다")

    # 6. 좋아요 작업 - 입력한 횟수만큼 반복 작업
    for idx in range(insta_cnt):
        div = driver.find_element_by_xpath('/html/body/div[5]/div[2]/div/article/div')
        div = div.find_element_by_xpath('/html/body/div[5]/div[2]/div/article/div[3]')
        like_btn = div.find_element_by_tag_name('button') #좋아요 버튼

        btn_svg = like_btn.find_element_by_tag_name('svg')
        svg_txt = btn_svg.get_attribute('aria-label')

        if svg_txt != '좋아요':
            print('이미 좋아요 작업한 피드')
        else:
            like_btn.click()  # 좋아요 클릭
            print('{}번째 피드 좋아요 작업 완료'.format(idx + 1))

        # 너무 빠르게 작업을 할 경우 많은 양의 작업을 하게 되어 인스타그램측에서 계정 정지나 경고를 할 수 있으니
        # 작업과 다음 작업 사이의 속도를 조절하기 위해 20초 이상을 설정해주세요.
        rand_time = random.randrange(24,58)
        time.sleep(rand_time)
        print(rand_time) # 랜덤 시간 주기 24~58s

    # 7. 좋아요 작업 - 다음 피드로 이동
        if idx < insta_cnt:
            try:
                i = 0
                while i != 2:
                    i = random.randint(1,3)
                    next_feed = driver.find_element_by_link_text('다음')
                    next_feed.click()
                    time.sleep(1) # '다음' 클릭 딜레이 간격
            except NoSuchElementException as n:
                print('피드 개수 부족으로 작업이 종료됩니다.')
                break


    print('계획된 {} 좋아요 작업이 모두 완료되었습니다'.format(insta_cnt))
    driver.quit()

bot()

800개 이상 쭉 좋아요을 찍는 것보다는 효과가 적겠지만..

꾸준하게 신경안쓰고 안전하게 스케쥴링 돌리는 것이 더 중요하다. 계정 중지 당하지 않고.

 

Posted by 유영훈
,

https://hoonstudio.tistory.com/305

 

[파이썬] 좋아요 봇을 스케쥴링 걸다

https://hoonstudio.tistory.com/304 [파이썬] 좋아요 봇 개선중 지난번테스트 결과확인하고 자체피드백 500건미만이 찍혀있었다. 코드실행 오류 및 화면하얗게처리 되어있어씀 ㅡ 인스타정책때문인가. 테

hoonstudio.tistory.com

지난 포스팅에 이어서 좋아요봇을 계속 돌리고 있는 중이다.

그런데 아래와 같은 인스타 팝업을 벌써 4번째 받았다.

 

----------------------------------------------------------------------------------------------------------

나중에 다시 시도하세요. Instagram은 커뮤니티를 보호하기 위해 특정 활동을 제한합니다.

문제신고, 확인

----------------------------------------------------------------------------------------------------------

어떤 경우에는 300개 정도 눌렀을때 팝업된것 같고, 어떤 경우는 (영어 해시태그) 30개도 안했는데도 발생했던 것 같다.

처음 영어 해시태그 like4like를 했을 때는 운동관련 컨텐츠가 아닌 좋아요반사 같은 해시태그여서 좋아요만 모은 계정으로 판단했었나 싶어서 한글태그로만 진행하게 되었고, 시간을 랜덤하게 20~25초 간격으로 눌렀음에도 불구하고 계속 걸린 것이다.

 

다행히 아직 계정 잠금 현상같은 것은 없었다.

아래 블로그를 참고해보니 꽤 유용한 정보들이 많았다.

 

[좋아요, 팔로우, 댓글, 디렉트 메시지(DM) 일일 제한 갯수]

- 좋아요 : 평균 1,000개 기준 (활성화된 계정 : 1,200개, 부정행위 주목 800개 정도]

 => 딱 889번 좋아요 눌러진 내 계정 (부정행위로 의심받고 있는 것 같다)

 => 우선 스케쥴러를 잠자는 시간을 고려해서 현실적으로 새벽시간대는 중지해야겠다 (fitness 해시태그 중지)

 => 참고용 블로그 추천방법 : 1시간에 30개 정도 좋아요, 1~2분 간격으로 누르는 것

 

- 팔로우 : 시간당 10명 내외, 하루 최대 200명정도 (누군가 나를 팔로잉 하는 것은 제한없음)

- 댓글 : 하루 평균 180~200개 (같은 내용을 반복해서 달거나, 이모티콘만 달게 되면 스팸 분류 확률 높아짐)

- 해시태그 : 한 포스팅당 최대 30개

- 스토리 : 유일하게 제한 없는 컨텐츠 (인스타에서 밀고 있음, 플랫폼 비즈니스에서 특정 기능을 홍보하고 키워나갈때 사용하는 방법 같음)

 

[인스타 제한조치 해제 시간]

보통 24시간 후 제한조치 풀림

=> 제한조치가 반복되면 48시간, 1주일 등 기간이 늘어나는 것 같음

 

https://ragisamton.tistory.com/71

 

인스타그램 나중에다시시도하세요 원인 해제기간

인스타그램 나중에 다시 시도하세요 원인과 해제 기간 인스타그램을 사용할 때 갑자기 '나중에 다시 시도하세요. 인스타그램은 커뮤니티를 보호하기 위해 특정 활동을 제한합니다.'라는 메시지

ragisamton.tistory.com

[해결책]

1) 총 하루 좋아요 갯수 : 800개

2) 운영 시간대 분리 (현실적으로) : 새벽시간(00~06시) 제외, 06~09시 진행, 12~13시 진행, 18~24시 진행

 => 총 3+1+6 => 10시간 = 800개 좋아요

 ==> 시간당 80개 좋아요 => 60분 = 좋아요 80개 => 1분 = 좋아요 1.3개 => 46초 = 좋아요 1개

 ** 봇 의심 회피하기 : 30~60초 랜덤으로 진행 (30+60) / 2 => 45초

 ** 갯수 지정 : 3시간(234개), 1시간(92개), 6시간(463개) => 이런식으로 약간 초과되거나 부족하게끔 설정

 (코딩은 시간당이 아닌 갯수 기준이고, 실행 시간만 중요하므로)

 ** 해시태그 차등 적용 : 운동하는직장인, 운동하는여자, 운동하는남자

 ** 요일별 해시태그 차등작용 : 123, 132, 213, 231, 211, 122, 223, 321

 

이렇게 한번 운영해보고 또 경고팝업이 뜨는지 확인해봐야겠다.

모든 것에는 알고리즘이 있고, 알고리즘이 있다면 어떤것이 봇인지 사람인지 구분하려고 할텐데

완전히 사람인척은 할 수 없지만 최대한 사람인척하는 봇을 구현해보자

Posted by 유영훈
,