2016-01-24 3 views
-1

Я пытаюсь получить доступ к атрибутам экземпляра класса, которые определены внутри другого класса, но я продолжаю получать ошибку, в которой говорится, что атрибут «получить» отсутствует.Как я могу получить атрибуты экземпляра класса

from selenium import webdriver 

class Driver: 
    proxy = [1, 2, 4] 

    def get_driver(self): 
     driver = webdriver.Firefox() 
     if self.proxy[0] == 1: 
      return self 

driver = Driver() 
driver.get_driver() 
driver.get("https://www.youtube.com/watch?v=5xxQs34UMx4&index=101&list=PLihUZHHwjm2GtO_ikMyDg7ot1ENmmYodL") 
print driver.proxy 
+1

Как это должно работать? У вашего класса 'Driver' нет метода' get'. – L3viathan

+1

Я не понимаю, почему должен быть атрибут '.get' в экземпляре' Driver'. Он не наследует какой-либо другой класс, и только определенные атрибуты, которые я вижу, это 'get_driver' и' proxy'. –

+0

Вы, возможно, хотите '__getattribute__' (или простую точечную нотацию), но, поскольку он стоит, вопрос неясен, ваш url будет незаконным именем для атрибута. – timgeb

ответ

0

Driver Ваш класс, вероятно, следует назвать DriverFactory или что-то подобное. Тогда ваш код будет выглядеть более читаемым:

class DriverFactory(object): 
    proxy = [1, 2, 4] 

    def get_driver(self): 
     driver = webdriver.Firefox() 
     if self.proxy[0] == 1: 
      return driver 
     return None 

driver_factory = DriverFactory() 
driver = driver_factory.get_driver() 
driver.get("https://www.youtube.com/.....") 
print driver_factory.proxy 

Но это еще не делает чувство, что self.proxy часть предназначается, чтобы делать, и почему Самовозврат вещь была там в исходном коде?

+0

Я просто использовал его в качестве примера, я попытался вернуть self.driver и вернуть драйвер, и он говорит, что атрибут «драйвер» я просто хочу, чтобы он возвращал объект, который я может получить доступ к драйверу и списку или кортежу, что бы я не ввел в переменную класса. –

0

Я могу придумать несколько способов доступа атрибут экземпляра

  1. dir(obj)
  2. obj.__dict__
  3. с помощью ipython «s автозаполнения - в интерактивной оболочки, тип objвкладка
-1

Вы применяете .get к экземпляру драйвера. Попробуйте сделать instead-

my_driver = driver.get_driver() 
    my_driver.get("https://www.youtube.com/watchv=5xxQs34UMx4&index=101&list=PLihUZHHjm2GtO_ikMyDg7ot1ENmmYodL") 
    print driver.proxy` 
0

Я постараюсь сосредоточиться на ОСНОВАХ вы можете приспособить это ваши demand.I думают, что вы хотите автоматизировать выбор проксите в драйвере селена с помощью питона, вы можете попробовать, как

цен ниже
import random 
from selenium import webdriver 
from selenium.webdriver.common.proxy import * 

proxies = ["76.9.5.82:65335","45.55.179.51:80","192.99.38.42:35997","40.76.212.171:80","128.136.162.223:3128","104.238.138.253:80","163.153.8.130:1080","208.67.1.154:80","107.151.152.218:80","23.253.208.241:80","104.42.229.65:3128","23.239.134.14:80","46.231.133.106:80","97.77.104.22:80","54.68.135.82:80","178.62.247.158:3128","80.82.64.30:3128","107.151.152.210:80","92.222.93.240:8888","78.46.243.54:3128","69.36.65.214:1080","51.255.192.42:3128","159.122.253.8:3128","51.255.50.106:3128","207.91.10.234:8080","5.45.73.218:80","52.27.22.139:3128","45.63.69.40:8080","206.222.24.100:8080","163.44.119.72:8080"] 
def my_proxy(PROXY_HOST,PROXY_PORT): 
    fp = webdriver.FirefoxProfile() 
    # Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5 
    print PROXY_PORT 
    print PROXY_HOST 
    fp.set_preference("network.proxy.type", 1) 
    fp.set_preference("network.proxy.http",PROXY_HOST) 
    fp.set_preference("network.proxy.http_port",int(PROXY_PORT)) 
    fp.set_preference("general.useragent.override","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/4") 
    fp.update_preferences() 
    return webdriver.Firefox(firefox_profile=fp) 


driver = my_proxy(*random.choice(proxies).split(':')) 
driver.get('https://www.google.com.bd/?gws_rd=cr,ssl&ei=AAOlVoeHM4OtuQT84px4') 
print driver.page_source.encode('utf-8') 

Подтверждение: я позаимствовал какой-то код.

Смежные вопросы