我正在使用PhantomJs编写一个脚本,使用socks5代理(for tor)来访问重定向到其他网址的网址,但是无法执行此操作。
但是当我访问没有代理的同一个网址时,它就成功了。
另外,当我访问其他一些不重定向的网址时,比如whatismyipaddress.com通过socks5代理,它就是成功的。
任何想法为什么当我结合socks5代理并访问重定向网址时,它没有发生,是否有任何解决方法?
感谢。
答案 0 :(得分:1)
如果这是用Python编写并使用Selenium& PhantomJS:
我首先导入Selenium并通过npm在节点中安装PhantomJS,就像我从this answer粘贴的示例一样。 (npm -g install phantomjs
)然后:
使用Selenium的示例
from selenium import webdriver
service_args = [
'--proxy=127.0.0.1:9050',
'--proxy-type=socks5',
]
driver = webdriver.PhantomJS('../path_to/phantomjs',service_args=service_args)
driver.set_window_size(1024, 768) # optional
driver.get('https://google.com/')
driver.save_screenshot('screen.png') # save a screenshot to disk
sbtn = driver.find_element_by_css_selector('button.gbqfba')
sbtn.click()
否则,如果您想尝试使用urllib(Python 3)或urllib2(Python 2.7x)软件包,那么以下工作:
pip install SocksPy
或pip3 install SocksPy
安装了SocksPy软件包。 import socks, socket
请参阅此处提供的此示例代码,它将您的连接和DNS查找绑定在一起以通过socks连接:
设置TOR连接
SOCKS_PORT = 9050
设置socks代理并包装url lib模块
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', SOCKS_PORT)
socket.socket = socks.socksocket
通过套接字执行DNS解析
def getaddrinfo(*args):
return [(socket.AF_INET, socket.SOCK_STREAM, 6,'', (args[0], args[1]))]
socket.getaddrinfo = getaddrinfo
然后,您构建的任何urllib.request()默认使用您刚设置的代理。
我希望这两个选项都能帮助您指明正确的方向。一旦您澄清了您面临的确切设置和问题,我就可以更新。