首先上一个被拷贝的惨不忍睹 上一个是滑块验证[https://www.cnblogs.com/carl-/p/15761861.html]

还是前两天做一个商城后台爬虫,限制用户缓存,不能用谷歌开发版本,同时需要下载文件。

话不多说上代码[https://www.cnblogs.com/carl-/p/15762714.html]

import getpass
from playwright.sync_api import sync_playwright
# 不出意外这个可以获取到你google的本地缓存文件
__USER_DATE_DIR_PATH__ = f"C:\\Users\\{getpass.getuser()}\\AppData\Local\Google\Chrome\\User Data" playwright = sync_playwright().start()
browser = playwright.chromium.launch_persistent_context(
# 指定本机用户缓存地址
user_data_dir=__USER_DATE_DIR_PATH__,
# 指定本机google客户端exe的路径
executable_path=__EXECUTABLE_PATH__,
# 要想通过这个下载文件这个必然要开 默认是False
accept_downloads=True,
# 设置不是无头模式
headless=False,
bypass_csp=True,
slow_mo=10,
#跳过检测
args=['--disable-blink-features=AutomationControlled']
)

注意用这个方法启动的浏览器会自带一个页面存在,当然你还是可以重新再起一个

# 打开新页
page = browser.new_page()
# 访问谷歌首页
page.goto('https://www.google.com',wait_until='networkidle',timeout=90000)
wait_until='networkidle' 意思是 跳转过后再一定时间内没有网络请求链接
timeout 很好理解 超时时间90秒

js注入(用途的话是选择器选择元素用的,具体的js 你们自己写)

# 算是获得句柄吧
window_handle = page.evaluate_handle("window")
# 选择元素
window_handle.evaluate("document.querySelectorAll('#drrReportRangeTypeRadioMonthly')[0].checked=true")
# 自带select选择 data自行补充
drrMonthlySelect = page.wait_for_selector('//select[@id="drrMonthlySelect"]')
drrMonthlySelect.select_option(date)

接下来是下载操作

# 打开下载器
with page.expect_download() as download_info:
#找到你要下载的东西,找到点击的元素,点击
page.wait_for_selector('//a[@id="sspa-reports:report-settings-page:-download-button"]').click()
# 下载的东西
download = download_info.value
# 下载的路径
download.path()
# 下载的文件名
download.suggested_filename
# 关闭页面
page.close()
# 关闭浏览器
browser.stop()

剩下的操作 你想干啥干啥

# 补充几个
# 点击
page.click('//input[@id="signInSubmit"]')
# 等待完成
self.page.wait_for_load_state("domcontentloaded")
# 输入
page.fill('//input[@id="ap_email"]', user_str)
# 查找元素
page.wait_for_selector('//select[@id="drrMonthlySelect"]')

playwright--自动化(三): 跳过检测 使用正常谷歌 指定用户数据 下载文件的更多相关文章

  1. 前端自动化(三) 合并压缩css、压缩js、添加时间戳、打包上线操作

    前端自动化(三)   合并压缩css.压缩js.添加时间戳.打包上线操作 此文在前两篇基础上对比参考,会很方便理解 gulp.task("delete",function(){ r ...

  2. STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  3. STC8H开发(七): I2C驱动MPU6050三轴加速度+三轴角速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  4. Android检测是否安装了指定应用

    检测是否安装了指定应用的方法如下: private boolean isAvilible( Context context, String packageName ) { final PackageM ...

  5. H5页面实现下载文件(apk、txt等)的三种方式

    需求描述 接到的原始需求是这样的,有一个H5页面,页面中有个"点击下载"的按钮,点击之后,完成下载特定的apk.大概是下面这样的: 需求分析 接到需求的时候我偷乐了一下,这个H5页 ...

  6. tensorflow学习笔记三:实例数据下载与读取

    一.mnist数据 深度学习的入门实例,一般就是mnist手写数字分类识别,因此我们应该先下载这个数据集. tensorflow提供一个input_data.py文件,专门用于下载mnist数据,我们 ...

  7. 检测到有潜在危险的 Request.Form 值。 说明: ASP.NET 在请求中检测到包含潜在危险的数据

    在请求方法的顶部添加        [ValidateInput(false)]就OK了 从客户端(Content=" sdfdddd ...")中检测到有潜在危险的 Reques ...

  8. 解决iPhone上select时常失去焦点,随意跳到下一个输入框,影响用户操作

    window.addEventListener('load', function() { FastClick.attach(document.body); }, false); //300s延迟,解决 ...

  9. JWebFileTrans(JDownload): 一款可以从网络上下载文件的小程序(三),多线程断点下载

    一 前言 本篇博客是<JWebFileTrans(JDownload):一款可以从网络上下载文件的小程序>系列博客的第三篇,本篇博客的内容主要是在前两篇的基础上增加多线程的功能.简言之,本 ...

随机推荐

  1. ClassLoad类加载器与双亲委派模型

    1. 类加载器 Class类描述的是整个类的信息,在Class类中提供的方法getName()是根据ClassPath配置的路径来进行类加载的.若类加载的路径为文件.网络等时则必须进行类加载这是就需要 ...

  2. Fragment以及懒加载

    1.Fragments Fragment是Activity中用户界面的一个行为或者是一部分,你可以在一个单独的Activity上把多个Fragment组合成为一个多区域的UI,并且可以在多个Activ ...

  3. 【面试】【Linux】【Web】基础概念

    1. HTTP https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol 2. TCP handshake https://en.wikipe ...

  4. Spring Boot事务支持

    一.创建项目 二.添加依赖 <dependencies> <dependency> <groupId>org.projectlombok</groupId&g ...

  5. 【Java 8】函数式接口(一)—— Functional Interface简介

    什么是函数式接口(Functional Interface) 其实之前在讲Lambda表达式的时候提到过,所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法. 这种类型的接 ...

  6. 常用 HTTP 状态码

    下面是列举的我在项目中用到过的一些 HTTP 状态码,当然,在具体的使用中并不是用到的状态码越多越好,需要结合自己项目情况来选用适合自己的 HTTP 状态码.   HTTP 状态码 含义说明 200 ...

  7. 面渣逆袭:Java集合连环三十问

    大家好,我是老三.上期发布了一篇:面渣逆袭:HashMap追魂二十三问,反响很好! 围观群众纷纷表示 不写,是不可能不写的,只有卷才能维持了生活这样子. 当然,我写的这一系列,不是背诵版,是理解版,很 ...

  8. Mysql实例 数据库优化

    目录 一.前言 二.数据库表设计 三.数据库结构设计 四.数据库性能优化 硬件配置选择 数据库配置优化 系统配置优化 数据库安全优化 五.数据库架构扩展 增加缓存 主从复制与读写分离 分库 分表 分区 ...

  9. 配置yum代理

    一.说明 很多内网环境无法使用yum 二.配置 1.安装nginx 2.配置 server { listen 808; #禁用multipart range功能 max_ranges 1; serve ...

  10. 【dva】dva的基本用法

    services 该文件夹用于存储services,里面的内容为接口调用函数,记得将数据返回.(request是我自己封装函数,也可以用axios原生的函数) const finishTask = { ...