Django и Selenium парсер (с авторизацией)
Как вернуть в функцию WebDriver? повторно не вызывая функцию login.
task.py
def login(url):
driver = webdriver.Chrome(service=service,options=options)
driver.maximize_window()
driver.get(url)
driver.find_element(By.ID,"login").send_keys(LOGIN)
driver.find_element(By.ID,"password").send_keys(PASSWORD)
driver.find_element(By.ID,'bind').click()
return driver
def form_fill(url_pars,driver,name_flat):
driver.get(url_pars)
driver.find_element(By.ID,"epd_field").click()
codplat=driver.find_element(By.CLASS_NAME,"home_right").text
driver.find_element(By.XPATH,'//span[contains(text(),"name_flat}")]'.
format( name_flat)).click()
driver.find_element(By.CLASS_NAME,"js-find-btn").click()
driver.find_element(By.CLASS_NAME,"js-more-btn").click()
driver.find_element(By.CLASS_NAME,"btn-close-pop").click()
return [driver,codplat]
views.py
class AuthView(TemplateView):
template_name="mos_sel/login.html"
def get_context_data(self, **kwargs) :
context=super().get_context_data(**kwargs)
auth=AuthView(login(URL_LOGIN)) # в auth =WebDriver
return context
class PaymentListView(ListView):
template_name='mos_sel/parse_list.html'
model=Flat
context_object_name='fields'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['name_flat']=Flat.objects.get(pk=self.kwargs['pk']).name_flat
# Как передать в функцию WebDriver = auth ???
forma_fill=form_fill(GET_USLUGA_URL,auth,context['name_flat'].upper())
return context
login.html
{% extends "base.html" %}
{% block content %}
<h3>Войти в личный кабинет на mos.ru</h3>
<a href="{% url 'AuthView' %}"><button type="button" class="btn-success">Войти</button></a>
{% endblock content %}
parse_list.html
{% extends "base.html" %}
{% block sidebar %}
<h5>{{name_flat}}</h5>
{% for field in fields %}
{{field.cod_platelshika}}
{{field.period_oplaty}}
{{field.summa}}
{% endfor %}
{% endblock sidebar %}
Божечки…
Да просто выведи driver за функцию login()
и передавай в неё параметр также как это делается для form_fill()
.
А сам driver вызывай там, где идёт вызов функций.
⛔ Стоп. А зачем в views.py
вызывать selenium? В чём смысл? Тесты делаются немного не так.