web-dev-qa-db-ja.com

Selenium chromedriver pythonで認証付きのプロキシを設定する方法

1つのWebサイトをクロールしてデータを収集するスクリプトを作成していますが、問題は、リクエストが多すぎるとブロックされてしまうことですが、プロキシを使用すると、現在よりも多くのリクエストを送信できます。プロキシをchromeオプション_--proxy-server_と統合しました

options.add_argument('--proxy-server={}'.format('http://ip:port'))

しかし、私は有料のプロキシを使用しているため、認証が必要であり、以下のスクリーンショットのように、ユーザー名とパスワードの警告ボックスが表示されます

Selenium proxy authentication alert box それから私はユーザー名とパスワードでそれを使用しようとしました

options.add_argument('--proxy-server={}'.format('http://username:password@ip:port'))

しかし、それも機能していないようです。私は解決策を探していて、解決策の下に見つけ、chrome extension proxy auto auth を使用し、chromeを使用せずに拡張

_proxy = {'address': settings.PROXY,
             'username': settings.PROXY_USER,
             'password': settings.PROXY_PASSWORD}

capabilities = dict(DesiredCapabilities.CHROME)
capabilities['proxy'] = {'proxyType': 'MANUAL',
                             'httpProxy': proxy['address'],
                             'ftpProxy': proxy['address'],
                             'sslProxy': proxy['address'],
                             'noProxy': '',
                             'class': "org.openqa.Selenium.Proxy",
                             'autodetect': False,
                             'socksUsername': proxy['username'],
                             'socksPassword': proxy['password']}
options.add_extension(os.path.join(settings.DIR, "extension_2_0.crx")) # proxy auth extension
_

上記のコードの後、プロキシ認証アラートが消え、IPをググリングしてIPをチェックしたところ、IPが機能していないことが確認されたため、上記のどちらも正しく機能していないようです。

chromedriverでプロキシサーバーを認証するのを手伝ってくれる人は誰でもください。

6
itsmnthn

Seleniumのオプションを変更したり、ファイルをchromedriverにアップロードしたりする必要のない、素早くクリエイティブなソリューションを次に示します。 pyautogui(pythonパッケージを使用できます)を使用してプロキシ認証の詳細を入力します。また、スレッド化を使用してchrome認証ポップアップを説明しますそうでなければスクリプトを一時停止するウィンドウ。

import time
from threading import Thread
import pyautogui
from Selenium.webdriver.chrome.options import Options
from Selenium import webdriver

hostname = "Host_NAME"
port = "PORT"
proxy_username = "USERNAME"
proxy_password = "PASSWORD"

chrome_options = Options()
chrome_options.add_argument('--proxy-server={}'.format(hostname + ":" + port))
driver = webdriver.Chrome(options=chrome_options)


def enter_proxy_auth(proxy_username, proxy_password):
    time.sleep(1)
    pyautogui.typewrite(proxy_username)
    pyautogui.press('tab')
    pyautogui.typewrite(proxy_password)
    pyautogui.press('enter')


def open_a_page(driver, url):
    driver.get(url)


Thread(target=open_a_page, args=(driver, "http://www.example.com/")).start()
Thread(target=enter_proxy_auth, args=(proxy_username, proxy_password)).start()

注:深刻なプロジェクトやテストスイートについては、より堅牢なソリューションを選択することをお勧めします。ただし、実験を行っているだけで、迅速かつ効果的なソリューションが必要な場合は、これはオプションです。

1
Danny Blaker

途中、アップデートでは、拡張機能を使用したソリューションは機能しません(少なくともWindows)。一方、MacとLinuxは機能します。私はそれが拡張機能を備えた最後の作業バージョンであるchromedriver v2.44だったと思います

1
Virmagnus