Python 3.x Python使用请求自动登录

Python 3.x Python使用请求自动登录,python-3.x,web-scraping,Python 3.x,Web Scraping,我在使用Python请求自动化以下站点的登录过程时遇到了一些问题: 其目的是在继续到登录页进行web抓取之前,填写并提交表单数据。我对刮削和python都是新手,所以如果这里有一个我完全忽略的明显错误,我深表歉意 我想我已经正确地识别了表单中的必要元素(使用元素id,我希望这是正确的答案) 表格: <form action="/pkmslogin.form" method="post" name="Public_index" id="Public_index" autocomplete

我在使用Python请求自动化以下站点的登录过程时遇到了一些问题:

其目的是在继续到登录页进行web抓取之前,填写并提交表单数据。我对刮削和python都是新手,所以如果这里有一个我完全忽略的明显错误,我深表歉意

我想我已经正确地识别了表单中的必要元素(使用元素id,我希望这是正确的答案)

表格:

<form action="/pkmslogin.form" method="post" name="Public_index" 
id="Public_index" autocomplete="off"> <input type="password" name="pass_dup" 
style="display:none">   

所有登录尝试都会失败,此外,重定向的页面似乎与web浏览器中使用错误用户名和密码显示的页面不同。如果您试图使用请求登录,我将非常感谢您提供有关本网站细节的直接答复。

。这段代码对我有用。我只使用了requests模块,没有使用selenium。执行此操作的方法基本上是使用开发工具检查浏览器发送的头和请求。我跟随youtube上的教程去了解它。我希望这对你有帮助。我也在尝试做一些与你相似的事情。所以,如果你有任何进展,请告诉我

import requests 
from bs4 import BeautifulSoup
headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'
}

login_data = {
    # 'pass_dup': '',
    'username': 'youruser',
    'password': 'password',
    # 'buttonName': '',
    'login-form-type': 'pwd'
}

with requests.Session() as s:
    url = 'https://www.smartmetertexas.com/pkmslogin.form'
    r = s.get(url, headers=headers)
    soup = BeautifulSoup(r.content, 'html.parser')
    r = s.post(url, data=login_data, headers=headers)
    print(r.content)

如果您试图使用请求登录。这段代码对我有用。我只使用了requests模块,没有使用selenium。执行此操作的方法基本上是使用开发工具检查浏览器发送的头和请求。我跟随youtube上的教程去了解它。我希望这对你有帮助。我也在尝试做一些与你相似的事情。所以,如果你有任何进展,请告诉我

import requests 
from bs4 import BeautifulSoup
headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'
}

login_data = {
    # 'pass_dup': '',
    'username': 'youruser',
    'password': 'password',
    # 'buttonName': '',
    'login-form-type': 'pwd'
}

with requests.Session() as s:
    url = 'https://www.smartmetertexas.com/pkmslogin.form'
    r = s.get(url, headers=headers)
    soup = BeautifulSoup(r.content, 'html.parser')
    r = s.post(url, data=login_data, headers=headers)
    print(r.content)

上面粘贴的元素没有任何用处。“表单数据”中大约有六个参数(使用chrome dev工具注意到)需要以编程方式填写以到达目标页面。您介意具体指出这些参数吗?这是基于function.js中定义的方法吗?Octoparse似乎完美地完成了这个过程;但是,我希望在我自己的服务器和脚本上执行所有这些操作。您指的是这些参数吗不。您知道如何捕获使用请求登录所需的参数吗?如果您认为可以通过检查该页面的元素来做到这一点,那么您就陷入了困境。您需要做的是了解
开发工具如何工作?一旦您了解到无需为
参数
数据
挖掘该页面的元素,您就可以很容易地从开发工具中获取它。谢谢。但是,如果您可以创建一个假凭证来登录,请将该信息粘贴到此处。我会试试看。你上面粘贴的元素没有用。“表单数据”中大约有六个参数(使用chrome dev工具注意到)需要以编程方式填写以到达目标页面。您介意具体指出这些参数吗?这是基于function.js中定义的方法吗?Octoparse似乎完美地完成了这个过程;但是,我希望在我自己的服务器和脚本上执行所有这些操作。您指的是这些参数吗不。您知道如何捕获使用请求登录所需的参数吗?如果您认为可以通过检查该页面的元素来做到这一点,那么您就陷入了困境。您需要做的是了解
开发工具如何工作?一旦您了解到无需为
参数
数据
挖掘该页面的元素,您就可以很容易地从开发工具中获取它。谢谢。但是,如果您可以创建一个假凭证来登录,请将该信息粘贴到此处。我会试试看。
<input type="submit" name="logIn" value="Log In" title="Type your User ID, 
Password, and click Log In to access your account" onclick="return 
loginckecks(this.form)">
import requests
import sys
import time

USERNAME = 'test1'
PASSWORD = 'password1'

LOGIN_URL = 'https://www.smartmetertexas.com/CAS/public/pkmslogin.form'
PROTECTED_URL = 'https://www.smartmetertexas.com/texas/wps/myportal'

#dict for login
login_data = {
    'username': USERNAME,
    'txtpassword': PASSWORD,
    'submit': 'logIn',
}

with requests.Session() as session:
    #Perform login
    post = session.post(LOGIN_URL, data = login_data)

    #Wait 20 seconds for login to complete
    #time.sleep(15)

    # Print the html
    result = session.get(protected_URL)
    print(result.text)
import requests 
from bs4 import BeautifulSoup
headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'
}

login_data = {
    # 'pass_dup': '',
    'username': 'youruser',
    'password': 'password',
    # 'buttonName': '',
    'login-form-type': 'pwd'
}

with requests.Session() as s:
    url = 'https://www.smartmetertexas.com/pkmslogin.form'
    r = s.get(url, headers=headers)
    soup = BeautifulSoup(r.content, 'html.parser')
    r = s.post(url, data=login_data, headers=headers)
    print(r.content)