起因:页面展示的内容被隐藏了部分,无法获取完整内容

处理方案:
1.利用request模拟接口获取返参,模拟了请求头,但操作时一直无法获得数据,报错:org.apache.catalina.connector.ClientAbortException。未深究,大概率是服务器安全问题
selenium获取请求头可参考:https://blog.csdn.net/qq_31042199/article/details/119278315
但是跟selenium库有冲突好像,不知道是否需要把selenium卸载了再安装seleniumwire,待后续有时间验证一下。

2.通过webdriver提供的API查询,使用的函数是Network.getResponseBody
代码:

import json
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import timecaps = {'browserName': 'chrome','loggingPrefs': {'browser': 'ALL','driver': 'ALL','performance': 'ALL',},'goog:chromeOptions': {'perfLoggingPrefs': {'enableNetwork': True,},'w3c': False, },
}
driver = webdriver.Chrome(desired_capabilities=caps)driver.get('https://partner.oceanengine.com/union/media/login/')
# 必须等待一定的时间,不然会报错提示获取不到日志信息,因为絮叨等所有请求结束才能获取日志信息
time.sleep(3)request_log = driver.get_log('performance')
print(request_log)for i in range(len(request_log)):message = json.loads(request_log[i]['message'])message = message['message']['params']# .get() 方式获取是了避免字段不存在时报错request = message.get('request')if(request is None):continueurl = request.get('url')if(url == "https://s3.pstatp.com/bytecom/resource/union_web2/media/manifest.json"):# 得到requestIdprint(message['requestId'])# 通过requestId获取接口内容content = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': message['requestId']})print(content)break

3.以上方法在操作中一直报错“no resource with given identifier found”,经排查,requestId是可以获取的,后来发现该接口是Ajax,selenium抓取Ajax接口的数据用如下demo(这个demo中包含了动态url获取过程):

import os, time, json
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesif __name__ == '__main__':# 引入chromedriverchrome_options = webdriver.ChromeOptions()# chrome_options.add_argument('--headless')# chrome_options.add_argument('--no-sandbox')# chrome_options.add_argument("--disable-extensions")# chrome_options.add_argument("--disable-gpu")prefs = {'download.default_directory': os.getenv('OS_LOG_PATH')}chrome_options.add_experimental_option('prefs', prefs)# make chrome log requestscapabilities = DesiredCapabilities.CHROME# caps['goog:loggingPrefs']capabilities["goog:loggingPrefs"] = {"performance": "ALL"}  # newer: goog:loggingPrefs# capabilities['acceptSslCerts'] = True#browser = webdriver.Chrome(executable_path=r'/opt/google/chrome/chromedriver', options=chrome_options)browser = webdriver.Chrome(executable_path=r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe', options=chrome_options,desired_capabilities=capabilities)browser.implicitly_wait(3)browser.get("https://#########")# 输入账号browser.implicitly_wait(3)username_inputbox = browser.find_elements(By.XPATH, '//*[@id="app"]/section/div[1]/div/div[1]/div/div[2]/form/div[1]/div/div/div/input')[0]username_inputbox.click()browser.implicitly_wait(3)username_inputbox.clear()username_inputbox.send_keys("#######")# 输入密码browser.implicitly_wait(3)password_inputbox = browser.find_elements(By.XPATH, '//*[@id="app"]/section/div[1]/div/div[1]/div/div[2]/form/div[2]/div/div/div/input')[0]password_inputbox.click()browser.implicitly_wait(3)password_inputbox.clear()password_inputbox.send_keys("#######")# 点击登录browser.implicitly_wait(3)submit_btn = browser.find_elements(By.XPATH, '//*[@id="app"]/section/div[1]/div/div[1]/div/div[2]/form/div[3]/div/button')[0]submit_btn.click()# 等待5秒time.sleep(5)#-------------------------------------------------base_url = "https://#########"browser.get(base_url)time.sleep(3)# extract requests from logslogs_raw = browser.get_log("performance")logs = [json.loads(lr["message"])["message"] for lr in logs_raw]def log_filter(log_):return (# is an actual responselog_["method"] == "Network.responseReceived"# and jsonand "json" in log_["params"]["response"]["mimeType"])for log in filter(log_filter, logs):request_id = log["params"]["requestId"]resp_url = log["params"]["response"]["url"]print(request_id)print(f"Caught {resp_url}")json_str = json.dumps(browser.execute_cdp_cmd("Network.getResponseBody", {"requestId": request_id}), indent=4)# 创建一个params.json文件with open(f'{request_id}.json', 'w') as f:f.write(json_str)  # 将json_str写到文件中browser.quit()

后续如遇见更多的获取接口数据的情况,再做补充

利用selenium获取接口数据相关推荐

  1. Selenium UI 自动化获取接口数据

    Selenium UI 自动化获取接口数据 1.前端向接口的传参: 2.捕获到接口返回的内容后,判断前端是否有按照接口返回的内容进行展示 针对第一点,我上家公司是做旅游的,旅客预订完人数.房间数后前端 ...

  2. Python 获取接口数据,解析JSON,写入文件

    Python 获取接口数据,解析JSON,写入文件 用于练手的例子,从国家气象局接口上获取JSON数据,将它写入文件中,并解析JSON: 总的来说,在代码量上,python代码量要比java少很多.而 ...

  3. 利用Tushare获取金融数据

    利用Tushare获取金融数据 开发背景 Tushare社区 Tushare安装 Tushare使用 Tushare获取金融数据 1.获取A股列表 2.获取单只A股行情数据 3.获取多只A股数据 4. ...

  4. win摄像头怎么在linux,如何利用Video4Linux获取摄像头数据

    Video4Linux是Linux下用于获取视频和音频数据的API接口,在这篇文章中,着重阐述如何利用Video4Linux获取摄像头数据,以实现连续影像的播放. 1. 摄像头的安装 在 Linux下 ...

  5. 用selenium获取土地交易数据并用百度智慧云API图片转文字

    用selenium获取土地交易数据并用百度智慧云API图片转文字 1.数据获取 1.1 分析网页结构 1.2 selenium的坑 1.3 获取所有网页的标题和链接 1)selenium查找链接 2) ...

  6. 【Power Automate系列教程】利用API获取JSON数据定时每日自动写入List

    利用API获取JSON数据定时每日自动写入List 在知识星球的后台有个看数据的界面: 通过简单的抓包可以看到是个json数据,那么就有了想法! 获取到请求的api,发现规律: https://api ...

  7. python爬虫— 利用js2xml 获取 script 数据

    处理script中数据的最新方法,请看这个 主要介绍利用js2xml来获取<script>数据 1. 待获取网页:url:https://s.taobao.com/search?q=%E6 ...

  8. 微信小程序之获取接口数据展示

    上篇说到获取编辑框文本,没看过去看看. 本片介绍简单的接口数据获取,并且展示,采取模拟数据,拉取数据方式方法.文章最后附上DEMO 本篇暂未考虑美化问题,只看功能.如图: 一.简单介绍 1> w ...

  9. 获取Flickr API key及利用Python获取Flickr数据

    本文主要参考此篇博客,使用Python按坐标查找Flickr照片数据,感谢原博主. 1.申请Flickr的开发密钥,注册登陆Flickr(个人利用QQ邮箱进行了注册登陆).注册登陆(注意登陆此网站,需 ...

  10. R语言 | 利用tushare获取股票数据实例

    作者的tushare ID:456548 自学深度学习模型,因为本人热爱在支付宝上买基金,于是突发奇想,用深度学习预测涨跌. 首要要获取基金的数据,但是基金数据不好获取,就获取对应的行业指数数据用于分 ...

最新文章

  1. guibuilder 皮肤_和平精英返场皮肤投票排名介绍-返场皮肤哪个好
  2. mysql table alter_MySQL-ALTER TABLE命令学习[20180503]
  3. linux中操作数据库的使用命令记录
  4. 蓝牙基础知识进阶——Physical channel
  5. 开工第一天,这个超时问题把我干趴下了
  6. html设置功能区菜单,html – 具有“3D”效果的功能区
  7. tomcat配置SSL加密网站
  8. 10个高效的摸鱼神器,你错过几个?
  9. css 文字不规则排版,DIV CSS解决不规则文字排版
  10. WPF如何实现跨线程更新UI控件
  11. java中赛场统分的情况
  12. R语言报错 变数的长度不一样,需要改成元素自变量对应的名称
  13. [ERROR] Please refer to XXXXXXXXXXX for the individual test result
  14. ajax 中的contentType
  15. 去掉连接图片的虚线框
  16. [笔试题目] 简单总结笔试和面试中的海量数据问题
  17. 菜鸟自学02:下载参考基因组及构建bowtie2索引
  18. 保持屏幕唤醒的几种方式总结
  19. 十位以内得自幂数_10以内加减法技巧,一年级数学考试必考
  20. 常见的有规律的单复数转换(随笔)

热门文章

  1. 如何预防网站被篡改,劫持
  2. 商城项目 ------ 订单的生成功能(vue实现)
  3. windows UWP 应用使用系统代理
  4. 杭电多校第八场05_Separated Number(组合数前缀和性质)
  5. 即兴演讲、怎么锻炼即兴演讲能力、一些即兴演讲的模板
  6. 阿肯色大学计算机,阿肯色大学怎么样?
  7. 2021年与 Linux 有关的几件大事
  8. 【java】java实现pdf根据内容定位插入图片
  9. 他们说我根本不了解企业运作
  10. 【软考系统架构设计师】2015年下系统架构师案例分析历年真题