最近也想自己做个登录网站签到的爬虫,遇到了登录的问题。这里想请求大佬指教一下,我使用的是 HtmlUnit,前端代码没有 form 标签,主要通过 JS 向后台服务器发送 AJAX 请求,HtmlUnit中已加载 JS 和 CSS,网站登录没有任何形式的验证码,通过 HtmlUnit给 input 输入账号和密码后,已确认点击了 button 按钮,但登录失败。希望希望有经验路过的大佬能指点一下。添麻烦了。
如果其他类库能更好的解决问题,使用其他类库也行。
只是一个ajax请求且没有验证,不需要任何第三方类库。
很简单,抓一下,直接完全拷贝bytes,然后用tcp写进去,几行代码搞定。
您好,萌新不是很懂,希望您能说详细清晰一些,抓一下,指的是抓包吗?tcp指的是那个tcp协议吗?麻烦您了。
@《超人·迪迦》:
大致流程
eg.
POST https://mcs.snssdk.com/v1/list HTTP/1.1
Host: mcs.snssdk.com
Connection: keep-alive
Content-Length: 1138
Origin: https://www.ixigua.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Content-Type: application/json; charset=UTF-8
Accept: */*
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Referer: https://www.ixigua.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
[{"events":[{"event":"user_fps_block","params":"{\"webid\":\"6797750422339192332\",\"page_type\":\"homepage\",\"url_path\":\"/\",\"max_fps\":62,\"block_times\":0,\"event_index\":1596122363603}","local_time_ms":1596267829010,"is_bav":0}],"user":{"user_unique_id":"6797750422339192332","user_type":12,"user_id":"58760536527","user_is_auth":true,"user_is_login":true,"web_id":"6797750422339192332","ssid":"75c7fa88-0a7a-46de-8670-a0e7da1eb441"},"header":{"app_id":1768,"os_name":"windows","os_version":"10","device_model":"","ab_sdk_version":"1500833,1850681,1692156,1794779","language":"en-US","platform":"web","sdk_version":"4.1.15","timezone":8,"tz_offset":-28800,"resolution":"1536x864","browser":"Chrome","browser_version":"78.0.3904.108","referrer":"https://www.ixigua.com/","referrer_host":"www.ixigua.com","width":1536,"height":864,"screen_width":1536,"screen_height":864,"custom":"{\"user_agent\":\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36\",\"build_version\":\"2.1.9-6\",\"pc_real_user\":\"1\",\"first_install_time\":1582724624,\"register_time\":1491041222}"}}]
fiddler.raw : ctrl+c
由于是text,保存到文件,设读取到变量httpMsg;
code:
tcpWriter.Writer(Utf8.GetBytesFrom(httpMsg));
var response = tcpReader.ReadAll();
使用tcp是为了完整复制,所谓旁路破解。
@花飘水流兮: 看了大佬的回答,有请求的报文和一段JS的代码,但并不懂这里面的思路。深知自己刚接触爬虫,连皮毛都不懂,要好好大补爬虫思路以及各相关项目的技术储备。大佬有相关的学习资源推荐吗?尽快结贴,打扰了。
@《超人·迪迦》: 初级程序员教程(中级程序员教程)->每一章 对应买一本书(主要XX教程写得太带过);
基础原理要学,写代码事半功倍,面对问题更容易处理(而不会那么容易懵逼,毫无方向)。
《深入理解计算机原理》也是本不错的书。
这些都是我读书的时候看过的,其次是动手去理解。
例如时钟的理解、倍频理解...
http只是个简单的通讯(但服务端和客户端相关的约定[并不是强制约束]却非常繁杂,比如光是一个cookie都很多页,细节都是用到哪看到哪),你如果仅仅从通讯看就很简单。
import hashlib
import requests
url = 'https://hacpai.com/login'
name = '用户名'
password = '密码'
m = hashlib.md5()
m.update(password.encode('utf8'))
md5_password = m.hexdigest()
data = {"nameOrEmail":name,"userPassword":md5_password,"captcha":""}
res = requests.post(url,data=data)
print(res.text)
#去学习一下,前端和后端先把