playwright--自動化(三): 跳過檢測 使用正常谷歌 指定用戶數據 下載文件


更多教程請點擊查看gale博客

首先上一個被拷貝的慘不忍睹 上一個是滑塊驗證[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"]')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM