Javascript 如何在django中的视图之间传递对象? 背景故事/问题

Javascript 如何在django中的视图之间传递对象? 背景故事/问题,javascript,python,django,ajax,selenium-chromedriver,Javascript,Python,Django,Ajax,Selenium Chromedriver,我有一个运行各种作业的web应用程序。其中一项工作包括运行登录到linkedin的python脚本 当我运行脚本时,headless chromium的一个实例启动,导航到linkedin登录页面并提交正确的凭据。到目前为止一切正常,但有时linkedin会将我的请求发送到检查点url,并提示我在继续之前提交一个特殊的pincode发送到我的电子邮件 在我看来,我很难理解如何实现这个条件逻辑基本上,我希望有一种方法可以在我的web应用程序中输入pincode。 预期结果 从django视图运行脚

我有一个运行各种作业的web应用程序。其中一项工作包括运行登录到linkedin的python脚本

当我运行脚本时,headless chromium的一个实例启动,导航到linkedin登录页面并提交正确的凭据。到目前为止一切正常,但有时linkedin会将我的请求发送到检查点url,并提示我在继续之前提交一个特殊的pincode发送到我的电子邮件

在我看来,我很难理解如何实现这个条件逻辑基本上,我希望有一种方法可以在我的web应用程序中输入pincode。

预期结果 从django视图运行脚本登录到linkedin,如果达到检查点,则提示用户输入pincode,否则,如果未达到检查点且登录成功,则继续

我试过的
  • 谷歌-找不到任何特定于我的问题

  • 下面的代码-下面的视图显示了我当前的尝试。我知道这是可以做到的,但我不确定是否应该尝试在单个视图中构建它,或者是否应该尝试将chromium实例传递给另一个视图(对象不可序列化,因此我不确定如何实现;也许我可以将chromium id传递给我的webdriver的另一个实例,但我认为这不是最好的方法?)

  • 阿贾克斯我还没有试过,但我知道这是一个选择

注释** 我下面包含的代码就是一切。但考虑的唯一重要部分是视图,我想添加其余部分可能会澄清逻辑,并帮助别人帮助我。希望这不会太冗长

看法 模板

{% extends 'base.html' %}
{% load crispy_forms_tags %}

{% block content %}
  {% crispy form %}
{% endblock %}
Webscraper后端

class LinkedinScraper(WebScraper):
    """Class for logging into linkedin with chromedriver and scraping linkedin"""

    def __init__(self, headless=True, **kwargs):
        super(LinkedinScraper, self).__init__()
        self.setup_driver(headless=headless)
        self.data = {}
        self.pause = 10
        self.retries = 0
        self.max_retries = 3

    def login_to_linkedin(self, username: str, password: str) -> bool:
        """ Navigates to Linkedin login page and logs in with credentials"""
        login_url = "https://www.linkedin.com/login"
        self.driver.get(login_url)
        user_element = self.driver.find_element("id", "username")
        pass_element = self.driver.find_element("id", "password")
        login_btn = self.driver.find_element_by_class_name(
            "login__form_action_container"
        )
        self.login_and_authenticate(login_btn, user_element, pass_element, username, password)
        if 'checkpoint' in self.driver.current_url:
            return False
        else:
            return True

    def authenticate_linkedin_login(self, pin_code: str):
        """ Sometimes when logging into linkedin from a new ip address, linkedin will flag account for suscipicous access
        If this happens we need to use a pin code sent to email and input it into the form.

        This should be immedidately called after login_and_authenticate returns False
        """
        if 'checkpoint' in self.driver.current_url:
            verification_element = self.driver.find_element_by_xpath("//input[@id='input__email_verification_pin']")
            print(pin_code)
            self.random_send_keys(element=verification_element, keys=pin_code)
            submit_element = self.driver.find_element("id", "email-pin-submit-button")
            submit_element.click()
            return True
        else:
            raise BaseException(f"Driver not on correct url, current url is {self.driver.current_url} -- Should contain checkpoint")

有两种方法可以解决这个问题。 一种方法是在视图之外创建对象实例,这有点像黑客,而且完全不可伸缩,但我能够通过webrowser验证我的电子邮件帐户selenium。我不必在视图之间传递对象,因为它是全局的

第二种方法是不使用硒。这就是我最后做的。
如果有人对这种方法感兴趣,请给我留言或查看Pypetteer

有两种方法可以解决这个问题。 一种方法是在视图之外创建对象实例,这有点像黑客,而且完全不可伸缩,但我能够通过webrowser验证我的电子邮件帐户selenium。我不必在视图之间传递对象,因为它是全局的

第二种方法是不使用硒。这就是我最后做的。
如果有人对这种方法感兴趣,请给我留言或查看Pypetteer

嗨,欢迎来到SO!请将问题限制在一个特定的问题上,并提供足够的详细信息,以确定适当的答案。避免同时问多个不同的问题。请参阅页面以获得澄清此问题的帮助。感谢您的反馈,但我不是新来的。我只是没有足够的理解我的问题,以便简明扼要地识别它;如果我问了,我肯定不会问这样的问题。嗨,欢迎来到SO!请将问题限制在一个特定的问题上,并提供足够的详细信息,以确定适当的答案。避免同时问多个不同的问题。请参阅页面以获得澄清此问题的帮助。感谢您的反馈,但我不是新来的。我只是没有足够的理解我的问题,以便简明扼要地识别它;如果我问了,我肯定不会问这样的问题。
{% extends 'base.html' %}
{% load crispy_forms_tags %}

{% block content %}
  {% crispy form %}
{% endblock %}
class LinkedinScraper(WebScraper):
    """Class for logging into linkedin with chromedriver and scraping linkedin"""

    def __init__(self, headless=True, **kwargs):
        super(LinkedinScraper, self).__init__()
        self.setup_driver(headless=headless)
        self.data = {}
        self.pause = 10
        self.retries = 0
        self.max_retries = 3

    def login_to_linkedin(self, username: str, password: str) -> bool:
        """ Navigates to Linkedin login page and logs in with credentials"""
        login_url = "https://www.linkedin.com/login"
        self.driver.get(login_url)
        user_element = self.driver.find_element("id", "username")
        pass_element = self.driver.find_element("id", "password")
        login_btn = self.driver.find_element_by_class_name(
            "login__form_action_container"
        )
        self.login_and_authenticate(login_btn, user_element, pass_element, username, password)
        if 'checkpoint' in self.driver.current_url:
            return False
        else:
            return True

    def authenticate_linkedin_login(self, pin_code: str):
        """ Sometimes when logging into linkedin from a new ip address, linkedin will flag account for suscipicous access
        If this happens we need to use a pin code sent to email and input it into the form.

        This should be immedidately called after login_and_authenticate returns False
        """
        if 'checkpoint' in self.driver.current_url:
            verification_element = self.driver.find_element_by_xpath("//input[@id='input__email_verification_pin']")
            print(pin_code)
            self.random_send_keys(element=verification_element, keys=pin_code)
            submit_element = self.driver.find_element("id", "email-pin-submit-button")
            submit_element.click()
            return True
        else:
            raise BaseException(f"Driver not on correct url, current url is {self.driver.current_url} -- Should contain checkpoint")