還是前兩天做一個商城后台爬蟲,限制用戶緩存,不能用谷歌開發版本,同時需要下載文件。
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"]')