selenium3.0不用代理的情况下,获取异步请求的数据

selenium3.0不用代理的情况下,获取异步请求的数据最近爬取一个网站的时候,反爬比较厉害,各种弹窗,各种验证码,无限debugger,关键数据是ajax请求异步加载的。使用代理绕过前面几种反爬后,获取ajax的request和response成了头疼的问题,最终使用selenium的network日志分析来解决。为了方便以后使用,写了一个工具类:importjsonfromseleniumimportwebdriverfromselenium.webdriverimportDesiredCapabilitiesdefget

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

最近爬取一个网站的时候,反爬比较厉害,各种弹窗,各种验证码,无限debugger,关键数据是ajax请求异步加载的。使用代理绕过前面几种反爬后,获取ajax的request和response成了头疼的问题,最终使用selenium的network日志分析来解决。为了方便以后使用,

目录

工具类:

使用方法:

控制台:

​使用代理:


工具类:

import json
from selenium import webdriver
from selenium.webdriver import DesiredCapabilities


def get_xhr_logs(chrome):
    log_xhr_array = []
    for typelog in chrome.log_types:
        perfs = chrome.get_log(typelog)
        for row in perfs:
            log_data = row
            message_ = log_data['message']
            try:
                log_json = json.loads(message_)
                log = log_json['message']
                if log['method'] == 'Network.responseReceived':
                    # 去掉静态js、css等,仅保留xhr请求
                    type_ = log['params']['type']
                    if type_ == "XHR":
                        log_xhr_array.append(log)
            except:
                pass
    return log_xhr_array


def get_log_options():
    option = webdriver.ChromeOptions()
    option.add_argument('--no-sandbox')
    option.add_argument('--headless')
    option.add_argument("--disable-extensions")
    option.add_argument("--allow-running-insecure-content")
    option.add_argument("--ignore-certificate-errors")
    option.add_argument("--disable-single-click-autofill")
    option.add_argument("--disable-autofill-keyboard-accessory-view[8]")
    option.add_argument("--disable-full-form-autofill-ios")
    option.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:55.0) Gecko/20100101 Firefox/55.0')
    option.add_experimental_option('w3c', False)
    option.add_experimental_option('perfLoggingPrefs', {
        'enableNetwork': True,
        'enablePage': False,
    })
    return option


def get_caps():
    caps = DesiredCapabilities.CHROME
    caps['loggingPrefs'] = {
        'browser': 'ALL',
        'performance': 'ALL',
    }
    caps['perfLoggingPrefs'] = {
        'enableNetwork': True,
        'enablePage': False,
        'enableTimeline': False
    }
    return caps

使用方法:

以访问百度一下,你就知道为例:

import json
import os
import time

# 导入工具类
from myscrapy.network_log_option import *

if __name__ == '__main__':
    # 使用工具类来获取options配置,而不是平时的webdriver.ChromeOptions()方法
    options = get_log_options()
    # 使用工具类来获取caps
    desired_capabilities = get_caps()
    # 这里也可以对options和caps加入其他的参数,比如代理参数等
    chrome = webdriver.Chrome(options=options, desired_capabilities=desired_capabilities)
    chrome.get("https://www.baidu.com/")
    chrome.maximize_window()
    # 用工具类来获取ajax请求日志
    logs = get_xhr_logs(chrome)
    for log in logs:
        print(log)
    chrome.quit()

控制台:

结果对应了百度的两条ajax请求:

C:\Users\Lenovo\AppData\Local\Programs\Python\Python39\python.exe D:/pythonwork/myscrapy/myscrapy/myscrapy/test002.py
{'method': 'Network.responseReceived', 'params': {'frameId': 'E6B2F71F5881A0C139C6405650B9B287', 'loaderId': 'AC357BD1718137E4CDBE450B8C470D1B', 'requestId': '39148.67', 'response': {'connectionId': 76, 'connectionReused': True, 'encodedDataLength': 117, 'fromDiskCache': False, 'fromPrefetchCache': False, 'fromServiceWorker': False, 'headers': {'Content-Length': '53', 'Content-Type': 'text/plain; charset=UTF-8', 'Date': 'Wed, 23 Jun 2021 02:35:04 GMT'}, 'headersText': 'HTTP/1.1 200 OK\r\nContent-Length: 53\r\nContent-Type: text/plain; charset=UTF-8\r\nDate: Wed, 23 Jun 2021 02:35:04 GMT\r\n\r\n', 'mimeType': 'text/plain', 'protocol': 'http/1.1', 'remoteIPAddress': '112.80.248.75', 'remotePort': 443, 'requestHeaders': {'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN', 'Connection': 'keep-alive', 'Cookie': 'BIDUPSID=5B2A6601F8BFCE8B33606C7DE9B03925; PSTM=1624415703; BAIDUID=5B2A6601F8BFCE8B846CF739704B0464:FG=1; BD_HOME=1; H_PS_PSSID=34132_34099_33970_31254_34004_33607_34106_34135_34119_26350; BD_UPN=13314652; BA_HECTOR=0ta4ah0l4l008lc5361gd57eo0q', 'Host': 'www.baidu.com', 'Referer': 'https://www.baidu.com/', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'same-origin', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:55.0) Gecko/20100101 Firefox/55.0', 'sec-ch-ua': '', 'sec-ch-ua-mobile': '?0'}, 'requestHeadersText': 'GET /sugrec?prod=pc_his&from=pc_web&json=1&sid=34132_34099_33970_31254_34004_33607_34106_34135_34119_26350&hisdata=&_t=1624415704263&csor=0 HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: keep-alive\r\nsec-ch-ua:\r\nAccept: application/json, text/javascript, */*; q=0.01\r\nsec-ch-ua-mobile: ?0\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:55.0) Gecko/20100101 Firefox/55.0\r\nSec-Fetch-Site: same-origin\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Dest: empty\r\nReferer: https://www.baidu.com/\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN\r\nCookie: BIDUPSID=5B2A6601F8BFCE8B33606C7DE9B03925; PSTM=1624415703; BAIDUID=5B2A6601F8BFCE8B846CF739704B0464:FG=1; BD_HOME=1; H_PS_PSSID=34132_34099_33970_31254_34004_33607_34106_34135_34119_26350; BD_UPN=13314652; BA_HECTOR=0ta4ah0l4l008lc5361gd57eo0q\r\n', 'responseTime': 1624415704296.042, 'securityDetails': {'certificateId': 0, 'certificateTransparencyCompliance': 'unknown', 'cipher': 'AES_128_GCM', 'issuer': 'GlobalSign Organization Validation CA - SHA256 - G2', 'keyExchange': 'ECDHE_RSA', 'keyExchangeGroup': 'P-256', 'protocol': 'TLS 1.2', 'sanList': ['baidu.com', 'baifubao.com', 'www.baidu.cn', 'www.baidu.com.cn', 'mct.y.nuomi.com', 'apollo.auto', 'dwz.cn', '*.baidu.com', '*.baifubao.com', '*.baidustatic.com', '*.bdstatic.com', '*.bdimg.com', '*.hao123.com', '*.nuomi.com', '*.chuanke.com', '*.trustgo.com', '*.bce.baidu.com', '*.eyun.baidu.com', '*.map.baidu.com', '*.mbd.baidu.com', '*.fanyi.baidu.com', '*.baidubce.com', '*.mipcdn.com', '*.news.baidu.com', '*.baidupcs.com', '*.aipage.com', '*.aipage.cn', '*.bcehost.com', '*.safe.baidu.com', '*.im.baidu.com', '*.baiducontent.com', '*.dlnel.com', '*.dlnel.org', '*.dueros.baidu.com', '*.su.baidu.com', '*.91.com', '*.hao123.baidu.com', '*.apollo.auto', '*.xueshu.baidu.com', '*.bj.baidubce.com', '*.gz.baidubce.com', '*.smartapps.cn', '*.bdtjrcv.com', '*.hao222.com', '*.haokan.com', '*.pae.baidu.com', '*.vd.bdstatic.com', 'click.hm.baidu.com', 'log.hm.baidu.com', 'cm.pos.baidu.com', 'wn.pos.baidu.com', 'update.pan.baidu.com'], 'signedCertificateTimestampList': [], 'subjectName': 'baidu.com', 'validFrom': 1585811098, 'validTo': 1627277462}, 'securityState': 'secure', 'status': 200, 'statusText': 'OK', 'timing': {'connectEnd': -1, 'connectStart': -1, 'dnsEnd': -1, 'dnsStart': -1, 'proxyEnd': 0.455, 'proxyStart': 0.185, 'pushEnd': 0, 'pushStart': 0, 'receiveHeadersEnd': 31.722, 'requestTime': 325463.079675, 'sendEnd': 0.705, 'sendStart': 0.523, 'sslEnd': -1, 'sslStart': -1, 'workerFetchStart': -1, 'workerReady': -1, 'workerRespondWithSettled': -1, 'workerStart': -1}, 'url': 'https://www.baidu.com/sugrec?prod=pc_his&from=pc_web&json=1&sid=34132_34099_33970_31254_34004_33607_34106_34135_34119_26350&hisdata=&_t=1624415704263&csor=0'}, 'timestamp': 325463.112169, 'type': 'XHR'}}
{'method': 'Network.responseReceived', 'params': {'frameId': 'E6B2F71F5881A0C139C6405650B9B287', 'loaderId': 'AC357BD1718137E4CDBE450B8C470D1B', 'requestId': '39148.68', 'response': {'connectionId': 15, 'connectionReused': True, 'encodedDataLength': 360, 'fromDiskCache': False, 'fromPrefetchCache': False, 'fromServiceWorker': False, 'headers': {'Accept-Ranges': 'bytes', 'Cache-Control': 'max-age=315360000', 'Content-Encoding': 'gzip', 'Content-Length': '7112', 'Content-Type': 'application/javascript', 'Date': 'Wed, 23 Jun 2021 02:35:04 GMT', 'Etag': '"4451-4fdbd6734c340"', 'Expires': 'Sat, 21 Jun 2031 02:35:04 GMT', 'Last-Modified': 'Wed, 09 Jul 2014 07:10:29 GMT', 'Server': 'Apache', 'Vary': 'Accept-Encoding,User-Agent'}, 'headersText': 'HTTP/1.1 200 OK\r\nAccept-Ranges: bytes\r\nCache-Control: max-age=315360000\r\nContent-Encoding: gzip\r\nContent-Length: 7112\r\nContent-Type: application/javascript\r\nDate: Wed, 23 Jun 2021 02:35:04 GMT\r\nEtag: "4451-4fdbd6734c340"\r\nExpires: Sat, 21 Jun 2031 02:35:04 GMT\r\nLast-Modified: Wed, 09 Jul 2014 07:10:29 GMT\r\nServer: Apache\r\nVary: Accept-Encoding,User-Agent\r\n\r\n', 'mimeType': 'application/javascript', 'protocol': 'http/1.1', 'remoteIPAddress': '112.80.248.75', 'remotePort': 443, 'requestHeaders': {'Accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN', 'Connection': 'keep-alive', 'Cookie': 'BIDUPSID=5B2A6601F8BFCE8B33606C7DE9B03925; PSTM=1624415703; BAIDUID=5B2A6601F8BFCE8B846CF739704B0464:FG=1; BD_HOME=1; H_PS_PSSID=34132_34099_33970_31254_34004_33607_34106_34135_34119_26350; BD_UPN=13314652; BA_HECTOR=0ta4ah0l4l008lc5361gd57eo0q', 'Host': 'www.baidu.com', 'Referer': 'https://www.baidu.com/', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'same-origin', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:55.0) Gecko/20100101 Firefox/55.0', 'X-Requested-With': 'XMLHttpRequest', 'sec-ch-ua': '', 'sec-ch-ua-mobile': '?0'}, 'requestHeadersText': 'GET /cache/fpid/chromelib_1_1.js?_=1624415704024 HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: keep-alive\r\nsec-ch-ua:\r\nAccept: text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01\r\nX-Requested-With: XMLHttpRequest\r\nsec-ch-ua-mobile: ?0\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:55.0) Gecko/20100101 Firefox/55.0\r\nSec-Fetch-Site: same-origin\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Dest: empty\r\nReferer: https://www.baidu.com/\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN\r\nCookie: BIDUPSID=5B2A6601F8BFCE8B33606C7DE9B03925; PSTM=1624415703; BAIDUID=5B2A6601F8BFCE8B846CF739704B0464:FG=1; BD_HOME=1; H_PS_PSSID=34132_34099_33970_31254_34004_33607_34106_34135_34119_26350; BD_UPN=13314652; BA_HECTOR=0ta4ah0l4l008lc5361gd57eo0q\r\n', 'responseTime': 1624415704513.065, 'securityDetails': {'certificateId': 0, 'certificateTransparencyCompliance': 'unknown', 'cipher': 'AES_128_GCM', 'issuer': 'GlobalSign Organization Validation CA - SHA256 - G2', 'keyExchange': 'ECDHE_RSA', 'keyExchangeGroup': 'P-256', 'protocol': 'TLS 1.2', 'sanList': ['baidu.com', 'baifubao.com', 'www.baidu.cn', 'www.baidu.com.cn', 'mct.y.nuomi.com', 'apollo.auto', 'dwz.cn', '*.baidu.com', '*.baifubao.com', '*.baidustatic.com', '*.bdstatic.com', '*.bdimg.com', '*.hao123.com', '*.nuomi.com', '*.chuanke.com', '*.trustgo.com', '*.bce.baidu.com', '*.eyun.baidu.com', '*.map.baidu.com', '*.mbd.baidu.com', '*.fanyi.baidu.com', '*.baidubce.com', '*.mipcdn.com', '*.news.baidu.com', '*.baidupcs.com', '*.aipage.com', '*.aipage.cn', '*.bcehost.com', '*.safe.baidu.com', '*.im.baidu.com', '*.baiducontent.com', '*.dlnel.com', '*.dlnel.org', '*.dueros.baidu.com', '*.su.baidu.com', '*.91.com', '*.hao123.baidu.com', '*.apollo.auto', '*.xueshu.baidu.com', '*.bj.baidubce.com', '*.gz.baidubce.com', '*.smartapps.cn', '*.bdtjrcv.com', '*.hao222.com', '*.haokan.com', '*.pae.baidu.com', '*.vd.bdstatic.com', 'click.hm.baidu.com', 'log.hm.baidu.com', 'cm.pos.baidu.com', 'wn.pos.baidu.com', 'update.pan.baidu.com'], 'signedCertificateTimestampList': [], 'subjectName': 'baidu.com', 'validFrom': 1585811098, 'validTo': 1627277462}, 'securityState': 'secure', 'status': 200, 'statusText': 'OK', 'timing': {'connectEnd': -1, 'connectStart': -1, 'dnsEnd': -1, 'dnsStart': -1, 'proxyEnd': 1, 'proxyStart': 0.65, 'pushEnd': 0, 'pushStart': 0, 'receiveHeadersEnd': 53.016, 'requestTime': 325463.276445, 'sendEnd': 1.227, 'sendStart': 1.08, 'sslEnd': -1, 'sslStart': -1, 'workerFetchStart': -1, 'workerReady': -1, 'workerRespondWithSettled': -1, 'workerStart': -1}, 'url': 'https://www.baidu.com/cache/fpid/chromelib_1_1.js?_=1624415704024'}, 'timestamp': 325463.33218, 'type': 'XHR'}}

selenium3.0不用代理的情况下,获取异步请求的数据使用代理:

比如,使用chrom的远程调试代理:


import json
import os
import time
from myscrapy.network_log_option import *
if __name__ == '__main__':
# 启动代理命令,打开代理浏览器窗口
cd_dir = r'cd C:\Users\Lenovo\AppData\Local\Google\Chrome\Application'
start_proxy = r'chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"'
os.system(cd_dir)
time.sleep(0.5)
os.system(start_proxy)
# 使用工具类来获取options配置,而不是平时的webdriver.ChromeOptions()方法
options = get_log_options()
# 配置代理参数
options.add_experimental_option('debuggerAddress', 'localhost:90222')
# 使用工具类来获取caps
desired_capabilities = get_caps()
# 这里也可以对options和caps加入其他的参数,比如代理参数等
chrome = webdriver.Chrome(options=options, desired_capabilities=desired_capabilities)
chrome.get("https://www.baidu.com/")
chrome.maximize_window()
# 用工具类来获取ajax请求日志
logs = get_xhr_logs(chrome)
for log in logs:
print(log)
chrome.quit()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158912.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • nlp 关键词提取_nlp信息抽取

    nlp 关键词提取_nlp信息抽取目录一、关键词提取概述二、TF-IDF关键词提取算法及实现三、TextRank关键词提取算法实现四、LDA主题模型关键词提取算法及实现五、Word2Vec词聚类的关键词提取算法及实现六、信息增益关键词提取算法及实现七、互信息关键词提取算法及实现八、卡方检验关键词提取算法及实现九、基于树模型的关键词提取算法及实现十、总结一、关键词提取概述关键词是能够表…

  • 初学者:html中的表单详解(下面附有代码)

    初学者:html中的表单详解(下面附有代码)表单的理解与解释表单:采集不同类型的用户输入数据,发送给服务器,实现用户和服务器之间的数据交互。表单标签form声明数据采集的范围,只要是在form中的,都是要采集的数据。一个页面中可以有多个form标签,只能是并列关系,不能嵌套。只能是兄弟关系,,不能是父子关系。用户向服务器端发送数据时,一次只能提交一个表单中的数据。如果要提交多个表单就需要用js中的异步交互。表单元素method属性:提交表单时所用的http方法,默认为get方法。get方式:将数据作为url地址的一部分发送给服务器

  • pip安装scrapy失败_scrapy框架运行

    pip安装scrapy失败_scrapy框架运行错误如图所示,running setup.py install for Twisted…..errorTwisted依赖库安装报错,重新下载手动安装一下下载网址:https://www.lfd.uci.edu/~gohlke/pythonlibs注意:看下安装的python是什么版本,我安装的python 3.9.0,就下载cp39,64位的下载安装的版本不对,就会报:Twisted-20.3.0-cp38-cp38-win_amd64.whl is not a support…

  • ubuntu16.04更改密码提示toosimple_ubuntu密码修改

    ubuntu16.04更改密码提示toosimple_ubuntu密码修改终端:passwd

  • MongoDB(三)——CRUD

    MongoDB(三)——CRUD

  • java 缓存 工具类

    java 缓存 工具类

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号