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



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

我实现了袜子代理,并在我的请求中使用了用户代理以及引荐来源网址;s当必要时(我验证了浏览器在这些网站上使用Burpsuite发送的实际请求(,以使其看起来真实。

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

我不确定是否需要将我的源代码粘贴到此处。只是在这个项目上寻找一些方向。感谢您抽出宝贵时间阅读如此长长的文字墙:)

也许,你必须设置cookie。

为了使您的请求更加真实,您应该设置其他标头,例如HostReferer。但是,Cookie标头应每次更改。您可以通过以下方式获取它们:

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()的请求之间添加延迟。可以在浏览器上的开发工具中查看计时。或者,您可以模拟您在浏览器上连接到站点时发送的所有请求,例如ajax 脚本等。

根据我的经验,使用请求或使用 Selenium 网络驱动程序在检测方面没有太大区别,因为您无法访问标头甚至请求和响应数据。另外,请注意,不再支持 Phantom JS。最好改用无头Chrome。

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

希望对您有所帮助。

最新更新