我对这个特定主题感到困惑,我为两个不同的网站构建了一个机器人,利用python的请求模块来手动模拟HTTP PoST和GET请求的发送。
我实现了socks代理,并在我的请求中使用了用户代理以及引用URL;当需要时(我验证了浏览器在这些网站上使用burpsuite时发送的实际请求)以使其看起来真实。
但是,我通过机器人运行的任何帐户都会被暂停。它让我想知道我做错了什么,一位朋友建议我也许应该使用其中一种无头解决方案(phantomJS),我倾向于那条路线,但我仍然感到困惑,想知道使用之间有什么区别HTTP请求模块和使用无头浏览器,如phantomJS。
我不确定是否需要在此处粘贴我的源代码。只是在寻找这个项目的方向。感谢您花时间阅读这么长的文字墙:)
可能你必须设置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-wire或Mobilenium,Selenium的修改版本,允许访问请求和响应数据。
希望能帮助到你。