playwright--自动化(三): 跳过检测 使用正常谷歌 指定用户数据 下载文件
时间:2022-01-05 作者:carl-
首先上一个被拷贝的惨不忍睹 上一个是滑块验证[https://域名/carl-/p/域名]
还是前两天做一个商城后台爬虫,限制用户缓存,不能用谷歌开发版本,同时需要下载文件。
话不多说上代码[https://域名/carl-/p/域名]
import getpass
from 域名_api import sync_playwright
# 不出意外这个可以获取到你google的本地缓存文件
__USER_DATE_DIR_PATH__ = f"C:\\Users\\{域名ser()}\\AppData\Local\Google\Chrome\\User Data"
playwright = sync_playwright().start()
browser = 域名ch_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 = 域名page()
# 访问谷歌首页
域名(\'https://域名\',wait_until=\'networkidle\',timeout=90000)
wait_until=\'networkidle\' 意思是 跳转过后再一定时间内没有网络请求链接
timeout 很好理解 超时时间90秒
js注入(用途的话是选择器选择元素用的,具体的js 你们自己写)
# 算是获得句柄吧
window_handle = 域名uate_handle("window")
# 选择元素
域名uate("域名ySelectorAll(\'#drrReportRangeTypeRadioMonthly\')[0].checked=true")
# 自带select选择 data自行补充
drrMonthlySelect = 域名_for_selector(\'//select[@id="drrMonthlySelect"]\')
域名ct_option(date)
接下来是下载操作
# 打开下载器
with 域名ct_download() as download_info:
#找到你要下载的东西,找到点击的元素,点击
域名_for_selector(\'//a[@id="sspa-reports:report-settings-page:-download-button"]\').click()
# 下载的东西
download = 域名e
# 下载的路径
域名()
# 下载的文件名
域名ested_filename
# 关闭页面
域名e()
# 关闭浏览器
域名()
剩下的操作 你想干啥干啥
# 补充几个
# 点击
域名k(\'//input[@id="signInSubmit"]\')
# 等待完成
域名_for_load_state("domcontentloaded")
# 输入
域名(\'//input[@id="ap_email"]\', user_str)
# 查找元素
域名_for_selector(\'//select[@id="drrMonthlySelect"]\')