還是前兩天做一個商城後臺爬蟲,限制使用者快取,不能用谷歌開發版本,同時需要下載檔案。
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"]')