홈>
함수에서 특정 설정 (privoxy, Tor, randon 사용자 에이전트 ...)으로 셀레늄 브라우저를 시작한 다음이 함수를 내 코드에서 호출하고 싶습니다. 나는 파이썬 스크립트
mybrowser.py
를 만들었습니다.
이 안에 :
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from fake_useragent import UserAgent
from stem import Signal
from stem.control import Controller
class MyBrowserClass:
def start_browser():
service_args = [
'--proxy=127.0.0.1:8118',
'--proxy-type= http',
]
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = (UserAgent().random)
browser = webdriver.PhantomJS(service_args = service_args, desired_capabilities=dcap)
return browser
def set_new_ip():
with Controller.from_port(port=9051) as controller:
controller.authenticate(password=password)
controller.signal(Signal.NEWNYM)
그런 다음 다른 스크립트
myscraping.py
로 가져옵니다.
이 안에 :
import mybrowser
import time
browser= mybrowser.MyBrowserClass.start_browser()
browser.get("https://canihazip.com/s")
print(browser.page_source)
mybrowser.MyBrowserClass.set_new_ip()
time.sleep(12)
browser.get("https://canihazip.com/s")
print(browser.page_source)
브라우저가 작동 중입니다-페이지에 액세스하여
.page_source
로 검색 할 수 있습니다
.
그러나 IP는 첫 번째 인쇄와 두 번째 인쇄간에 변경되지 않습니다.
myscraping.py
내에서 함수의 내용을 옮기면
(가져 오기 + 함수 호출 제거) 그런 다음 IP가 변경됩니다.
왜? 브라우저를 반환하는 데 문제가 있습니까? 이 문제를 어떻게 해결할 수 있습니까?
<시간> 실제로 상황은 조금 더 복잡합니다.https://check.torproject.org
에 연결하면
mybrowser.set_new_ip()
에 전화하기 전과 후에
그리고
wait of 12 sec
(아래 줄 참조) 웹 페이지에서 제공 한 IP는 첫 번째 통화와 두 번째 통화 사이에서 변경됩니다. 그래서 내 IP는 (Tor에 따라) 변경되었지만
https://httpbin.org/ip
는 아닙니다.
또는
icanhazip.com
IP의 변화를 감지합니다.
...
browser.get("https://canihazip.com/s")
print(browser.page_source)
browser.get("https://check.torproject.org/")
print(browser.find_element_by_xpath('//div[@class="content"]').text )
mybrowser.set_new_ip()
time.sleep(12)
browser.get("https://check.torproject.org/")
print(browser.find_element_by_xpath('//div[@class="content"]').text )
browser.get("https://canihazip.com/s")
print(browser.page_source)
인쇄 된 IP는 다음과 같습니다 :
42.38.215.198 (canihazip before mybrowser.set_new_ip() )
42.38.215.198 (check.torproject before mybrowser.set_new_ip() )
106.184.130.30 (check.torproject after mybrowser.set_new_ip() )
42.38.215.198 (canihazip after mybrowser.set_new_ip())
<시간>
Privoxy 구성 :
C:\Program Files (x86)\Privoxy\config.txt
, 나는이 줄의 주석을 해제했습니다 (9050은 Tor가 사용하는 포트입니다) :
forward-socks5t / 127.0.0.1:9050
토어 구성 :
torcc
, 나는 이것을 가지고있다 :
ControlPort 9051
HashedControlPassword : xxxx
- 답변 # 1
- 답변 # 2
새로운 님이 있는지 확인해야 할 수도 있습니다.
is_newnym_available-토르가 현재 NEWNYM 신호를 수락하면 true
UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
관련 자료
- python - 브라우저를 열 때 Selenium에서 Tor를 열면 오류가 발생합니다
- nginxconf의 return 문이 렌더링 할 실제 파일 대신 일반 텍스트 파일 위치를 브라우저에 반환하는 이유는 무엇입니까?
- 브라우저 자동화 셀레늄 파이썬 - 지금 가입 할 요소를 찾을 수 없음 google meet
- python - 로봇 창이 아닌 사용자 모드에서 Selenium 브라우저를 여는 방법
- java - selenium WebDriver UrlChecker $TimeoutException, 브라우저를 연 다음 링크로 이동하지 않음
- python - Google Cloud Platform 가상 머신에서 Selenium을 가져 오는 방법은 무엇입니까?
- 헤드리스 브라우저로 셀레늄 파이썬을 실행하는 방법
- python - Selenium에서 브라우저 세션을 어떻게 저장합니까?
- 셀레늄 C #의 Chromium Edge 브라우저에서 IE 모드를 활성화하는 방법은 무엇입니까?
- Firefox - firefox - 셀레늄으로 브라우저 프레임 숨기기
- Selenium IDE Browser Extension을 통해 2 개의 탭을 동시에 열 수 있습니까?
- java - 스프링 rest 엔드 포인트에서 웹 브라우저/프론트 엔드 응용 프로그램 (예 - angular 6)으로 flux 을 반환하는 방법이 있습니까?
- Python에서 VS Code가 셀레늄 브라우저 인스턴스를 자동으로 종료하지 못하게하려면 어떻게해야합니까?
- Capybara Selenium은 새 창을 여는 대신 기존 브라우저 세션을 재사용합니까?
관련 질문
- python : 셀레늄 파이썬에서 어설션 오류를 발생시킨 후 실행을 계속하는 방법
- python : Selenium TypeError: __init__()에 예기치 않은 키워드 인수 'service'가 있습니다. 이 경우 왜?
- python : text() 명령을 사용한 셀레늄 문자열 문제
- python : HTML 범위 내 동적 aria-label의 값 나열
- python : 완전한 Xpath를 만들기 위해 연결할 다른 수의 따옴표가 있지만 오류가 발생합니다.
- python : 헤드리스 모드에서 파일을 다운로드하는 Selenium 스크립트
- python : EXE는 숨겨진 셀레늄 콘솔을 표시합니다.
- python : 루프 내부에서 생성된 변수를 호출할 때 빈 목록을 반환하는 for 루프
- python : 클릭 버튼이 없는 경우 웹 스크래핑으로 페이지 매김으로 진행하는 방법
- python : 파이썬을 설치하는 설치 프로그램을 어떻게 만들 수 있습니까?
이것은 PhantomJS가 요청 된 컨텐츠의메모리 캐시를 유지하기 때문에아마입니다. 따라서 PhantomJS 브라우저를 사용한 첫 번째 방문은 동적 결과를 가져올 수 있지만 결과는 캐시되고 연속 된 각 방문은 해당 캐시 된 페이지를 사용합니다.
이메모리 캐시는
CSRF-Token
와 같은 문제를 일으켰습니다. 새로 고침시 변경되지 않으며 문제의 근본 원인이라고 생각합니다. 이 문제는 2013 년에 제시되어 해결되었지만 해결책은clearMemoryCache
입니다. , PhantomJS의WebPage
에서 발견 수업. 슬프게도, 우리는 셀레늄webdriver.PhantomJS
를 다루고 있습니다 인스턴스.따라서 내가 감독하지 않는 한 Selenium의 추상화를 통해이 방법에 액세스하는 것은 어렵습니다.
PhantomJS와 같은메모리 캐시가없는 다른 웹 드라이버를 사용하는 것이 적절하다고 생각합니다. Chrome을 사용하여 테스트했으며 완벽하게 작동합니다.
또한, Selenium은 PhantomJS를 단계적으로 폐지하고 있습니다 :
와이즈 비즈 와이즈 비즈