学习笔记
1、请在微信客户端打开
第一次尝试 尝试修改UA
UA是微信自己定义的
Mozilla/5.0 (Windows NT 6.1; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/53.0.2785.116
Safari/537.36 QBCore/4.0.1301.400
QQBrowser/9.0.2524.400
Mozilla/5.0 (Windows NT 6.1; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/53.0.2875.116
Safari/537.36
NetType/WIFI
MicroMessenger/7.0.5 WindowsWechat
部分情况,可以正常访问网页,获取源代码
然而还有部分会返回微信的处理逻辑
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0">
</head>
<body>
<script type="text/javascript">
var ua = navigator.userAgent.toLowerCase();
var isWeixin = ua.indexOf('micromessenger') != -1;
var isAndroid = ua.indexOf('android') != -1;
var isIos = (ua.indexOf('iphone') != -1) || (ua.indexOf('ipad') != -1);
if (!isWeixin) {
document.head.innerHTML = '<title>抱歉,出错了</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0"><link rel="stylesheet" type="text/css" href="https://res.wx.qq.com/open/libs/weui/0.4.1/weui.css">';
document.body.innerHTML = '<div class="weui_msg"><div class="weui_icon_area"><i class="weui_icon_info weui_icon_msg"></i></div><div class="weui_text_area"><h4 class="weui_msg_title">请在微信客户端打开链接</h4></div></div>';
}
</script>
</body>
</html>
第二次尝试 Chrome driver模拟操作
- 使用User-Agent Switcher for Chrome修改UA
- 使用Edit this cookie添加Cookie
- python使用selenium和ChromeDriver驱动Chrome
from selenium import webdriver
#生成一个Chrome浏览器的driver,使用时相当于requests库
driver = webdriver.Chrome()
#发起请求
driver.get('http://xxx.xxx.xxx')
#打印源码
print(driver.page_source)
#通过id获取全局唯一标签
xxx = driver.find_element_by_id('xxxxx')
#通过在Chrome浏览器中对应标签上右键Copy的XPath进行检索获取
xxx = driver.find_element_by_xpath('xxxxx')
#点击按键
xxx.click()
#输入框填充内容
xxx.send_keys()
要尽量不让浏览器检测到受到自动测试软件的控制
因为直接实例化的driver对象是最原始的浏览器对象,需要加上一些测试的配置
我们手动启动Chrome,开放一个端口用于远程调试
cd C:\Program Files (x86)\Google\Chrome\Application\ chrome.exe --remote-debugging-port=9999
在python中配置连接目标端口的Chrome程序,这样启动的程序会包含原有的Cookie和所有扩展及设置
option=webdriver.ChromeOptions() option.binary_location = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' option.add_experimental_option('debuggerAddress','127.0.0.1:9999') driver=webdriver.Chrome(executable_path='C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe',chrome_options=option)
部分网页会通过js检查浏览器中是否有chromedriver,通过的是chromedriver中部分指纹,例如cdc,可以将其修改但不影响程序执行,即可绕过检测机制。
但是这个也不是长久之计,因为每次的Cookie都可能会过期,虽然只要在driver运行期间每次用掉一个Cookie会再获得一个新的,但是当是总会在某一个时间点服务器会吊销之前所有的Cookie强制让用户重新通过微信公众平台的单点登录重新申请,微信是采用Oauth2使用openid来获取Cookie的,这部分使用Burp代理微信(微信登陆的时候可以选择代理)来看到部分过程,但是关键步骤的数据包的请求体和响应体被加密了,是微信自己在通信前进行的加密,所以只能想其他办法或者找到这部分的交互原理,至少这里面包括了openid这一项内容。
独立思考
1. response中的中文乱码,如何解决?
response=session.get(searchurl,headers=headers,timeout=3)
f=open('cookie','w',encoding='utf-8')
f.write(response.text)
f.close()
产生过的疑问
- response中的中文乱码,如何解决?