Python Web自动化:HTTP请求或无头浏览器

问题描述 投票:1回答:1

我对这个特定主题感到困惑,我为两个不同的网站构建了一个机器人,利用python的请求模块来手动模拟HTTP PoST和GET请求的发送。

我实现了socks代理,并在我的请求中使用了用户代理以及引用URL;当需要时(我验证了浏览器在这些网站上使用burpsuite时发送的实际请求)以使其看起来真实。

但是,我通过机器人运行的任何帐户都会被暂停。它让我想知道我做错了什么,一位朋友建议我也许应该使用其中一种无头解决方案(phantomJS),我倾向于那条路线,但我仍然感到困惑,想知道使用之间有什么区别HTTP请求模块和使用无头浏览器,如phantomJS。

我不确定是否需要在此处粘贴我的源代码。只是在寻找这个项目的方向。感谢您花时间阅读这么长的文字墙:)

python http python-requests
1个回答
1
投票

可能你必须设置cookie。

要使您的请求更真实,您应该设置其他标头,例如Host和Referer。但是,Cookies标头每次都应该更改。你可以这样得到它们:

from requests import Session

with Session() as session:
    # Send request to get cookies.
    response = session.get('your_url', headers=your_headers, proxies=proxies)  # eventually add params keyword
    cookies = response.cookies.get_dict()

    response = session.get('your_url', headers=your_headers, cookies=cookies, proxy=proxy)

或者,该网站正在以某种方式扫描机器人。

在这种情况下,您可以尝试使用time.sleep()在请求之间添加延迟。您可以在浏览器上查看Dev Tools中的计时。或者,您可以模拟在浏览器上连接到站点时发送的所有请求,例如ajax脚本等。

根据我的经验,使用请求或使用Selenium webdrivers在检测方面没有太大区别,因为您无法访问标头甚至是请求和响应数据。另请注意,不再支持Phantom Js。首选使用无头Chrome。

如果请求方法都不起作用,我建议使用Selenium-wireMobilenium,Selenium的修改版本,允许访问请求和响应数据。

希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.