Как включить встроенный VPN в OperaDriver? - PullRequest
5 голосов
/ 13 марта 2019

Браузер Opera имеет встроенный VPN, который позволяет скрывать ваш IP во время просмотра. Мой вопрос: можно ли включить VPN при использовании OperaDriver с селеном в python?

Попытка и проблема в деталях:

У меня есть этот скрипт, который отправляется на веб-сайт для отображения моего IP-адреса.

from selenium import webdriver
from selenium.webdriver.opera.options import Options
from time import sleep
driver = webdriver.Opera(executable_path=r'/path/to/operadriver')
driver.get('https://whatismyipaddress.com')
sleep(10)
driver.quit() 

Когда я захожу на этот сайт в браузере Opera с включенной VPN, мой IP-адрес маскируется, и отображается какой-то другой IP-адрес. Но мой скрипт открывает браузер для отображения моего реального IP-адреса.

Я искал почти все вопросы по OperaDriver на SO, а также на других сайтах. Кажется, нет абсолютно никакой документации или каких-либо других вопросов, связанных с этим где-либо.

Самым близким, что я получил, был запрос этой функции на github . ОП говорит, что ему удалось заставить его работать с помощью OperaOptions для загрузки пользовательского профиля. Код, указанный в ссылке:

OperaOptions operaOptions = new OperaOptions();
operaOptions.addArguments("user-data-dir", "~/Library/Application Support/com.operasoftware.Opera");
driver = new OperaDriver(operaOptions);

Я пытался сделать это на python, но ничего не получилось. Если это вызывает озабоченность, я использую Ubuntu 16.04, и OperaDriver загружается с официальной страницы github . Версия Python 3.6.7, а версия Opera - 57.0.3098.116 для Ubuntu 16.04 LTS (x86_64; Unity).

Ответы [ 2 ]

4 голосов
/ 17 марта 2019

Вы пытаетесь использовать OperaOptions, а не ChromeOptions, с https://seleniumhq.github.io/selenium/docs/api/py/webdriver_opera/selenium.webdriver.opera.webdriver.html

опции: это берет экземпляр ChromeOptions

Как говорит Каккао

"включить VPN из графического интерфейса, и настройки были сохранены в активном профиль. "

from selenium import webdriver
from time import sleep

# The profile where I enabled the VPN previously using the GUI.
opera_profile = '/home/dan/.config/opera' 
options = webdriver.ChromeOptions()
options.add_argument('user-data-dir=' + opera_profile)
driver = webdriver.Opera(options=options)
driver.get('https://whatismyipaddress.com')
sleep(10)
driver.quit()

Результаты:

First try
IPv6: 2001:67c:2660:425:2:0:0:3f8
IPv4: 77.111.247.26

Second try
IPv6: 2001:67c:2660:425:1a:0:0:1a0
IPv4: 77.111.247.66

Third try
IPv4: 77.111.247.133
IPv6: Not detected

Forth try
IPv6: 2001:67c:2660:425:1c:0:0:1fe
IPv4: 77.111.247.68

Ни один из них не является моим IP, а рядом с адресной строкой отображается значок VPN.

ОБНОВЛЕНО в ответ на вопрос.

С https://techdows.com/2016/08/opera-profile-location.html

Простой способ узнать путь к профилю Opera - просто набрать about: // about в адресной строке и проверьте строку профиля под пути.

В Windows 10 код выглядит следующим образом.

from selenium import webdriver
from time import sleep

# The profile where I enabled the VPN previously using the GUI.
opera_profile = r'C:\\Users\\dan\\AppData\\Roaming\\Opera Software\\Opera Stable' 
options = webdriver.ChromeOptions()
options.add_argument('user-data-dir=' + opera_profile)
options._binary_location = r'C:\\Users\\dan\\AppData\\Local\\Programs\Opera\\58.0.3135.114\\opera.exe'
driver = webdriver.Opera(executable_path=r'C:\\operadriver_win64\\operadriver.exe',options=options)
driver.get('https://whatismyipaddress.com')
sleep(10)
driver.quit()
1 голос
/ 17 марта 2019

@ Dan-Dev дал отличный ответ и позволяет вам включить VPN без какого-либо ручного вмешательства.

Я хотел бы поделиться альтернативным методом, который я пробовал в то же время.Это требует ручного вмешательства для включения VPN.Учитывайте это только в том случае, если принятый ответ не работает для вас.

ШАГИ

  • Сначала перейдите на страницу настроек конфиденциальности Opera на opera://settings/privacy.
  • Дайтевремя ожидания, чтобы разрешить ручное вмешательство.
  • Прокрутите вниз и нажмите кнопку Включить VPN.

enter image description here

  • Продолжите с остальными вашими действиями / логикой.

Код:

from selenium import webdriver
from time import sleep
driver = webdriver.Opera(executable_path=r'path/to/operadriver')
driver.get('opera://settings/privacy')
sleep(30) #use this sleep to maually enable the VPN
#The rest of your logic goes below 
#I am just checking my address from a different url
driver.get('https://whatismyipaddress.com')
driver.quit() 

Результат:

enter image description here

Это не мой IP-адрес.Так что это тоже будет работать.

Примечание

Я пытался нажать эту кнопку с селеном, но безуспешно в моей попытке.Просмотр источника страницы с помощью driver.page_source дал мне что-то вроде этого

<dom-module id="settings-startup-url-dialog" assetpath="on_startup_page/" css-build="shadow">
  <template>
    <style include="settings-shared" scope="settings-startup-url-dialog"></style>
    <cr-dialog id="dialog" close-text="Close">
      <div slot="title">[[dialogTitle_]]</div>
      <div slot="body">
        <cr-input id="url" label="Site URL" value="{{url_}}" on-input="validate_" spellcheck="false" maxlength="[[urlLimit_]]" invalid="[[hasError_(error_)]]" autofocus="" error-message="[[errorMessage_('Invalid URL',&#10;                'Please enter a shorter URL', error_)]]">
        </cr-input>
      </div>
      <div slot="button-container">
        <paper-button class="cancel-button" on-click="onCancelTap_" id="cancel">Cancel</paper-button>
        <paper-button id="actionButton" class="action-button" on-click="onActionButtonTap_">[[actionButtonText_]]</paper-button>
      </div>
    </cr-dialog>
  </template>
  </dom-module>

Я не смог автоматизировать эту кликающую часть, но работает иначе.Я обновлю этот ответ, если смогу.

...