PhantomJs无法通过socks5代理访问重定向网址

时间:2015-09-12 02:56:28

标签: redirect phantomjs tor socks

我正在使用PhantomJs编写一个脚本,使用socks5代理(for tor)来访问重定向到其他网址的网址,但是无法执行此操作。

但是当我访问没有代理的同一个网址时,它就成功了。

另外,当我访问其他一些不重定向的网址时,比如whatismyipaddress.com通过socks5代理,它就是成功的。

任何想法为什么当我结合socks5代理并访问重定向网址时,它没有发生,是否有任何解决方法?

感谢。

1 个答案:

答案 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)软件包,那么以下工作:

  1. 确保在Python 3.x上使用pip install SocksPypip3 install SocksPy安装了SocksPy软件包。
  2. 导入所有内容:import socks, socket
  3. 请参阅此处提供的此示例代码,它将您的连接和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()默认使用您刚设置的代理。

  4. 我希望这两个选项都能帮助您指明正确的方向。一旦您澄清了您面临的确切设置和问题,我就可以更新。