标签: playwright-python

有没有办法使用剧作家连接到我现有的浏览器会话

我希望连接到网站并下载一些 pdf 文件。该网站允许我们只有登录后才能查看内容。它要求我们使用OTP登录,并且不能同时在超过3台设备上登录。

我想下载列出的所有 pdf 文件。所以我之前尝试过

python playwright open --save-storage websitename.json
Run Code Online (Sandbox Code Playgroud)

保存登录信息。但它不适用于该特定网站。website.json 文件是空的,但它适用于其他网站。

因此,我能想到的唯一解决方案是连接到当前的浏览器,打开该网站,然后下载这些 pdf。

如果您对此有解决方案,甚至有其他方法,请告知。

我也在考虑转行做木偶师。但是,我不知道使用node.js解析html,因为我觉得使用css选择器更舒服,所以我无法切换它。

web-scraping python-3.x puppeteer playwright-python

17
推荐指数
2
解决办法
1万
查看次数

如何使用 Playwright 下载 PDF 文件?(Python)

我正在尝试使用 Playwright 自动下载 PDF 文件,我的代码与 Selenium 一起使用,但 Playwright 中的一些功能引起了我的注意。真正的问题是文档 没有帮助。当我点击下载时,我得到:
在此输入图像描述

而且我无法更改下载的目录,当浏览器/上下文关闭时它也会删除“文件”。使用 Playwright 我可以实现很好的下载自动化吗?

代码:

def run(playwright):
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context(accept_downloads=True)

    # Open new page
    page = context.new_page()

    # Go to http://xcal1.vodafone.co.uk/
    page.goto("http://xcal1.vodafone.co.uk/")

    # Click text=Extra Small File 5 MB A high quality 5 minute MP3 music file 30secs @ 2 Mbps 10s >> img
    with page.expect_download() as download_info:
        page.click("text=Extra Small File 5 MB A high quality 5 minute MP3 music file 30secs @ 2 Mbps 10s >> …
Run Code Online (Sandbox Code Playgroud)

python playwright playwright-python

10
推荐指数
1
解决办法
1万
查看次数

如何设置 Playwright 不自动跟随重定向?

我想使用 Playwright 打开一个网站,但不希望被自动重定向。

在其他一些 Web 客户端中,它们具有参数链接follow=False以在重定向后自动禁用。但我在剧作家上找不到。

async def run(playwright):
    chromium = playwright.chromium
    browser = await chromium.launch()
    context = await browser.new_context()
    page = await context.new_page()

    def handle_response(response):
        print(f'status: {response.status} {response.url}')
    page.on('response', handle_response)

    await page.goto("https://google.com")
    await browser.close()

Run Code Online (Sandbox Code Playgroud)

这是示例代码,我们知道 google.com 会响应 301 并将重定向到www.google.com。是否可以在收到 301 后停止该过程,这样我就不需要继续处理www.google.com以及此后的所有响应?

请求文档中,我得到了Page.on('response')当/如果收到请求的响应状态和标头时发出的信息。

但是当Page on('response')回调后如何停止Request呢?我看到其他一些类似的问题,使用 Route.abort() 或 Route.fulfill(),但我仍然没有得到我的案例的答案。

感谢您的帮助。

python playwright playwright-python

10
推荐指数
1
解决办法
5858
查看次数

使用 Playwright for Python,如何从下拉列表中选择选项?

这是关于 Playwright for Python 基本功能的问题的后续内容。

如何从下拉列表中选择一个选项

此示例远程控制一个 vuejs 网站,该网站具有“苹果”、“香蕉”、“胡萝卜”、“橙子”等水果的下拉列表

这里我想选择选项“香蕉”

from playwright import sync_playwright
import time

URL = '<my url>'

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.newPage()
    page.goto(URL)

    # identify this element by ID. Wait for it first
    new_selector = 'id=name-fruit'
    page.waitForSelector(new_selector)
    handle = page.querySelector(new_selector)

    # at this point I have the element and can print the content
    print(handle.innerHTML())
Run Code Online (Sandbox Code Playgroud)

下拉列表 HTML 像这样

<select data-v-c2cef47a="" id="name-fruit" autocomplete="true" class="form-select__select">
    <option data-v-c2cef47a="" disabled="disabled" …
Run Code Online (Sandbox Code Playgroud)

python playwright playwright-python

8
推荐指数
1
解决办法
2万
查看次数

Python Playwright 同步 API 与异步 API 之间有什么区别?

我已经开始学习playwright-python,该包playwright有两个子模块async_apisync_api。然而,我找不到关于它们各自优缺点的更深入的描述或讨论。从他们的名字来看,我假设同步 API 调用是阻塞的,而异步 API 调用在后台运行?

它们的功能是否不同,即是否存在无法sync_api完成您可以使用 来完成的事情的情况async_api(反之亦然)?

python webautomation async-await playwright playwright-python

8
推荐指数
1
解决办法
6599
查看次数

在 Playwright for Python 中,如何获取与 ElementHandle 相关的元素(孩子、父母、祖父母、兄弟姐妹)?

在 playwright-python 中我知道我可以得到一个elementHandleusing querySelector().

示例(同步):

from playwright import sync_playwright

with sync_playwright() as p:
    for browser_type in [p.chromium, p.firefox, p.webkit]:
        browser = browser_type.launch()
        page = browser.newPage()  
        page.goto('https://duckduckgo.com/')
        element = page.querySelector('input[id=\"search_form_input_homepage\"]')
    
Run Code Online (Sandbox Code Playgroud)

如何根据 this 获取相对于此的元素elementHandle?即父母、祖父母、兄弟姐妹、孩子的句柄?

python dom handle playwright playwright-python

7
推荐指数
1
解决办法
1万
查看次数

如何处理 Playwright-python 中 wait_for_selector 函数的 TimeoutError?

我想用它Except TimeoutError来处理超时问题。但脚本总是抛出一个超时错误,而不是按照我的计划打印消息。

这是我的代码:

try:
    await page.wait_for_selector("#winiframe_main", timeout=10000, state='detached')
    print("The frame is detached.")
except TimeoutError:
    print("The frame is not detached")
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题吗?

python exception playwright-python

7
推荐指数
1
解决办法
4692
查看次数

python playwright 中的打印页面源代码

我有 PHP 脚本,我使用带有 URL 参数的代码调用 python 函数:

import json
import sys
import urllib.parse
link = urllib.parse.unquote(sys.argv[1])
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch()
    context = browser.new_context(user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')
    page = context.new_page()
    cookie_file = open('./cookies.json')
    cookies = json.load(cookie_file)
    print(cookies)
    context.add_cookies(cookies)
    page.goto(link)
    try:
        page.wait_for_timeout(10000)
        print(page.innerHTML("*"))
        page.close()
        context.close()
        browser.close()      
    except Exception as e:
        print("Error in playwright script.")
        page.close()
        context.close()
        browser.close()     
Run Code Online (Sandbox Code Playgroud)

但是,当我访问页面后想打印页面源时,我收到

Error in playwright script.
Run Code Online (Sandbox Code Playgroud)

因为我尝试过的代码不起作用:

print(page.innerHTML("*"))
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

python webautomation python-3.x playwright playwright-python

7
推荐指数
1
解决办法
9961
查看次数

启动剧作家驱动程序会话,但不要隐身

目前我使用下面的代码打开一个新的浏览器会话,但它总是以隐身方式启动,我可以启动一个新的 chromium 会话但不以隐身方式启动吗?:

from behave import *
from playwright.sync_api import sync_playwright
import time


class session_driver:
    driver = None

    def open_browser(self, url):
        playW_sync_instace = sync_playwright().start()
        global browser
        browser = playW_sync_instace.chromium.launch(headless=False)
        browser.new_context(record_video_dir="videos/",
        record_video_size={"width": 640, "height": 480})
        self.driver = browser.new_page()
        self.driver.goto(url)
Run Code Online (Sandbox Code Playgroud)

python-3.x playwright playwright-python

7
推荐指数
1
解决办法
8758
查看次数

Python - 剧作家超时

我正在使用 Playwright 上传文件并下载结果。当输入文件很大并且需要很长时间来处理时,我会从剧作家那里得到一个超时;“下载”按钮需要很长时间才会出现。

    raise exception
playwright._impl._api_types.TimeoutError: Timeout 30000.0ms exceeded while waiting for event "download"
=========================== logs ===========================
waiting for event "download"
============================================================
Run Code Online (Sandbox Code Playgroud)

我怎样才能让剧作家在那个特定事件上等待更长时间?

with page.expect_download() as download_info:
    page.locator("text=Download").click()
    #todo: wait longer?
download = download_info.value
# expect(page).to_have_url("http://localhost:8080/swagger/#/NER/post_ner")
path = download.path()
suggested_filename = file_out
download.save_as(suggested_filename)
Run Code Online (Sandbox Code Playgroud)

python webautomation playwright playwright-python

7
推荐指数
1
解决办法
8772
查看次数