在进行数据爬取时,有时候遇到一些比较复杂的js逆向。在不考虑访问效率的情况下,使用selenium模拟浏览器的方法可以大大减少反反爬逆向工作量。但普通的selenium库是无法获取到类似set-cookie等参数的,这时候需要用到selenium-wire库。其用法类似selenium
首先安装selenium-wire库
pip install selenium-wire
然后下载指定的chromedriver,根据电脑上的chrome版本进行下载
chromedriver下载地址
from seleniumwire import webdriver
driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.get('https://www.baidu.com')
即可看到如下界面:
如果出现报错说chromedriver版本不匹配,并且提示了本地电脑上的chrome版本,则回到chromedriver下载地址下载相对应版本
如果要让浏览器窗口不显示而在后台允许,加入headless参数:
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Chrome(executable_path='chromedriver.exe', options=options)
使用add_cookie方法可以添加cookie,一次添加一个name和value
cookie = {
'browserid': '12345678910',
'_ga': '12345678910',
'sessionid': '12345678910',
}
for name, value in cookie.items():
driver.add_cookie({"name": name, "value": value, "domain": "baidu.com"})
driver.get('https://www.baidu.com')
此处可能会报错:
解决的办法是在add_cookie前先get一次
driver.get('https://www.baidu.com')
cookie = {
'browserid': '12345678910',
'_ga': '12345678910',
'sessionid': '12345678910',
}
for name, value in cookie.items():
driver.add_cookie({"name": name, "value": value, "domain": "baidu.com"})
driver.get('https://www.baidu.com')
有时候需要访问的网站需要科学上网,这时候需要为driver设置代理才能正常访问
代理设置为你自己的代理端口,我的是127.0.0.1:7890:
seleniumwire_options = {
'proxy': {
'http': 'http://127.0.0.1:7890',
'https': 'https://127.0.0.1:7890'
}
}
# 注意是seleniumwire_options而不是options
driver = webdriver.Chrome(executable_path='chromedriver.exe', seleniumwire_options=seleniumwire_options)
driver.get('https://www.youtube.com')
这时就可以正常访问某些网站了
使用get_cookies方法即可获取到访问过程中网页set的cookie值
for item in driver.get_cookies():
print(item)
将输出类似如下结果:
也可以遍历requests获取所有访问历史的详情
for request in driver.requests:
print(request.url)
print(request.headers)
print(request.response)
以上就是使用python selenium-wire库的一些简单使用方法。希望对大家有所帮助