【发布时间】:2018-06-06 18:19:39
【问题描述】:
我想在一个函数中启动一个带有特定设置(privoxy、Tor、randon 用户代理...)的 selenium 浏览器,然后在我的代码中调用这个函数。我创建了一个 python 脚本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 会改变。
为什么?返回浏览器有问题吗?我该如何解决这个问题?
实际上,情况要复杂一些。当我在调用mybrowser.set_new_ip() 和wait of 12 sec(参见下面的行)之前和之后连接到https://check.torproject.org 时,网页提供的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
Tor 配置:在torcc,我有这个:
ControlPort 9051
HashedControlPassword : xxxx
【问题讨论】:
-
browser.refresh()在browser.get("https://canihazip.com/s")之后是否影响报告的IP? -
browser.refresh()不影响结果(我在browser.get("https://canihazip.com/s")之后尝试过,也只是在mybrowser.set_new_ip()之后尝试过)。 -
好的,如何重新创建浏览器实例 -
browser.close(),然后再次创建browser= mybrowser.start_browser()和browser.get("https://canihazip.com/s")? -
另外,如果可能,请发布您的 privoxy+tor 配置。谢谢。
-
这个问题的标题并不代表真正的问题。
标签: python selenium return phantomjs definition