使用Python请求从www.example.com URL从jquery获取login_token/login_id的值asp.net

b4qexyjb  于 2023-05-28  发布在  jQuery
关注(0)|答案(1)|浏览(257)

我怎么可能在使用Python请求提交之前获得login_token和login_id的值呢?

<script>
    jQuery(document).ready(
        function($) {
            $("#ibox_form").css("display", "block");
            $(".noscript").css("display", "none");

            try {
                var fpPromise = import("/r/build/js/tii/1dc0524e24cc01f176e3cec8bd0af1e1cb_gb_fp.js").then(FingerprintJS => FingerprintJS.load());
                fpPromise.then(fp => fp.get()).then(result => {
                    $("form[name='FormName']").append('<input name="browser_fp" type="hidden" value="'+result.visitorId+'" />');
                });
            } catch (e) {
                console.error(e);
            }

            $("form[name='FormName'] input[name='email']").focus();
            $("form[name='FormName']").submit(function(event) {

                if ($("input[name='login_id']").length !== 1 && $("input[name='login_token']").length !== 1) {
                    $("form[name='FormName']").append('<input name="login_id" type="hidden" value="150EA3F6-FA3F-11ED-A6EB-E4CE65535679" />');
                    $("form[name='FormName']").append('<input name="login_token" type="hidden" value="6a83d1773c3256d1a5d26dc597c68975e27ea46e" />');
                }

                var recaptcha = document.getElementById("g-recaptcha-response");
                if (recaptcha && recaptcha.value == "") {
                    var formIsValid = IP.control.AutoValidator.getFormValidator(document.FormName).isValid();
                    if (formIsValid) {
                        alert("You must check the box that proves you're not a robot.");
                        event.preventDefault();
                        return false;
                    }
                } else if (localStorage) {
                    localStorage.setItem("login.start", new Date().getTime().toString());
                }
            });
        }
    );
</script>

网址是asp.net-“https://www.turnitin.com/login_page.asp?lang=en_us“
这是我的Python代码:

with requests.Session() as s:
            data = {
                'email': username,
                'user_password': password,
            }
            s.headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36'
            url = "https://www.turnitin.com/login_page.asp?lang=en_us"
            res = s.post(url, data=data)
            html_text = res.text
            soup = BeautifulSoup(html_text, "lxml")
            print(soup.find('input', {'name': 'login_token'}))

我目前正在使用beautiful soup,但我无法获得login_id和login_token的值。顺便说一句,URL来自asp.net

zysjyyx4

zysjyyx41#

虽然您可以使用bs4定位并提取<script>标记,但您可能无法从中获取值,因为这是一个jQuery
但是,如果您只需要这些值,则可以使用re
例如,基于您的sample_html,尝试以下操作:

import re

login_id = re.compile(r"(?i)[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}")
login_token = re.compile(r"[0-9a-f]{40}")

print(login_id.search(sample_html).group())
print(login_token.search(sample_html).group())

这应该打印:

150EA3F6-FA3F-11ED-A6EB-E4CE65535679
6a83d1773c3256d1a5d26dc597c68975e27ea46e

把这些放在一起:

import re

import requests

with requests.Session() as s:
    data = {
        'email': username,
        'user_password': password,
    }
    s.headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ' \
                              'AppleWebKit/537.36 (KHTML, like Gecko) ' \
                              'Chrome/113.0.0.0 Safari/537.36'
    url = "https://www.turnitin.com/login_page.asp?lang=en_us"
    res = s.post(url, data=data)

login_id = re.compile(r"(?i)[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}")
login_token = re.compile(r"[0-9a-f]{40}")

print(login_id.search(res.text).group())
print(login_token.search(res.text).group())

相关问题