尝试了许多解决方案之后,我终于设法在Windows机器上打开Tor浏览器:
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary(r"C:\Program Files\Tor Browser\Browser\firefox.exe")
profile = webdriver.FirefoxProfile("C:\Program Files\Tor Browser\Browser\TorBrowser\Data\Browser\profile.default")
profile.set_preference('network.proxy.type', 1)
profile.set_preference('network.proxy.socks', '127.0.0.1')
profile.set_preference('network.proxy.socks_port', 9050)
driver = webdriver.Firefox(executable_path=r"geckodriver.exe", firefox_binary=binary)
driver.get("http://httpbin.org/ip")
尽管它还没有完全自动化,因为我必须先手动启动Tor浏览器才能使它工作。
现在面临的挑战是在Tor中自动生成新的身份,为此,我设法获得了另一个对我有用的解决方案,例如:
import requests
from stem import Signal
from stem.control import Controller
def get_tor_session():
session = requests.session()
session.proxies = {'http': 'socks5://127.0.0.1:9050', 'https': 'socks5://127.0.0.1:9050'}
return session
def renew_connection():
with Controller.from_port(port = 9051) as controller:
controller.authenticate(password="tor12345")
controller.signal(Signal.NEWNYM)
session = get_tor_session()
print("Tor IP: ",session.get("http://httpbin.org/ip").text)
print("Primary Ip: ",requests.get("http://httpbin.org/ip").text)
renew_connection()
session = get_tor_session()
print("Tor New Ip: ",session.get("http://httpbin.org/ip").text)
这里使用Tor Bundle,还必须先从tor bundle文件夹中手动运行tor.exe文件,然后它才能工作。
我想使用硒生成新的身份,因为我想抓取具有javascript,单击按钮等的动态网页,据我所知,我认为使用请求库是不可能的!
任何建议都将受到高度赞赏!