25

HTTP プロキシ経由でリクエストをルーティングする方法を見つけようとしています。

次のようにwebdriverを初期化しています:

user_agent = 'my user agent 1.0'
DesiredCapabilities.PHANTOMJS['phantomjs.page.settings.userAgent'] = user_agent
driver = webdriver.PhantomJS()

私はドキュメントとソースを調べましたが、webdriver を介して phantomjs でプロキシ サーバーを使用する方法を見つけることができないようです。

助言がありますか?

4

5 に答える 5

6

少し掘り下げたところ、機能があることがわかりましたが、公開されていません。そのため、パッチを当てるには便利なモンキー レンチが必要です。この機能が webdriver 呼び出しで完全に公開されるまで、私にとって有効なソリューションを次に示します。

編集: service_args が公開されたようです。プロキシを使用するために Selenium にモンキー パッチを適用する必要はもうありません。使用方法については、@alex-czech の回答を参照してください。

from selenium import webdriver
from selenium.webdriver.phantomjs.service import Service as PhantomJSService

phantomjs_path = '/usr/lib/node_modules/phantomjs/lib/phantom/bin/phantomjs'
# monkey patch Service temporarily to include desired args
class NewService(PhantomJSService):
    def __init__(self, *args, **kwargs):
        service_args = kwargs.setdefault('service_args', [])
        service_args += [
            '--proxy=localhost:8080',
            '--proxy-type=http',
        ]
        super(NewService, self).__init__(*args, **kwargs)
webdriver.phantomjs.webdriver.Service = NewService
# init the webdriver
self.driver = webdriver.PhantomJS(phantomjs_path)
# undo monkey patch
webdriver.phantomjs.webdriver.Service = PhantomJSService

次の設定も役立ちます。特に、読み込みに非常に時間がかかるプロキシを使用している場合に役立ちます。

max_wait = 60
self.driver.set_window_size(1024, 768)
self.driver.set_page_load_timeout(max_wait)
self.driver.set_script_timeout(max_wait)
于 2013-03-29T08:01:12.813 に答える
5

以下は、Ruby の Webdriver で同じことを行う方法です。ソースコードを掘り下げるまで、オンラインのどこにもこれを見つけることができませんでした:

phantomjs_args = [ '--proxy=127.0.0.1:9999', '--proxy-type=socks5']
phantomjs_caps = { "phantomjs.cli.args" => phantomjs_args }
driver = Selenium::WebDriver.for(:phantomjs, :desired_capabilities => phantomjs_caps)
于 2015-03-21T13:40:57.217 に答える
0

PhantomJS は、ドキュメントを更新せずに CLI 引数を更新しました。プロキシ タイプは、次のようにプロキシ アドレスに含める必要があります。

service_args = ['--proxy=http://0.0.0.0:0']
driver = webdriver.PhantomJS(service_args=service_args)
于 2021-01-19T20:07:10.883 に答える