繁体   English   中英

使用 Python 和 Requests 模块登录网站?

[英]Log in to website using Python and Requests module?

我正在使用 Python 和 Requests 模块以及 BeautifulSoup 编写 AliExpress 网络抓取工具,并且运行良好,但是我遇到了一个问题 - 我被随机重定向到登录页面。 我对此的解决方案是在抓取之前简单地在会话开始时登录,但我不知道如何登录。

登录页面 ( https://login.aliexpress.com ) 只需要用户名和密码,但是当我尝试使用我的代码输入它们并测试我是否通过访问https://home登录时。 aliexpress.com/index.htm并查看 html,它失败了,因为它将我重定向回登录页面。

尝试多种解决方案无济于事后,我的代码:

import requests

LOGIN_URL = "https://login.aliexpress.com/"
LOGIN_INFO = {
    "loginId": "myemail@email.com",
    "password": "mypassword"
}


with requests.Session() as sess:
    #go to login page
    sess.get(LOGIN_URL)

    #attempt to log in with my login info
    sess.post(LOGIN_URL, data=LOGIN_INFO)

    #go to 'My AliExpress' page to verify successful login
    success = sess.get("https://home.aliexpress.com/index.htm")

    #manually check html to see if I was sent to the login page again
    print(success.text)

这几乎是我多次尝试失败后剩下的。 我尝试过的一些事情是:

  1. 查看 'sess.get(LOGIN_URL)' 之后的 cookie,它返回这个,但我不知道如何处理它(以键:值格式):

    • ali_apache_tracktmp :
    • ali_apache_track :
    • xman_f : t52Eyo+p3qf6E6fdmL5yJ81g2icRn+2PYjjrWYHlqlDyXAixo92Z5KHMZV8SCV7vP4ZjxEmuTQesVWkqxUi3SpFU1hrtqbRyNRd+d0ApII==
    • JSESSIONID : 30678741D7473C80BEB85825718FB1C6
    • acs_usuc_t : acs_rt=343aef98b0ca4ae79497e31b11c82c29&x_csrf=1b5g78e7fz2rt
    • xman_us_f : x_l=0
    • ali_apache_id : 23.76.146.14.1510893827939.187695.4
    • xman_t : PSIYMbKN2UyuejZBfmP9o5hdmQGoSB0UL0785LnRBxW0bdbdMmtW2A47hHbgTgD7TmFp7QVsOW4kXTsXMncy+iKisKfqagqb4yPxOVFdwk+
  2. 尝试寻找 csrf 令牌,但仅在上面的第 5 个项目符号中找到了 '_csrf=' 之后的文本。 尝试使用它,但没有奏效。

  3. 查看登录时发送的 html 表单,但我不知道 html,只能识别出它的字段比我在其他网站上看到的其他人使用的字段多得多(此处来自 Chrome 的表单数据图像)

  4. 将代码中的“myPassword”更改为上图中 password2 字段中的文本,并将“password”键也更改为“password2”。

  5. 谷歌搜索了几个小时,但没有找到任何有用的东西。

在这一点上,我不知所措,因此非常感谢有关如何进行的任何帮助。 我不是最好的编码员(仍在学习),除了我从一些关于抓取的教程中学到的知识之外,我不知道 html,并希望自己弄清楚,但几个小时后我仍然没有解决它并意识到我真的可以使用帮助。

我正在使用 python 3.5。 如果需要更多信息,请告诉我。 大脑在被困和清醒这么长时间后几乎完全变成糊状。

我怀疑这不会按照您希望的方式工作。 即使在以某种方式完成登录提示后,以下页面也会显示“滑块验证”,据我所知,它无法做任何事情。 (如果有方法请告诉我)。

我一直在尝试使用 cookie:

session = requests.Session()
cj = requests.cookies.RequestsCookieJar()
cj.set('KEY', 'VALUE')
session.cookies = cj
response = session.get(url, timeout=5, headers=headers, proxies=proxies)

以前,scraper 使用标题和代理工作了一段时间,但最近它总是提示登录。 我也尝试了 cookie 中的所有键和值,但都无济于事。

一个想法是使用 selenium 登录和捕获 cookie,然后将其传递给请求会话。

AntoG有一个解决方案来做到这一点: https : //stackoverflow.com/a/42114843

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM