我使用selenium-2.30.0运行一个测试(在Windows上),运行了几个小时(~8小时).我使用的是FF驱动程序,但是在45分钟或更短的时间后内存耗尽,测试执行就会挂起.我无法使用HTMLUnitDriver(我认为纯Java解决方案是答案)以与FF驱动程序相同的方式运行(因为它需要等待页面加载而且我绝对不想在我的代码中放置随机线程睡眠或通过扩展HTMLUnitDriver实现任何新功能.
有没有办法让这个工作?
testing performance selenium webautomation selenium-webdriver
我们需要从C++应用程序(登录到应用程序,执行某些操作,注销)中执行一些相当复杂的Web自动化,但性能非常重要,因此我们正在考虑选项.
有没有办法直接从C++ 驱动WebKit或其他无头引擎,而不需要更多的层(如selenium + webdriver + network communication + ...)?也许是Chromedriver?
如果无法使用选项1,那么从C++运行WebDriver(使用真实浏览器)的最佳方式是什么?
需要你的帮助来创建一个量角器打字稿代码,如何点击这个按钮之一?它有_ngcontent类和span类,有没有人知道如何做到这一点?网站上的代码是:
<form _ngcontent-c34 novalidate class="ng-untouched ng-unreal ng-valid">
<atx-create-license-act-main _ngcontent-c34 _nghost-c36>
<button _ngcontent-c36 color="accent" mat-raised-button class="mat-raised-button mat-accent">
<span class="mat-button-wrapper">Add License</span>
<div class="mat-button-droped mat-droped" matdrop></div>
<div class="mat-button-focus-overlay"></div>
</button>
</atx-create-license-act-main>
</form>
<form _ngcontent-c34 novalidate class="ng-untouched ng-unreal ng-valid">
<atx-create-license-act-main _ngcontent-c34 _nghost-c36>
<button _ngcontent-c36 color="accent" mat-raised-button class="mat-raised-button mat-accent">
<span class="mat-button-wrapper">Add License</span>
<div class="mat-button-droped mat-droped" matdrop></div>
<div class="mat-button-focus-overlay"></div>
</button>
</atx-create-license-act-main>
</form>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了下面的代码,我似乎无法使它工作......
clickdone = element.all(by.cssContainingText('.mat-button-wrapper','Add License')).get(0);
clickdone = element.all(by.css('button.mat-raised-button.mat-accent')).get(1);
clickdone = element(by.cssContainingText('span.mat-button-wrapper','Add License'));
clickdone = element.all(by.cssContainingText('button.mat-raised-button.mat-accent','Add License')).get(0);
Run Code Online (Sandbox Code Playgroud)
然后表演......
clickdone.click();
Run Code Online (Sandbox Code Playgroud)
他们似乎都没有工作..并且错误说.."失败:元素无法互动".这是什么意思?我坚持这一点,任何想法如何做到这一点?
我需要创建一个 PDF 缓冲区并将其保存到数据库中。我将完整的 DOM 传递给 puppeteer,其中大部分工作得很好。当我打开创建的 PDF 缓冲区时,将应用引导样式,我会得到一个漂亮的 PDF。
但是,字体很棒的图标不会显示。我只有两个 CSS 文件:framework.css(使用 SASS 创建并包含自定义样式、引导样式和 font-awesome)和 print-media(包含打印媒体 css 以隐藏或显示导航等内容)。这是我创建 PDF 缓冲区的代码:
const browser = await puppeteer.launch({
args: ['--disable-dev-shm-usage', '--no-sandbox', '--headless', '--disable-gpu'],
executablePath: pathToChrome}
);
const page = await browser.newPage();
const content = await page.setContent(pdfOptions.dom);
const addCss7 = await page.addStyleTag({path: appPath + '/public/css/framework.css'});
const addCss8 = await page.addStyleTag({path: appPath + '/public/css/print-media.css'});
const buffer = await page.pdf();
F.log(buffer);
Run Code Online (Sandbox Code Playgroud)
在 css 文件夹中,我创建了一个包含 font-awesome 字体的 fonts 文件夹,@font-face 引用了此路径:
const browser = await puppeteer.launch({
args: ['--disable-dev-shm-usage', …Run Code Online (Sandbox Code Playgroud) 我想知道是否存在一些标志或标签,网站可以使用它来检测来自 Puppeteer 的请求?
当我基于Puppeteer运行我的代码来访问目标网站时,我发现该网站似乎知道该请求是由Puppeteer发出的。
怎么办呢?
如何在 playwright 中运行自定义 js 函数?例如显示警报。我已经尝试过这种方式,但没有奏效。
var url = await page.evaluate(async() => {
await function alert() {
alert("alert");
}
await alert();
});
Run Code Online (Sandbox Code Playgroud) javascript webautomation puppeteer chrome-devtools-protocol playwright
我正在使用puppeteer-core并连接到我自己的 chrome 安装。这工作正常,但如何在当前活动选项卡上执行命令?如何获得它的参考?
const wsChromeEndpointurl = 'ws://127.0.0.1:9222/devtools/browser/12345';
const browser = await puppeteer.connect({
browserWSEndpoint: wsChromeEndpointurl
});
const page = <active tab> // what do I need here?
Run Code Online (Sandbox Code Playgroud)
(我的目标是做一些事情,比如手动登录网站,然后让我们puppeteer接管。所以我真的很想使用puppeteer-core)
我已经成功地在 python 中使用 Playwright 从页面中获取元素。我现在遇到了从嵌入iframe的文档中获取元素的挑战。作为示例,我使用了w3schools 页面来解释<option>element,该页面在 iframe 中显示结果。<option>我正在尝试从 iframe 中检索该元素的句柄。
获取页面上的 an 元素的“正常”方式page.querySelector()无法获取 an elementHandle,这只会打印<class 'NoneType'>:
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch(headless=False)
page = browser.newPage()
page.goto('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_option')
element = page.querySelector('select')
print(type(element))
browser.close()
Run Code Online (Sandbox Code Playgroud)
我尝试首先显式获取 iframe 的句柄,但这会产生相同的结果 ( <class 'NoneType'>):
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch(headless=False)
page = browser.newPage()
page.goto('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_option')
iframe = page.querySelector('iframe')
element = …Run Code Online (Sandbox Code Playgroud) 是否可以禁用特定 mime 类型的下载。例如,导航到默认情况下将下载 zip 存档的 URL 不应执行任何操作。
编辑:
我事先不知道什么 url 将被访问以及什么将返回该 url。
使用 Playwright for Python,我想等待内容更改。
我可以像这样获取选择器的内容
month = page.querySelector('.day__month_btn').innerText()
Run Code Online (Sandbox Code Playgroud)
在此示例中,我正在读取日期选择器元素的月份值,并希望选择下个月。然后等待,直到月份发生变化。
要更改月份,我可以单击下个月图标
page.querySelector('.next').click()
Run Code Online (Sandbox Code Playgroud)
我现在想等到点击被接受。
一种 hacky 的方法是等待,即重复获取该值,直到它发生变化
while True:
if page.querySelector('.day__month_btn').innerText() != month:
break
time.sleep(0.2)
Run Code Online (Sandbox Code Playgroud)
在现实世界中,我还需要检查超时。
有一个更好的方法吗?
webautomation ×10
puppeteer ×5
javascript ×3
node.js ×3
playwright ×3
python ×2
angular ×1
c++ ×1
fonts ×1
iframe ×1
jasmine ×1
pdf ×1
performance ×1
protractor ×1
selenium ×1
testing ×1
typescript ×1
webdriver ×1