我正在尝试登录页面并访问页面中的其他链接.
payload={'username'=<username>,'password'=<password>}
with session() as s:
r = c.post(<URL>, data=payload)
print r
print r.content
Run Code Online (Sandbox Code Playgroud)
这给了我一个"405 Not Allowed"错误.我使用chrome开发人员工具查看了post方法的详细信息,可以看到api(URL/api/auth).我使用有效负载发布到该URL,它正在工作,我收到类似于我在开发人员中看到的响应.
不幸的是,在登录后尝试"获取"另一个URL时,我仍然从登录页面获取内容.为什么登录不坚持?我应该使用cookies吗?我是新手,所以我真的不知道如何使用cookies.
我正在尝试使用python请求1.2.3库将cookie添加到现有的cookiejar中.每次添加新cookie时,jar中的数据都会被用于新cookie.密钥丢失,值丢失或与不正确的密钥匹配.我不确定它是否是一个请求库错误或我没有正确发送cookie.我正在使用以下代码导致cookiejar中出现错误的cookie.我是否正确格式化了cookie?有任何想法吗?
my_cookie = {
'domain':'www.mydomain.com',
'expires':None,
'name':'COOKIE_NAME',
'path':'/',
'value':'the cookie works',
'version':0
}
s = requests.Session()
requests.utils.add_dict_to_cookiejar(s.cookies, my_cookie)
Run Code Online (Sandbox Code Playgroud) 我正在使用requests登录我的Django网站进行测试(是的,我知道Django TestClient,但我需要简单的http).我可以登录,只要我收到请求,一切都OK.
当我尝试使用post时,我从csrf中间件获得403.我现在通过在我的视图中使用@crsf_exempt来解决这个问题,但更喜欢长期解决方案.
这是我的代码:
with requests.Session() as ses:
try:
data = {
'username': self.username,
'password': self.password,
}
ses.get(login_url)
try:
csrftoken = ses.cookies["csrftoken"]
except Exception, e:
raise
data.update(csrfmiddlewaretoken=csrftoken)
_login_response = ses.post(login_url, data=data)
logger.info("ses.cookies:%s" % (ses.cookies))
assert 200 <= _login_response.status_code < 300, "_login_response.status_code:%s" % (_login_response.status_code)
response = ses.post(
full_url,
data=data,
)
return self._process_response(response)
Run Code Online (Sandbox Code Playgroud)
登录工作正常,我可以在这里看到csrf令牌.
INFO:tests.helper_fetch:ses.cookies:<RequestsCookieJar[<Cookie csrftoken=TmM97gnNHs4YCgQPzfNztrAWY3KcysAg for localhost.local/>, <Cookie sessionid=kj6wfmta
Run Code Online (Sandbox Code Playgroud)
但是,中间件将cookie视为空.
INFO:django.middleware.csrf:request.COOKIES:{}
Run Code Online (Sandbox Code Playgroud)
我已经将日志代码添加到它:
def process_view(self, request, callback, callback_args, callback_kwargs):
if getattr(request, 'csrf_processing_done', False):
return None
try: …Run Code Online (Sandbox Code Playgroud) 我正在尝试抓取当天所有足球(足球)比赛的以下网址: https: //www.soccerstats.com/matches.asp ?matchday=2&daym=tomorrow
我的代码曾经有效,但网站后来发生了变化,您现在需要在网站加载页面之前单击“我同意 cookie”按钮。这现在导致我的代码出现问题。对此有什么解决办法吗?
任何帮助深表感谢。
我尝试查看 bs4 的文本输出,很明显该网站尚未加载,而是在输出中看到“我同意 cookies”文本,这意味着它没有通过此阶段。
from bs4 import BeautifulSoup
import requests
url = "https://www.soccerstats.com/matches.asp?matchday=2"
r = requests.get(url)
data = r.text
soup = BeautifulSoup(data, 'html.parser')
all_matches = []
all_matches = re.findall(r"""<a class='button' style='background-color:#AAAAAA;font-color=white;' href='(.*?)'>""", data)
Run Code Online (Sandbox Code Playgroud)
输出应列出各个匹配 URL。