我希望连接到网站并下载一些 pdf 文件。该网站允许我们只有登录后才能查看内容。它要求我们使用OTP登录,并且不能同时在超过3台设备上登录。
我想下载列出的所有 pdf 文件。所以我之前尝试过
python playwright open --save-storage websitename.json
Run Code Online (Sandbox Code Playgroud)
保存登录信息。但它不适用于该特定网站。website.json 文件是空的,但它适用于其他网站。
因此,我能想到的唯一解决方案是连接到当前的浏览器,打开该网站,然后下载这些 pdf。
如果您对此有解决方案,甚至有其他方法,请告知。
我也在考虑转行做木偶师。但是,我不知道使用node.js解析html,因为我觉得使用css选择器更舒服,所以我无法切换它。
我正在尝试使用 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) 我想使用 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(),但我仍然没有得到我的案例的答案。
感谢您的帮助。
这是关于 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) 我已经开始学习playwright-python,该包playwright有两个子模块async_api和sync_api。然而,我找不到关于它们各自优缺点的更深入的描述或讨论。从他们的名字来看,我假设同步 API 调用是阻塞的,而异步 API 调用在后台运行?
它们的功能是否不同,即是否存在无法sync_api完成您可以使用 来完成的事情的情况async_api(反之亦然)?
python webautomation async-await playwright playwright-python
在 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?即父母、祖父母、兄弟姐妹、孩子的句柄?
我想用它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)
我的代码有什么问题吗?
我有 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
目前我使用下面的代码打开一个新的浏览器会话,但它总是以隐身方式启动,我可以启动一个新的 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) 我正在使用 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) playwright ×8
python ×8
python-3.x ×3
async-await ×1
dom ×1
exception ×1
handle ×1
puppeteer ×1
web-scraping ×1