下载Playwright
首先创建一个虚拟环境,然后再在虚拟环境中,使用pip下载Playwright包
pip install playwright
下载完成后,运行该命令将会下载所需的浏览器二进制文件,包括 Chromium、Firefox 和 WebKit。
一旦下载完成,您应该能够启动浏览器并正常执行 Playwright 脚本了。
playwright install
或者
python -m playwright install
Playwright教程
操作新建浏览器实例
这里模拟了新建一个浏览器实例,然后搜索词条,再打开这个词条,读取词条所有内容的操作
# -*- coding = utf-8 -*- import time from playwright.sync_api import sync_playwright from datetime import datetime def search(page): try : # 打开网址 page.goto('https://www.baidu.com') # 根据id定位元素,并且输入内容test page.locator("#kw").fill("test") # 使用文本选择器定位包含特定文本的元素,并且点击元素 page.locator("text='百度一下'").click() # 根据xpath定位元素,并且点击test百度词条 page.locator('//*[@id="3"]/div/h3/a/div/div/p/span/span').click() # 如果点击的链接新打开一个窗口,定位到新打开的页面 new_page = context.wait_for_event("page") # 等待页面完全加载 new_page.wait_for_load_state('load') # 使用 CSS 选择器定位唯一类名的单个元素 test_element = new_page.locator('.para_YSJB6.summary_LggeX.MARK_MODULE') test_text = test_element.inner_text() print(test_text) except Exception as e: # 获取当前时间并格式化为字符串 timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") # 创建截图文件名 screenshot_filename = f'error_call/search_{timestamp}.png' # 保存截图 page.screenshot(path=screenshot_filename) # 记录调用日志,以便后续分析 with open(f'error_call/search_{timestamp}.txt', 'w') as f: f.write(str(e)) if __name__ == '__main__': playwright = sync_playwright().start() # browser = playwright.chromium.connect_over_cdp("http://127.0.0.1:9222") # 使用with 语句运行 Playwright,同步启动和关闭 Playwright 实例。 with playwright.chromium.connect_over_cdp("http://127.0.0.1:9222") as browser: # 通过9222端口连接到本地浏览器 # browser = playwright.chromium.connect_over_cdp("http://127.0.0.1:9222") print(f"连接到本地浏览器状态:{browser.is_connected()}") # 创建一个新的浏览器上下文。浏览器上下文类似于一个新的浏览器实例,它们之间互相隔离。 context = browser.contexts[0] page = context.new_page() # 执行登录操作,search 函数中包含具体的搜索逻辑。 search(page) # 关闭页面 page.close() # 关闭浏览器上下文 context.close() |
连接到本地浏览器实例
这里模拟了连接到本地浏览器实例,然后搜索词条,再打开这个词条,读取词条所有内容的操作
在连接浏览器之前,需要先打开浏览器的远程调试端口9222,如果打开的是谷歌浏览器,可以在终端中用这个命令
open -a "Google Chrome" --args --remote-debugging-port=9222
# -*- coding = utf-8 -*- import time from playwright.sync_api import sync_playwright from datetime import datetime def search(page): try : # 打开网址 page.goto('https://www.baidu.com') # 根据id定位元素,并且输入内容test page.locator("#kw").fill("test") # 使用文本选择器定位包含特定文本的元素,并且点击元素 page.locator("text='百度一下'").click() # 根据xpath定位元素,并且点击test百度词条 page.locator('//*[@id="3"]/div/h3/a/div/div/p/span/span').click() # 如果点击的链接新打开一个窗口,定位到新打开的页面 new_page = context.wait_for_event("page") # 等待页面完全加载 new_page.wait_for_load_state('load') # 使用 CSS 选择器定位唯一类名的单个元素 test_element = new_page.locator('.para_YSJB6.summary_LggeX.MARK_MODULE') test_text = test_element.inner_text() print(test_text) except Exception as e: # 获取当前时间并格式化为字符串 timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") # 创建截图文件名 screenshot_filename = f'error_call/search_{timestamp}.png' # 保存截图 page.screenshot(path=screenshot_filename) # 记录调用日志,以便后续分析 with open(f'error_call/search_{timestamp}.txt', 'w') as f: f.write(str(e)) if __name__ == '__main__': playwright = sync_playwright().start() # browser = playwright.chromium.connect_over_cdp("http://127.0.0.1:9222") # 使用with 语句运行 Playwright,同步启动和关闭 Playwright 实例。 with playwright.chromium.connect_over_cdp("http://127.0.0.1:9222") as browser: # 通过9222端口连接到本地浏览器 # browser = playwright.chromium.connect_over_cdp("http://127.0.0.1:9222") print(f"连接到本地浏览器状态:{browser.is_connected()}") # 创建一个新的浏览器上下文。浏览器上下文类似于一个新的浏览器实例,它们之间互相隔离。 context = browser.contexts[0] page = context.new_page() # 执行登录操作,search 函数中包含具体的搜索逻辑。 search(page) # 关闭页面 page.close() # 关闭浏览器上下文 context.close() |